"приятно" для управления памятью

Перед вопросом я приведу немного предыстории: у меня веб-сайт на VPS. VPS itselmf запускает веб-сервер apache, код PHP, который создает страницы с доступом к базе данных SQLite, и выполняет некоторые фоновые задачи, запускаемые заданиями cron.

Эти фоновые задачи в основном обновляют значения БД и добавляют новые записи для отображения пользователям сайта.

С точки зрения производительности, быстродействие веб-сайта является приоритетом, но фоновые задачи не чувствительны ко времени, нет никаких проблем, если их нужно отложить, замедлить,.... Учитывая, что у меня не так много посещений (около 4000 просмотров страниц в день, большинство из них кэшируются), я могу позволить себе запускать их с низким приоритетом, и они по-прежнему выполняют свою работу. С точки зрения процессора, я запускаю apache с "добротностью", равной 0 (по умолчанию), а фоновые задачи имеют "добротность", идущую от 10 до 18. И все в порядке.

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

  1. Срабатывает задача 1 с высоким потреблением памяти
  2. Пользователи посещают сайт => Задание 1 задерживается (у меня нет проблем с этим)
  3. Задача 1 возобновляется
  4. Срабатывает задача 2 с высоким потреблением памяти. Из-за задержек задание 1 не выполнено
  5. Пользователи посещают веб-сайт => обе задачи откладываются (до сих пор нет проблем)
  6. Задача 1 возобновляется, и ей нужно больше памяти => Памяти не осталось, и Задача 1 падает
  7. Задача 2 заканчивается
  8. Пользователь заходит на сайт
  9. ...

VPS работает на 1 Гб оперативной памяти, и в настоящее время SWAP не определен. Я думаю, что добавление SWAP-пространства (бесплатно, так как оно не стоит мне дороже), могло бы стать хорошим решением моей проблемы. В ходе описанного выше события часть памяти, используемой фоновыми задачами, могла быть заменена, что снижает производительность этих задач, но, опять же, у меня нет проблем с этим.

Чего я бы хотел избежать, так это переставить память apache, потому что это уменьшило бы скорость отклика сайта для конечного пользователя. Точно так же, как я указал "хорошим", что apache важнее заданий backgroudn. Если вы видите другое решение моей проблемы, вы можете предложить что-нибудь. Я также улучшаю фоновые задачи, чтобы уменьшить их объем памяти, но это занимает немного времени.

1 ответ

Решение

Вы можете использовать cgroups для этого. Это позволяет вам устанавливать ограничения для памяти и памяти + подкачки, так что вы можете принудительно перезапустить процессы.

В качестве альтернативы он также позволяет вам регулировать своппинг каждой cgroup независимо, так что вы можете увеличить вероятность того, что ваши фоновые страницы будут заменены:

http://www.kernel.org/doc/Documentation/cgroups/memory.txt

Другие вопросы по тегам