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 Мб, правильно? Я подумал, что я ошибаюсь, поэтому я попытался отключить кеширование диска, и это не повлияло – картина осталась прежней.
- Предустановленная двойная загрузка Windows 8 и Linux UEFI на ноутбуке
- Почему я должен использовать sudo для проверки подлинности открытого ключа ssh?
- Могу ли я получить доступ к архивам Microsoft Outlook PST с помощью любых других инструментов?
- Можно ли использовать загрузочный диск linux также в качестве диска для хранения Windows?
- Способ записи загрузочного компакт-диска в раздел?
Итак, я решил выяснить, кто использует всю мою RAM, и я использовал top
для этого. Но, по-видимому, он сообщает, что никакой процесс не использует мою оперативную память. Единственный процесс в моей вершине – MySQL, но он использует 0,1% оперативной памяти и 400 Мбайт свопа. Такое же изображение, когда я пытаюсь запустить другие службы или приложения – все идет по свопу, 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
Перезапуск не помогает, и, кстати, они очень медленны, чего я обычно не ожидал бы на этой машине (4 ядра, 4 Гб оперативной памяти, RAID1).
Итак, с этим – я уверен, что это не дисковый кэш, который использует ОЗУ, потому что обычно он должен быть уменьшен и позволить другим процессам использовать ОЗУ, а не идти на замену.
Итак, наконец, вопрос в том, – если у кого-то есть идеи, как узнать, какой процесс на самом деле использует память так сильно?
- Как анализировать использование диска в командной строке linux?
- SSD AES-256 аппаратное шифрование - как настроить?
- Рекурсивно считать все файлы в каталоге
- Порт Linux открыт локально, но не внешне
- Как использовать различные сетевые интерфейсы для разных процессов?
- Преобразование файла в PDF с помощью LibreOffice под пользователем apache (т.е. при использовании PHP)
- В bash, как сортировать строки с числами в них?
- Как я могу установить CentOS 6 без gui?
В Linux в top
процессе вы можете нажать клавишу <
чтобы сдвинуть выходной дисплей сортировки влево. По умолчанию он сортируется %CPU
поэтому, если вы нажмете клавишу 4 раза, вы будете сортировать ее по VIRT
размер виртуальной памяти дает вам свой ответ.
Другой способ сделать это:
ps -e -o pid,vsz,comm= | sort -n -k 2
Должен давать вам и выводить отсортированные по виртуальным размерам процессов.
Вот длинная версия:
ps --everyone --format=pid,vsz,comm= | sort --numeric-sort --key=2
Показывает память процессов в мегабайтах и путь к процессу.
ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n
Просто побочная заметка на сервере, показывающая те же симптомы, но все еще показывающая исчерпание памяти. В результате оказалось, что sysctl.conf из ящика с 32 ГБ ОЗУ и настройка для БД с огромными страницами, настроенными на 12000. В этом поле имеется только 2 ГБ ОЗУ, поэтому он назначает всю бесплатную ОЗУ огромным страницам (только 960 из них). Установка огромных страниц на 10, поскольку ни один из них не использовался, освободил всю память.
Быстрая проверка / proc / meminfo для поиска настроек HugePages_ может стать хорошим началом для устранения неполадок, по крайней мере, одного неожиданного всплеска памяти.
Вы также можете использовать команду ps для получения дополнительной информации о процессе.
ps aux | less
Я ссылаюсь на эту и общую память, используемую процессом Python? – Переполнение стека , это мой ответ. Теперь я получаю специальный счетчик (python).
# Megabyte. $ ps aux | grep python | awk '{sum=sum+$6}; END {print sum/1024 " MB"}' 87.9492 MB # Byte. $ ps aux | grep python | awk '{sum=sum+$6}; END {print sum " KB"}' 90064 KB
Приложите список процессов.
$ ps aux | grep python root 943 0.0 0.1 53252 9524 ? Ss Aug19 52:01 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid root 950 0.6 0.4 299680 34220 ? Sl Aug19 568:52 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid root 3803 0.2 0.4 315692 36576 ? S 12:43 0:54 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid jonny 23325 0.0 0.1 47460 9076 pts/0 S+ 17:40 0:00 python jonny 24651 0.0 0.0 13076 924 pts/4 S+ 18:06 0:00 grep python
-$ ps aux | grep python root 943 0.0 0.1 53252 9524 ? Ss Aug19 52:01 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid root 950 0.6 0.4 299680 34220 ? Sl Aug19 568:52 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid root 3803 0.2 0.4 315692 36576 ? S 12:43 0:54 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid jonny 23325 0.0 0.1 47460 9076 pts/0 S+ 17:40 0:00 python jonny 24651 0.0 0.0 13076 924 pts/4 S+ 18:06 0:00 grep python
Справка
- Memory – Linux: узнайте, какой процесс использует всю оперативную память? – Суперпользователь
- Общая память, используемая процессом Python? – Переполнение стека
- Linux – ps aux output value – Суперпользователь
Создайте скрипт под названием show-memory-usage.sh
с контентом:
#!/bin/sh ps -eo rss,pid,user,command | sort -rn | head -10 | awk '{ hr[1024**2]="GB"; hr[1024]="MB"; for (x=1024**3; x>=1024; x/=1024) { if ($1>=x) { printf ("%-6.2f %s ", $1/x, hr[x]); break } } } { printf ("%-6s %-10s ", $2, $3) } { for ( x=4 ; x<=NF ; x++ ) { printf ("%s ",$x) } print ("\n") } '