Linux: выяснить, какой процесс использует всю оперативную память?
Перед тем, как на самом деле спросить, просто для ясности: да, я знаю о дисковом кэше, и нет, это не мой случай :) Извините за эту преамбулу :)
я использую CentOS 5. Каждое приложение в системе сильно меняется, и система работает очень медленно. Когда я делаю free -m
, вот что у меня есть:
total used free shared buffers cached
Mem: 3952 3929 22 0 1 18
-/+ buffers/cache: 3909 42
Swap: 16383 46 16337
Так что, на самом деле, у меня всего 42 Мб! Насколько я понимаю, -/+ buffers/cache
на самом деле не считает дисковый кэш, так что у меня на самом деле только 42 Мб, не так ли? Я подумал, что, возможно, ошибаюсь, поэтому я попытался отключить дисковое кэширование и это не дало никакого эффекта - картинка осталась прежней.
Так что я решил выяснить, кто использует всю мою оперативную память, и я использовал top
для этого. Но, судя по всему, это говорит о том, что ни один процесс не использует мою оперативную память. Единственный процесс в моем топе - это MySQL, но он использует 0.1% оперативной памяти и 400 Мб подкачки. Та же картина, когда я пытаюсь запустить другие службы или приложения - все идут в swap, top
показывает, что MEM не используется (0,1% максимум для любого процесса).
top - 15:09:00 up 2:09, 2 users, load average: 0.02, 0.16, 0.11
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4046868k total, 4001368k used, 45500k free, 748k buffers
Swap: 16777208k total, 68840k used, 16708368k free, 16632k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
3214 ntp 15 0 23412 5044 3916 S 0.0 0.1 0:00.00 17m ntpd
2319 root 5 -10 12648 4460 3184 S 0.0 0.1 0:00.00 8188 iscsid
2168 root RT 0 22120 3692 2848 S 0.0 0.1 0:00.00 17m multipathd
5113 mysql 18 0 474m 2356 856 S 0.0 0.1 0:00.11 472m mysqld
4106 root 34 19 251m 1944 1360 S 0.0 0.0 0:00.11 249m yum-updatesd
4109 root 15 0 90152 1904 1772 S 0.0 0.0 0:00.18 86m sshd
5175 root 15 0 90156 1896 1772 S 0.0 0.0 0:00.02 86m sshd
Restart не помогает, и, кстати, они очень медленные, что я обычно не ожидал бы на этой машине (4 ядра, 4 Гб оперативной памяти, RAID1).
Итак, с этим - я почти уверен, что это не дисковый кэш, который использует оперативную память, потому что обычно его нужно было уменьшить и позволить другим процессам использовать оперативную память, а не подкачивать.
Итак, наконец, вопрос в том - есть ли у кого-нибудь идеи, как узнать, какой процесс на самом деле так интенсивно использует память?