Я администрирую сервер Debian Linux x86_64 с 125 ГБ ОЗУ, разделом подкачки 10 ГБ и значением подкачки 60.
А бесплатно -gw
выходные распечатки:
общее количество использованных свободных общих буферов доступного кеша
Мем: 125 20 1 25 0 103 78
Обмен: 9 1 7
Каждую ночь запускается задание cron, которое очень интенсивно читает и записывает диск и во время выполнения увеличивает используемую память на 2 ГБ, прежде чем вернуться к ~ 20 ГБ.
В то же время некоторые длительно работающие контейнерные процессы Python (особенно gunicorn) выгружаются.
Со временем эти процессы будут постепенно заполнять своп — через пару недель он будет заполнен на 99%.
Я могу очистить своп, либо перезапустив процессы, либо отключив и снова включив с помощью замена
и свопон
. Но использование подкачки процессов Python снова будет медленно увеличиваться.
Я предполагаю, что часть объяснения может заключаться в том, что из-за ночной работы cron ядро отдает приоритет кешу файловой системы выше, чем процессам Python. Но я также предполагаю, что в этом может быть виновата какая-то программная ошибка в обработке памяти этими процессами Python.
Друг предложил мне купить еще больше оперативной памяти, чтобы было больше места для кеша файловой системы. Мне это кажется чрезмерным. Хотелось бы точнее диагностировать причину подкачки и найти какое-нибудь программное решение проблемы.
Итак, теперь я передаю вопрос Serverfault — что вы думаете об этом явлении и куда мне двигаться дальше?