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 Мб, правильно? Я подумал, что я ошибаюсь, поэтому я попытался отключить кеширование диска, и это не повлияло – картина осталась прежней.

Итак, я решил выяснить, кто использует всю мою 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 в 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") } ' 
  • Использование терминала Linux / Unix для копирования многих файлов в новое место
  • Avahi: ping не может разрешить имя хоста, но nslookup может
  • Что означает точка в конце `-rw-r-r-`? Как вы устанавливаете его с помощью `chmod`?
  • Как удалить файлы в разных папках через терминал?
  • ITerm2 теряет цвета «ls», если я ssh на сервере
  • Как иметь несколько окон в сеансе терминала SSH?
  • Есть ли способ приостановить отдельные настольные приложения на диске? (Прежде всего Linux)
  • Баш, как глобально исправить ^ H и ^? Проблемы с обратным пространством
  • Как отслеживать использование ЛВС? (AKA 'top для LAN')
  • Как сделать адрес сервера имен постоянным в /etc/resolv.conf?
  • Создание раздела ext4 с консоли
  • Interesting Posts

    C # – вывод изображения в выходной stream ответа, дающий ошибку GDI +

    jQuery вычисляет сумму значений во всех текстовых полях

    В задании A (:) = B количество элементов в A и B должно быть одинаковым

    Как удалить символическую ссылку?

    Как кривить текст в Word 2010?

    Получение «Это приложение находится в режиме разработки» при запуске приложения в прямом эфире на FB

    Устранение проблем с компьютером с расстояния

    Простое описание streamов работника и ввода-вывода в .NET.

    Глобальные переменные в AngularJS

    Преобразование данных акселерометра из координат устройства в координаты реального мира

    Mac Pro не загружается с Windows 7 DVD – мигающий запрещающий знак

    Разрешения пользователя Cpanel + Apache + WordPress

    После переименования столбца введите keyerror

    Почему 7-zip / WinRAR разархивируют файлы до «temp», прежде чем переместить их в пункт назначения?

    Вызов функции PInvoke ” не сбалансировал стек

    Давайте будем гением компьютера.