Linux работает медленно, осталось 0 подкачки

Linux работает медленно, осталось 0 подкачки

Наш сервер Linux отвечает очень медленно. topНе показывает чрезмерной загрузки ЦП. Я заметил, что хотя свободной памяти около 5 ГБ, система использует весь swap, свободного swap не осталось. Может ли это быть причиной медленной работы системы? Есть ли решение, кроме уменьшения количества процессов?

Во-вторых, даже если есть свободная память, почему Linux уже использует swap? Я думал, что swap используется только тогда, когда памяти фактически не осталось.

free -m
             total       used       free     shared    buffers     cached
Mem:         32045      26218       5826          0        127        123
-/+ buffers/cache:      25967       6077
Swap:        16387      16387          0

Обновлять:

  • Уровень подкачки по умолчанию: 60
  • Я не думаю, что это система numa.
  • Я вижу несколько процессов Java, работающих с кучей размером 8 ГБ:-Xms8000m -Xmx8000m

На первый взгляд кажется безумием, но, возможно, у кого-то были причины так поступать. Я думаю, что это то, что съедает большую часть подкачки, но мне нужно дополнительно изучить, как куча Java влияет на подкачку Linux и память/производительность в целом. Любые указания на влияние вышеуказанной конфигурации кучи Java на производительность системы будут действительно полезны.

решение1

Сколько процессов Java было инициализировано с кучей 8 ГБ? Возможно, оставьте максимум 8 и уменьшите начальный размер кучи. Если у вас есть место на диске, поэкспериментируйте с увеличением размера подкачки

решение2

У вас есть tmpfsмонтирования? Они резервируются подкачкой и могут быть причиной нулевого свободного пространства подкачки. Делать syslogили dmesgпоказывать что-то неожиданное? Вы уверены, что ваша система не постоянно подкачивается? Проверьте vmstat -SK 1и сопоставьте столбцы siи so(перекачанные страницы в и из в КБ/с). Если вам нужно узнать, какие процессы подкачиваются, запустите sudo iotop -od5. Если вы используете Ubuntu, вам нужен delayacctфлаг ядра для полной статистики. Для меня ваша система, похоже, имеет действительно маленький кэш и буферы для такой большой системной памяти.

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

Пространство подкачки особенно важно, если у вас есть программы, которые «утекают» память (то есть программа получает блоки памяти, которые на самом деле не используются). Такая «утечка» может не быть ошибкой в ​​программе, просто может случиться так, что память используется так редко, что ее лучше рассматривать как утекшую. Без пространства подкачки такая утекшая память не может использоваться в качестве кэша или буферов.

Корректно работающая ОС с виртуальной памятью использует swap практически всегда, если только весь рабочий набор (все доступные файлы, вся память, зарезервированная приложениями, и все буферы записи) не помещается в память полностью на все время работы системы. В большинстве случаев это верно только в том случае, если система постоянно перезагружается или имеет огромный объем оперативной памяти по сравнению с размером всей файловой системы.

Связанный контент