Linux noob здесь. У меня 256 МБ VPS на сервере Ubuntu 11.04, и когда я запускаю «free -m», в результате отображается вся используемая память (включая вторую строку re: buffers / cache). Мне это показалось очень странным, учитывая, что у меня всего 5 процессов Apache, каждый из которых потребляет около 20 МБ каждый. MYSQL занимает 30 МБ. Насколько мне известно, и согласно "верху", у меня нет других работающих "пожирателей" памяти.
Настройки, которые могут быть актуальны:
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
Это связано с тем, что Linux использует большую часть памяти в качестве кеша и по мере необходимости возвращает часть ее любому приложению, которое вы запускаете.
Так что не паникуйте. Ты в порядке. Верните MaxClients к значениям по умолчанию.
РЕДАКТИРОВАТЬ: похоже, что вы работаете на OpenVZ. См. Ответ Дэвида Шварца ниже.
У вас нет свопа, из-за чего ОС очень сложно экономить физическую память. По сути, в нем нет места для размещения данных, к которым, вероятно, никогда не будет доступа, но которые нельзя доказать, что к ним никогда не будет доступа. Так что у него нет выбора, кроме как хранить его в ОЗУ.
Рассмотрим, например, службу, которая запускается при запуске вашего сервера, но к ней никогда не будет доступа. Он может ссылаться на библиотеку, которая будет перемещена. Это перемещение загрязняет кодовые страницы в памяти. При запуске он, скорее всего, выделит некоторую память и изменит ее содержимое. С помощью подкачки, если служба не запускается в течение длительного времени или когда память ограничена, эти страницы могут быть удалены из памяти и сохранены в подкачке. (Скорее всего, никогда не будет получено, но ядро не может рисковать этим - рассмотрите такую службу, как ssh
!)
Без свопа ядро не может удалить грязные страницы, даже если к ним не обращались в течение нескольких дней. Так драгоценная физическая память наполняется бесполезным хламом.
Обновить: Судя по всему, это артефакт OpenVZ. Есть своп, и цифры памяти, которые вы видите, бессмысленны. Ваши проблемы с производительностью могут быть или не быть связаны с чем-то, что находится под вашим контролем.