После исследования все еще не понимаю, как контролировать использование оперативной памяти

После исследования все еще не понимаю, как контролировать использование оперативной памяти

я прошел сквозьЭта статья, где объясняются различные методы проверки использования оперативной памяти. Однако я не могу согласовать различные методы и не знаю, какой из них правильный.

При первом входе в систему меня встречает вот такой экран:

  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 задержек) использует весь ЦП.

Связанный контент