я прошел сквозьЭта статья, где объясняются различные методы проверки использования оперативной памяти. Однако я не могу согласовать различные методы и не знаю, какой из них правильный.
При первом входе в систему меня встречает вот такой экран:
System information as of Sun Apr 28 21:46:58 UTC 2013
System load: 0.0 Processes: 76
Usage of /: 15.6% of 7.87GB Users logged in: 1
Memory usage: 41% IP address for eth0:
Swap usage: 0%
Это говорит мне, что я использую 41% своей оперативной памяти, что кажется довольно высоким показателем, поскольку сервер не делает многого. Или это число относится к чему-то помимо оперативной памяти?
Далее я пробую free -m
метод:
ubuntu@ip-:~$ free -m
total used free shared buffers cached
Mem: 590 513 76 0 67 315
-/+ buffers/cache: 130 459
Swap: 0 0 0
Согласно пояснительной схеме в статье, это означает, что у меня 130 МБ используемой оперативной памяти и 459 МБ свободной оперативной памяти, что говорит о том, что я использую около 22% своей оперативной памяти.
Далее я запускаю top
:
top - 22:14:48 up 195 days, 21:30, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.3%us, 0.3%sy, 0.0%ni, 97.7%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 604376k total, 525692k used, 78684k free, 69124k buffers
Swap: 0k total, 0k used, 0k free, 322740k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 24332 1864 976 S 0.0 0.3 0:08.75 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
Это самое запутанное, так как сводка показывает, что я использую 525 МБ из 604 МБ, и все же, когда я использую интерактивную команду «m» для сортировки по верхней части памяти, верхний процесс использует только 0,3% памяти???
Наконец, ps
команда, похоже, также показывает очень малое использование памяти:
root@ip-:/home/ubuntu# ps -o command,rss
COMMAND RSS
ps -o command,rss 788
sudo su root 1764
su root 1404
bash 2132
Мне бы хотелось, чтобы кто-нибудь исправил все мои недопонимания, которые создают эти очевидные конфликты.
Спасибо!
EDIT для Рахула
Выпуск cat /proc/meminfo
:
MemTotal: 604376 kB
MemFree: 157564 kB
Buffers: 49640 kB
Cached: 231376 kB
SwapCached: 0 kB
Active: 290040 kB
Inactive: 97772 kB
Active(anon): 107672 kB
Inactive(anon): 4844 kB
Active(file): 182368 kB
Inactive(file): 92928 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 52 kB
Writeback: 0 kB
AnonPages: 106836 kB
Mapped: 22920 kB
Shmem: 5712 kB
Slab: 42032 kB
SReclaimable: 34016 kB
SUnreclaim: 8016 kB
KernelStack: 688 kB
PageTables: 3584 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 302188 kB
Committed_AS: 242768 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 7152 kB
VmallocChunk: 34359729008 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 637952 kB
DirectMap2M: 0 kB
решение1
Вам просто нужно понять концепцию памяти.
Согласно вашему выводу /proc/meminfo, вам просто нужно обратить внимание на следующие вещи:
Буферы:- Буфер — это то, что еще не «записано» на диск. Он показывает, сколько оперативной памяти выделено для кэширования дискового блока. «Кэшированный» похож на «Буферы», только на этот раз он кэширует страницы из чтения файла
Кэшировано:- Кэш — это то, что было «считано» с диска и сохранено для дальнейшего использования. Как правило, область кэша можно рассматривать как еще одну «свободную» оперативную память, поскольку она будет постепенно уменьшаться, если приложению потребуется больше памяти.
Достаточно понять, что и "буферы", и "Кэшированные" представляют собой размер системного кэша. Они динамически увеличиваются или уменьшаются в зависимости от внутреннего механизма ядра Linux.
на веб-хостинге они очищают кэш с помощью следующей команды cmd: (в основном настраивается в cron):
sync && echo 3 > /proc/sys/vm/drop_caches
ЦитироватьСвязь
ИЗМЕНИТЬ для еще одного требования, а именно использования памяти на пользователя
#!/bin/bash
total_mem=0
printf "%-10s%-10s\n" User MemUsage
while read u m
do
[[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
total_mem=$(echo $m + $total_mem | bc);
old_user=$u
done < <(ps --no-headers -eo user,%mem| sort -k1)
#--EOF
Пожалуйста, проверьте приведенный выше скрипт и дайте мне знать, отображается ли он правильно или нет.
решение2
Хороший ответ @RahulPatil.
Еще один момент, который следует учитывать относительно ps или top, заключается в следующем:
Этот инструмент [exmap] точнее, чем ps или top, поскольку он учитывает общие библиотеки, используемые несколькими приложениями. Например, если два приложения используют одну и ту же общую библиотеку, которая занимает 1 МБ памяти, ps покажет, что оба приложения используют 1 МБ дополнительной памяти, тогда как exmap более правильно покажет, что каждое приложение использует 500 КБ. Эта большая точность особенно важна для оценки сред рабочего стола, таких как KDE и GNOME, которые очень интенсивно используют библиотеки, общие для приложений.
С помощьюibm/developerworks/linux_memory
Поскольку ваш вопрос относится к headless-серверу, я не уверен, сколько на самом деле будет двойных отчетов у top или ps.
решение3
Боюсь, мы упускаем из виду очевидное, поскольку для большинства из нас это «конечно».
Иона, прости меня, если я ошибаюсь, но твои вопросы звучат так, будто ты не осознаешь, что все эти значения, в частности загрузка ЦП, обычно сильно меняются от секунды к секунде.
Загрузка ЦП может мгновенно возрасти с нескольких единиц до 100% при запуске нового процесса, но быстро (надеюсь) упасть до диапазона ниже 50%.
Использование памяти меняется медленнее, но там Linux пытается использовать память, которая не используется активно, запуская процессы для «кэширования» обращений к диску. Например, он пытается предсказать, что нужно будет считать с диска следующим, например, остаток большого файла после того, как часть была прочитана, и предварительно загрузить его в кэш. Некоторые значения использования памяти включают как память, используемую процессами, так и память, используемую для кэширования. В системе, которая работает некоторое время, оба эти значения в сумме, вероятно, составят 80–90% или больше.
Также учтите, что процесс, который вы запускаете для отображения использования, например top
, , также использует ЦП и память. Если вы написали скрипт с циклом для непрерывного отчета об использовании ЦП, он почти наверняка всегда будет показывать 100%, поскольку сам процесс отчета об использовании (без некоторых sleep
задержек) использует весь ЦП.