Прежде чем на самом деле спросить, просто чтобы прояснить: да, я знаю о дисковом кеше, и нет, это не мой случай :) Извините, за эту преамбулу :)
Я использую 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 МБ подкачки. Та же картина, когда я пытаюсь запустить другие сервисы или приложения - все идут подкачкой, 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).
Итак, с этим - я почти уверен, что это не дисковый кеш, который использует ОЗУ, потому что обычно его следует уменьшить и позволить другим процессам использовать ОЗУ, а не переходить в режим подкачки.
Итак, наконец, вопрос в том, есть ли у кого-нибудь идеи, как выяснить, какой процесс на самом деле так интенсивно использует память?
источник
irc.freenode.org
. Я создал чат для расширенного обсуждения здесь .free -m
, но в Linux его можно запросить с помощью его размераcat /proc/spl/kstat/zfs/arcstats | grep data_size
.Ответы:
В Linux в
top
процессе вы можете нажать<
клавишу, чтобы сдвинуть сортировку вывода влево. По умолчанию он сортируется по значению,%CPU
поэтому, если вы нажмете клавишу 4 раза, вы отсортируете ее поVIRT
размеру виртуальной памяти, дающей вам ответ.Еще один способ сделать это:
должен выдавать и выводить отсортированные по процессам виртуальные размеры.
Вот длинная версия:
источник
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
на сервере Ubuntu 11.10.-o
вариантах. RHEL4 это работает. RHEL5:ps -e -o pid,vsz,comm= | sort -n -k 2
работает. Я попробую 11.10 позже вечером, но если вы найдете правильные варианты сортировки, пожалуйста, дайте мне знать.ps -e -o pid,vsz,comm | sort -n -k 2
может работать, но у меня нет места, чтобы проверить в данный момент.-ef
вариантом. Но это, кажется, дает разумный результат:sudo ps axo pid,vsz,comm=|sort -n -k 2
<
я не знал, что это возможно, fedoraps -e --format=pid,rss,args | sort --numeric-sort --key=2
Показать память процессов в мегабайтах и путь процесса.
источник
Просто примечание на сервере, показывающее те же симптомы, но все еще показывающее исчерпание памяти. В итоге был обнаружен файл sysctl.conf из коробки с 32 ГБ ОЗУ и установкой для БД с огромными страницами, настроенными на 12000. В этом блоке есть только 2 ГБ ОЗУ, поэтому он назначал всю свободную ОЗУ огромным страницам (только 960 из них). Установка огромных страниц на 10, так как ни одна из них не использовалась, освобождает всю память.
Быстрая проверка / proc / meminfo для поиска настроек HugePages_ может стать хорошим началом для устранения неполадок, по крайней мере, одного неожиданного сбоя памяти.
источник
В моем случае проблема заключалась в том, что сервер был виртуальным сервером VMware с
vmw_balloon
включенным модулем:Бег:
Таким образом, около 5 ГБ памяти было фактически восстановлено хостом. Таким образом, несмотря на то, что на моей виртуальной машине было 8 ГБ «официально», на практике это было намного меньше:
источник
Вы также можете использовать команду ps, чтобы получить больше информации о процессе.
источник
Я ссылаюсь на это и Общая память, используемая процессом Python? - Переполнение стека , вот мой ответ. Теперь я получаю специальный инструмент для подсчета процессов (python).
Прикрепить мой список процессов.
Ссылка
источник
Создайте скрипт
show-memory-usage.sh
с содержимым:источник
Это также берет идентификатор процесса, сортирует по используемому МБ и выделяет команду (которая создала процесс):
ps aux | awk '{print $6/1024 " MB\t\t" $2 "\t" $11}' | sort -n
источник
Мой сервер Ubuntu DISTRIB RELEASE = 18.04 на Hyper-V использовал большую часть памяти, но все процессы были в порядке. (Допустим, я удалил пакеты snapd и unattended-upgr, но 95% памяти все еще использовалось.)
Ответ заключается в том, что Hyper-V имеет динамическую память, поэтому он использовал память для основного использования системы и ubuntu пометил ее как использованную.
Надеюсь, это кому-нибудь поможет.
источник