У меня есть сервер с 12G памяти. Фрагмент вершины показан ниже:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12979 frank 20 0 206m 21m 12m S 11 0.2 26667:24 krfb
13 root 15 -5 0 0 0 S 1 0.0 36:25.04 ksoftirqd/3
59 root 15 -5 0 0 0 S 0 0.0 4:53.00 ata/2
2155 root 20 0 662m 37m 8364 S 0 0.3 338:10.25 Xorg
4560 frank 20 0 8672 1300 852 R 0 0.0 0:00.03 top
12981 frank 20 0 987m 27m 15m S 0 0.2 45:10.82 amarok
24908 frank 20 0 16648 708 548 S 0 0.0 2:08.84 wrapper
1 root 20 0 8072 608 572 S 0 0.0 0:47.36 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
В free -m
показывает следующее:
total used free shared buffers cached
Mem: 12038 11676 362 0 599 9745
-/+ buffers/cache: 1331 10706
Swap: 2204 257 1946
Если я правильно понимаю, система имеет только 362 МБ доступной памяти. Мой вопрос: как я могу узнать, какой процесс потребляет большую часть памяти?
Как фоновая информация, система работает 64bit OpenSuse 12
.
Ответы:
Во-первых, повторите эту мантру немного: «неиспользованная память - это потерянная память». Ядро Linux хранит огромное количество файловых метаданных и файлов, которые были запрошены, пока что-то, что выглядит более важным, не вытолкнет эти данные. Вот почему вы можете запустить:
и второй
find
экземпляр работает на нелепой скорости.Linux только оставляет немного «свободной» памяти для обработки скачков в использовании памяти без особых усилий.
Во-вторых, вы хотите найти процессы, которые пожирают всю вашу память; в
top
использованииM
команды для сортировки по использованию памяти. Не стесняйтесь игнорироватьVIRT
столбец, который просто говорит вам, сколько виртуальной памяти было выделено, а не сколько памяти использует процесс.RES
сообщает, сколько памяти является резидентной или в настоящее время находится в оперативной памяти (в отличие от подкачки на диск или вообще не выделяется в первую очередь, несмотря на запрос).Но, поскольку
RES
подсчитывается, например,/lib/libc.so.6
память один раз почти для каждого процесса, это не совсем хороший показатель того, сколько памяти использует процесс. ВSHR
столбце указывается, сколько памяти используется совместно с другими процессами, но нет никакой гарантии, что другой процесс на самом деле делится - это может быть совместное использование, просто никто больше не хочет делиться.Этот
smem
инструмент предназначен для того, чтобы помочь пользователям лучше оценить, сколько памяти действительно нужно винить в каждом отдельном процессе. Он делает некоторую умную работу, чтобы выяснить, что действительно уникально, что является общим, и пропорционально соотносит общую память с процессами, разделяющими ее.smem
может помочь вам понять, где ваша память идет лучше, чемtop
будет, ноtop
это отличный первый инструмент.источник
/proc/meminfo
и/proc/slabinfo
файлы подробно , что ядро использует для хранения данных -slabtop
программа очень похожtop
, но показывает , какие из плит распределителей выделили сколько, каковы их отношения похожи, и т.д.используйте быстрый совет, используя команду top в linux / unix
а затем нажмите Shift+ m(т.е. напишите заглавными буквами
M
).Из
man top
Или альтернативно: нажмите Shift+ f, затем выберите отображение в порядке использования памяти, нажав клавишу, nзатем нажмите Enter. Вы увидите активный процесс, упорядоченный по использованию памяти
источник
M
(Shift
+m
)top -o mem -O cpu
top -o RES
«нераспознанное имя поля« mem »»(Добавление -n числового флага для команды сортировки.)
источник
ps aux --sort '%mem'
как объяснено в моем ответеСначала вы должны прочитать объяснение на выходе
free
. Итог: у вас есть как минимум 10,7 ГБ памяти, легко используемой процессами.Затем вы должны определить, что такое «использование памяти» для процесса (это не просто и не однозначно, поверьте мне).
Тогда мы могли бы помочь больше :-)
источник
Список и сортировка процессов по использованию памяти:
источник
ps -e -orss=,args= | sort -nr | head
ps aux --sort '%mem'
ps из procps (по умолчанию в Ubuntu 12.04) генерирует вывод:
Так вот, Firefox - лучший потребитель с 16% моей памяти.
Вы также можете быть заинтересованы в:
источник
Вы можете указать, по какому столбцу сортировать, выполнив следующие действия:
источник
Вы можете увидеть использование памяти, выполнив этот код в своем терминале:
источник
Как подсчитать использованную память по имени процесса:
Иногда, даже глядя на самые большие отдельные процессы, все еще остается много неиспользованной памяти. Чтобы проверить, существует ли много таких же меньших процессов, использующих память, вы можете использовать команду, подобную следующей, которая использует awk для суммирования общего объема памяти, используемой процессами с одинаковым именем:
например, вывод
источник
В этот самый второй раз
Постоянно обновляемый
Я также добавил несколько вкусностей, которые вы можете оценить (или игнорировать).
-n 1
смотреть и обновлять каждую секунду-U $(whoami)
Чтобы показать только ваши процессы. $ (некоторая команда) оценивает сейчас| head -n4
Чтобы показывать только заголовок и 3 процесса одновременно, часто требуются позиции с высокой загрузкой${1-4}
говорит, что мой первый аргумент,$1
я хочу по умолчанию 4, если я не предоставлю егоЕсли вы используете Mac, вам может потребоваться установить часы
В качестве альтернативы вы можете использовать функцию
источник
-m
-r
У вас есть эта простая команда:
источник