Сколько оперативной памяти использует это приложение?

10

Если я запускаю top -cили htopполучаю процессы с их потреблением памяти, но это не то, что я хочу видеть.

Есть ли командная строка, позволяющая увидеть потребление ОЗУ данного приложения?

Например, я хочу увидеть потребление ОЗУ веб-сервера Apache (не проверяя все процессы, которые он выполняет, вместо этого)


источник
1
Посмотрите на этот stackoverflow.com/questions/131303/…
TuKsn
Спасибо. Лучшее, что я могу найти в нем - это потребление памяти процессами, что мне дает top -c

Ответы:

4

Здесь есть очень хорошее подробное объяснение: https://blogs.kde.org/2005/09/15/measuring-memory-usage

Но по сути: вы должны действительно покопаться и понять, как настроено приложение.

Так, например, глядя на mysql:

  PID  PPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                    
 6004 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:40.33 mysqld                                                                                                                                            
16115 16085 composit  20   0 37900  27m 2908 S    0  0.2   0:00.37 mysqld                                                                                                                                            
16116 16115 composit  20   0 37900  27m 2908 S    0  0.2   2:07.34 mysqld                                                                                                                                            
16117 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld                                                                                                                                            
16118 16116 composit  20   0 37900  27m 2908 S    0  0.2   3:19.79 mysqld                                                                                                                                            
16119 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.01 mysqld                                                                                                                                            
16120 16116 composit  20   0 37900  27m 2908 S    0  0.2   5:31.09 mysqld                                                                                                                                            
16121 16116 composit  20   0 37900  27m 2908 S    0  0.2  14:19.53 mysqld                                                                                                                                            
16122 16116 composit  20   0 37900  27m 2908 S    0  0.2  36:13.67 mysqld                                                                                                                                            
16123 16116 composit  20   0 37900  27m 2908 S    0  0.2  30:30.64 mysqld                                                                                                                                            
16124 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.15 mysqld                                                                                                                                            
16493 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld    

Общий объем используемой памяти составляет около 25 МБ (возьмите 27 МБ RES и вычтите общее (SHR))

Я проверил это, проверив общее использование памяти (free -m, + / buffers / cache) до и после выдачи killall mysqld. После уничтожения всех процессов mysqld использование памяти сократилось на 25 МБ согласно «free -m».

Если вы видите, что у каждого процесса есть идентичные столбцы VIRT, RES и SHR, они, скорее всего, просто потоки одного и того же процесса. (Старые библиотеки Linux обрабатывали потоки, порождая несколько реальных процессов, которые по существу занимали одну и ту же память)

Если они отличаются, вы можете оценить это, выполнив СУММУ (RES - SHR). Но это работает, только если процессы на самом деле являются отдельными процессами, а не просто потоками одного и того же процесса. Просмотр PPID (ID родительского процесса) также помогает. Если у них у всех один и тот же родитель, они, вероятно, просто потоки (хотя и не обязательно).

К сожалению, в Linux нет действительно хорошего простого способа ответить на этот вопрос. Единственный простой способ - проверить «свободен» непосредственно перед прекращением процесса и проверить его снова сразу после. посмотрите на строку «- / + buffers / cache:» и посмотрите, насколько уменьшилось использование памяти, и это скажет вам, сколько она использовала.

irwinr
источник
2

С небольшой помощью man psи этим прекрасным ответом ...

ps -up $(pidof PROCESS_NAME)

Например:

[wilf@comp ~]$ ps -up $(pidof firefox)
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
wilf      1619  8.9  5.6 1464216 342396 ?      Sl   17:56   1:36 /usr/lib64/firefox/firefox
[wilf@comp ~]$ 

Другие способы:

cat /proc/$(pidof firefox)/status | grep VmSize

Это можно запустить без -xи tail -1:

pmap -x $(pidof firefox) | tail -1

показывает только процент:

top -p $(pidof firefox)

Кроме того, во время использования topвы можете нажать, iчтобы игнорировать процессы бездействия / зомби, чтобы было легче читать: намного меньшая максимальная мощность

Уилф
источник
но приложение запускает несколько процессов, как я могу узнать, какой из них является основным?
Угадай? Я думаю, что pmapпоказывает много вещей о ресурсах, которые использует PID. Информация предоставляется на основе имени процесса и PID, найденного из него с использованием pidof, поэтому основной процесс показывается, если какое бы имя вы ни указали (я думаю, не знаю, относится ли оно к родительским процессам)
Уилф,
2
Это отделяет вывод по процессу. Таким образом вы не получите общий объем памяти, используемый всеми процессами Apache. Вам нужно подвести итоги, но подсчитывать общие регионы только один раз (это сложный момент).
Жиль "ТАК - перестань быть злым"