Наш сервер 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 практически всегда, если только весь рабочий набор (все доступные файлы, вся память, зарезервированная приложениями, и все буферы записи) не помещается в память полностью на все время работы системы. В большинстве случаев это верно только в том случае, если система постоянно перезагружается или имеет огромный объем оперативной памяти по сравнению с размером всей файловой системы.