Як переглянути зведене використання пам'яті груп команд (замість процесів)


10

Чи є спосіб групувати подібні процеси при використанні таких інструментів, як top / htop? Іноді просто хочеться знати, що їсть моя пам'ять, і деякі програми (в основному браузери) використовують декілька процесів, через що важко читати, скільки оперативної пам’яті вони реально використовують.

Поки що я придумав лише щось подібне:

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc

Відповіді:


7

Ви можете використовувати ps -Cлише для відображення інформації про процес для певного імені команди.

напр

ps -C opera

Потім ви можете використовувати інші psпараметри для вилучення лише потрібних даних. Зокрема, hабо --no-headersпридушити заголовки стовпців та -o pmemпоказати відсоток пам'яті, використовуваний процесом.

ps -C opera --no-headers -o pmem

Це дасть вам купу відсотків використання пам'яті, один на рядок.

Існує чимало методів підсумовування подібних даних, один із методів, який я часто використовую, - це передати його в xargs, щоб перетворити його в одну лінію з елементами, розділеними пробілами, потім у sed для перетворення пробілів у +символи, а потім у bcвиконання розрахунок. Ваш метод введення в paste -sd+роботу також і, мабуть, кращий, ніж | xargs | sed.

Збираючи це все разом, ви отримуєте:

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

або

ps -C opera --no-headers -o pmem | paste -sd+ | bc

Іншими словами, ви можете використовувати ps -Cзамість декількох грепів, якщо ви просто хочете отримати дані про одну конкретну запущену програму.

ПРИМІТКА. Ви можете використовувати кілька -Cваріантів в одному командному рядку, якщо ви хочете отримати інформацію про декілька програм одночасно. напр

ps -C iceweasel -C chromium -C opera

Так, перша людина, яка насправді зрозуміла / прочитала моє запитання!
Корда

Єдина проблема, яку я бачу при такому підході, полягає в тому, що деякі програми мають однакову команду, і все ж я не хотів би їх групувати (наприклад, java ... і оскільки я розробник java, я, звичайно, маю щонайменше кілька програм Java). Я думаю, немає ідеального рішення ...
Корда

завжди, ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...наприклад, шукати програму java під назвою foo.
cas

0

Можна зробити сценарій оболонки

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

Це дасть найвищу програму використання пам’яті.


Я намагався це зробити, і це не дало мені цікавих результатів. Наприклад, він показує лише одну програму, і це не та, яка займає більшу частину пам'яті
korda

Є це? Ну ви хочете якусь річ, як топ ?? якщо так, то ви можете змінити сценарій із затримкою на 2 або 1 секунду та запустити те саме за деякий час або для. Для мене він показує найвищу програму використання пам'яті на той час, коли я запускаю цей сценарій. які речі ви намагаєтеся, просто запустіть: ps af -o pmem, cmd | sort -r Це дасть вам найвищу програму використання пам’яті
RahulAN,

Це не працює для мене. Я гадаю, що причина полягає в тому, що сорт включає провідний пробіл
корда

Ви маєте на увазі, що ви не отримуєте правильну назву процесу ??
RahulAN

Так, beacuse ps додає пробіли до відступів. Якщо в одному процесі є двозначне використання, одна цифра використання значень буде відступною та розпочнеться з провідного простору. Я думаю, що додавання чогось подібного sed -e 's/^[[:space:]]*//'повинно це виправити. Також ваш сценарій додає використання пам'яті процесів з однією командою?
korda

0

Зсередини можна використовувати наступне:

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

Ви також можете спробувати:

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

Ця команда дасть 5 найкращих процесів за допомогою використання пам'яті.

Я сподіваюся, що Ви знайдете цю інформацію корисною!


0

Це можна спростити термінамиql .

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

Зауважте, що в даний час він не завантажується в PyPI , а також він може бути встановлений лише на всій системі ( setup.pyтрохи зламаний), наприклад sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.