Как проверить, какой процесс использует больше всего памяти

33

Когда я проверяю freeодин из серверов Prod, он показывает, что используется 70% памяти:

             total       used       free     shared    buffers     cached
Mem:     164923172  141171860   23751312          0    4555616   20648048
-/+ buffers/cache:  115968196   48954976
Swap:      8388600          0    8388600

Но я не нашел, какой процесс использует память, я попробовал topкоманду, и она показывает процесс, использующий память только 1.1 и 5.4%.

Как я могу найти, какой процесс использует память?

Ниже приведены основные результаты команды:

15085 couchbas  25   0 2784m 2.4g  40m S 183.7  1.5 299597:00 beam.smp
28248 tibco     18   0  124m 100m 3440 S 20.9  0.1   2721:45 tibemsd
15334 couchbas  15   0 9114m 8.6g 3288 S  9.0  5.4  12996:28 memcached
15335 couchbas  18   0  6024  600  468 S  2.0  0.0   1704:54 sigar_port
15319 couchbas  15   0  775m 2516  944 S  0.7  0.0 269:13.41 i386-linux-godu
12167 tibco     16   0 11284 1464  784 R  0.3  0.0   0:00.04 top
12701 root      15   0  451m 427m 2140 S  0.3  0.3  18:25.02 controller
13163 root      11  -5     0    0    0 S  0.3  0.0 289:58.58 vxglm_thread
Сандип
источник
Спасибо за быстрый ответ, есть ли способ проверить, что все открытые файлы и какой файл ест память.
1
Попробуйте отсортировать верхний вывод - во время работы нажмите Shift + m
Eenoku

Ответы:

50

Это покажет вам 10 лучших процессов, которые используют больше всего памяти:

ps aux --sort=-%mem | awk 'NR<=10{print $0}'

используя top: когда вы открываете верхнюю часть, нажатие mсокращает процесс на основе использования памяти

Но это не решит вашу проблему, в Linux все является либо файлом, либо процессом. так что файлы, которые вы открыли, тоже будут поглощать память. так что это не поможет.

lsof выдаст вам все открытые файлы с размером файла или смещением файла в байтах.

Hackaholic
источник
5
Вы можете использовать headвместо этого сценария awk - он дает тот же результат, и вы экономите себя, написав много странных символов.
пенополистирол летит
9

Ваш баран на самом деле не используется. По умолчанию Linux просто кэширует содержимое вашего диска и помещает то, что кеширует, в раздел «used» оперативной памяти.

Если вы загружаете приложения, которые на самом деле используют эту оперативную память, это будет их для использования.

Смотрите http://www.linuxatemyram.com/

Жан-Мишель Селерье
источник
Кто сказал что-нибудь о Linux?
Тимоти Пуллиам
у ОП запущен процесс "i386-linux-godu"
Жан-Мишель Селерье
6

Вы можете передать ps и отсортировать, чтобы получить процесс, используя больше памяти. Это также позволит вам указать другие детали процесса, которые вы хотите видеть вместе с ним:

ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less

PS: Выше предполагается, что ваш столбец памяти сначала " sort -k 1 -n -r "

Hynk
источник
3

Вы можете использовать команду slabtop для просмотра того, какие объекты slab используются ядром.
Также вы можете проверить вывод / proc / meminfo

Ищите эти 2 строки в выводе

Slab:              68136 kB
SReclaimable:      21208 kB 

Вышеприведенный пример показывает, что ядро ​​использует 68 МБ кэша slab, а 21 МБ может быть восстановлено. Чтобы восстановить, вы можете использовать технику, описанную здесь https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables

echo 2 > /proc/sys/vm/drop_caches  
Дмитрий Заяц
источник
1

Для интерактивного анализа вы можете использовать htop, а затем нажать функциональную клавишу, F6чтобы выбрать порядок сортировки, например PERCENT_CPU(использование памяти в процентах), M_RESIDENT(размер резидентной памяти, используемая реальная память), M_SIZE(размер виртуальной памяти) или M_SHARE(размер Общая память). Первые два являются соответствующими числами .

Зеленые линии - это нити. Хит (верхний регистр) Kи Hскрыть их.

Марк Векерлин
источник