![Память VPS истощена даже при легких настройках](https://rvso.com/image/568261/%D0%9F%D0%B0%D0%BC%D1%8F%D1%82%D1%8C%20VPS%20%D0%B8%D1%81%D1%82%D0%BE%D1%89%D0%B5%D0%BD%D0%B0%20%D0%B4%D0%B0%D0%B6%D0%B5%20%D0%BF%D1%80%D0%B8%20%D0%BB%D0%B5%D0%B3%D0%BA%D0%B8%D1%85%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%D1%85.png)
Linux noob здесь. У меня есть 256 МБ VPS на сервере Ubuntu 11.04, и когда я запускаю "free -m", результат показывает, что вся память используется (включая вторую строку re: buffers/cache). Я нашел это очень странным, учитывая, что у меня запущено всего 5 процессов Apache, каждый из которых потребляет около 20 МБ. MYSQL занимает 30 МБ. Насколько мне известно, и согласно "top", у меня нет других работающих пожирателей памяти.
Настройки, которые могут иметь значение:
PHP memory_limit = 32M
MYSQL key_buffer = 16M
Prefork MPM Maxclients = 10
Итак, когда я просмотрел эти настройки, я, естественно, подумал, что maxclients слишком высок, поэтому я попробовал переключить его на 5. Теперь не только моя память по-прежнему отображается как используемая на 100%, но и мой сайт загружается намного, намного медленнее, несмотря на то, что в данный момент не получает никакого трафика, кроме моего. Я этого не понимаю. Я думал, что один процесс Apache обрабатывает все запросы от клиента, полученные в течение окна «KeepAliveTimeout», которое я установил на 2 секунды. С моей первоначальной конфигурацией 10 maxclients время загрузки моей страницы составляет около 0,3 мс, поэтому один процесс должен справиться с этим без проблем, верно?
Итак, затем я перешел на экстремальный уровень 1 для maxclients. Моя память все еще на 100% загружена, и мой сайт загружается мучительно медленно. Я новичок в полной растерянности. Согласно многочисленным руководствам, которые я прочитал по базовой настройке сервера, я должен быть готов к работе.
Помоги пожалуйста!
Edit:
total used free shared buffers cached
Mem: 256 256 0 0 0 0
-/+ buffers/cache: 256 0
Swap: 0 0 0
решение1
Это связано с тем, что Linux использует большую часть памяти в качестве кэша и возвращает ее части по мере необходимости любому запускаемому вами приложению.
Так что не паникуйте.Все в порядке. Верните MaxClients к значениям по умолчанию.
EDIT: похоже, вы работаете на OpenVZ. См. ответ Дэвида Шварца ниже.
решение2
У вас нет подкачки, что сильно затрудняет сохранение физической памяти для ОС. По сути, у нее нет места для хранения данных, к которым, скорее всего, никогда не будет доступа, но она не может доказать, что к ним никогда не будет доступа. Поэтому у нее нет выбора, кроме как хранить их в оперативной памяти.
Рассмотрим, например, службу, которая запускается при запуске вашего сервера, но к которой никогда, никогда не обращаются. Она может ссылаться на библиотеку, которая перемещается. Это перемещение загрязняет кодовые страницы в памяти. При запуске она, скорее всего, выделит некоторую память и изменит ее содержимое. С помощью swap, после того как служба долго не работает или когда памяти мало, эти страницы могут быть вытеснены из памяти и сохранены в swap. (Скорее всего, они никогда не будут извлечены, но ядро не может рисковать этим — рассмотрите такую службу, как ssh
!)
Без подкачки ядро не может вытеснить грязные страницы, даже если к ним не обращались в течение нескольких дней. Поэтому драгоценная физическая память заполняется бесполезным мусором.
Обновлять: Судя по всему, это артефакт OpenVZ. Есть подкачка, и цифры памяти, которые вы видите, бессмысленны. Ваши проблемы с производительностью могут быть или не быть вызваны чем-то, что находится под вашим контролем.