Скільки оперативної пам’яті використовує цей додаток?


10

Якщо я запускаю top -cабо htopотримую процеси зі споживанням пам'яті, але це не те, що я хочу бачити.

Чи існує командний рядок, який дозволяє бачити споживання оперативної пам’яті для даної програми?

Наприклад, я хочу бачити споживання оперативної пам’яті веб-сервера Apache (а не перевіряючи всі процеси, які він працює, замість цього)

ram 

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 Мб (візьміть RES 27 МБ і відніміть загальну (SHR))

Я підтвердив це, перевіривши загальне використання пам'яті (вільний -m, + / буфери / кеш) до та після видачі "mysqld для killall". Після знищення всіх процесів mysqld використання пам'яті знизилося на 25 Мб відповідно до "free -m".

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

Якщо вони різні, ви можете це оцінити, зробивши SUM (RES - SHR). Але це працює лише в тому випадку, якщо процеси насправді є окремими процесами, а не просто нитками того самого процесу. Перегляд PPID (батьківського процесу ідентифікатор) також допомагає. Якщо всі вони мають одного і того ж батька, вони, ймовірно, є лише нитками (хоча це не обов'язково).

На жаль, не існує справжнього хорошого простого способу відповісти на це в Linux. Єдиний простий спосіб - перевірити "безкоштовно" безпосередньо перед припиненням процесу та перевірити його ще раз одразу після. подивіться на рядок "- / + буфери / кеш:" і подивіться, наскільки зменшилось використання пам'яті, і це скаже вам, наскільки вона використовується.


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, тому основний процес відображається, якщо будь-яке ім'я ви вказуєте (я думаю, не знаю, чи воно стосується батьківських процесів)
Wilf

2
Це відокремлює вихідний процес. Ви не отримаєте загальний об'єм пам'яті, використаний усіма процесами Apache таким чином. Потрібно підвести підсумки, але рахувати спільні регіони лише один раз (це важкий біт).
Жил 'ТАК - перестань бути злим'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.