Запуск top
у пакетному режимі, щоб періодично повідомляти розміри пам'яті, можна побачити, хто використовує пам'ять, коли все йде на південь. Запуск sar
у пакетному режимі повинен дати хорошу діагностику використання пам’яті та відповідних вводу-виводу. Біг munin
для моніторингу системи повинен дати вам графік з хорошою деталізацією того, для чого використовується пам'ять. Це може дуже допомогти.
Ви можете використовувати limit.conf для обмеження максимального розміру ядер програм. Правильно встановлено, це повинно вбивати будь-які програми, що просочуються пам'яттю. Це працює з модулем pam_limits. Обмеження також можна встановити за допомогою ulimits
команди.
Ви запускаєте кілька програм, які можуть використовувати велику кількість пам'яті. Деякі речі, які ви можете подивитися, включають.
- Погано запрограмовані програми, які працюють під,
apache2
можуть витікати з пам'яті. Ви повинні побачити збільшення обсягу пам'яті, коли це станеться. Ви можете налаштувати apache2 на переробку дітей після певної кількості використання, встановивши MaxRequestsPerChild
значення 100 або близько того. Якщо це вирішить проблему, тоді потрібно усунути витік. Я б спочатку це спостерігав.
- MySQL може спробувати завантажити дані в пам'ять. Якщо у вас багато пам’яті в пам'яті, це може спричинити за собою молоть, але не повинно бути таким драматичним, як ви бачите.
- Якщо у вас встановлена велика
tmpfs
файлова система, ви можете просочити пам'ять, якщо файли не буде видалено при використанні. Великі файли тривалої життя також можуть бути проблемою.
- Якщо проблема виникає приблизно в той же час дня, у вас може бути запланована програма, яка просочує пам'ять.
- Якщо у вас є програма, яка виділяє спільну пам'ять, але не випускає її перед виходом, у вас буде відносно невидимий витік пам'яті. Якщо спільна пам'ять заблокована в пам'яті, то це може примусити змінити її. Обсяг наявної спільної пам'яті, як правило, відносно обмежений.
- Пакет liquidsoap + icecast може стикатися з проблемами буферизації, які використовують пам'ять. Я не використовував цю комбінацію, тому не знаю, як це виглядатиме.
Нормальне використання пам'яті: вільна пам'ять - це не те, чого ви хочете багато. Якщо ваша система працює давно і має багато вільної пам’яті, щось не так. Кожен раз, коли ви читаєте чи записуєте файл, блоки переходять у кеш-пам'ять. Це зменшить вашу вільну пам'ять, і це добре. Система збереже достатньо вільного місця для запуску декількох програм, не шукаючи в іншому місці пам'яті. Оскільки багато програм запускаються швидко, їх пам’ять буде повернуто у вільний пул, коли вони перестануть працювати.
Коли ви читаєте файл, який знаходиться в буферному кеші, доступ до диска не потрібен, і читання вирішується з буфера кеша. Письменники використовують аналогічний механізм. Якщо вашій системі потрібна пам'ять, кеш-пам'ять буфера - одне з перших місць, яке використовується. Більшість буферів можна випустити негайно.
Якщо у вас витік пам'яті, ви побачите вільну пам'ять, і буфери обидва почнуть скорочуватися. Це все ще не є серйозною проблемою, оскільки просочена пам’ять повинна врешті-решт переміститися на обмінні місця. Ваша система все одно буде працювати нормально, поки ви не заповніть місце підкачки, і намалюйте залишився вільний простір для того, щоб програми не змогли запуститися. Як правило, може використовуватися невелика кількість місця для заміни.