Пожалуйста, посмотрите на использование памяти моего сервера
Я нуб с серверами. У меня есть centos5.5 VPS с 512 МБ оперативной памяти. Моя цель - разместить в нем только один магазин magento. Я установил Magento на сервер без какой-либо панели управления, просто сам устанавливая lamp и любые расширения php, необходимые для установки Magento.
Как только я захожу в мой магазин magento, внезапно оперативная память на VPS почти полностью используется, осталось всего около 100 МБ. Пожалуйста, смотрите этот скриншот htop, сделанный после того, как я только что посетил сайт.
http://img714.imageshack.us/img714/1944/screenouv.png
Как видите, осталось всего около 100 МБ. Это нормально? Мне интересно, если бы я мог сделать что-то глупое с сервером, что делает его очень ресурсоемким. Я установил apache из репозитория centos base, php версии 5.3 из репозитория ius и mysql 5.1 также из репозитория ius. Я не изменил ни один из конфигурационных файлов по умолчанию ни для одного из них, кроме как сделать memory_minimum 256 в php.ini. Что я могу сделать, чтобы освободить больше оперативной памяти?
Я не в курсе, но вижу, что каждый демон Apache использует 8% доступной памяти, и AFAIK каждому посетителю нужен один демон Apache. Так что я бы выбежал из барана только с несколькими посетителями. Спасибо за совет.
4 ответа
Я предполагаю, что у вас все хорошо: память используется для кэширования диска ядра Linux (см. http://www.linuxatemyram.com/ для получения более подробной информации).
Об Apache: хотя каждому пользователю нужен экземпляр Apache, если вы используете не поточную версию Apache (как по умолчанию), он использует это только в течение короткого промежутка времени, пока пользователю передается одна страница. После этого процесс apache обработает следующий запрос, вероятно, от другого пользователя. Таким образом, вы можете обрабатывать много соединений с помощью относительно небольшого числа процессов Apache.
Изменить: пример для бесплатного вывода:
total used free shared buffers cached
Mem: 498 434 64 0 194 77
-/+ buffers/cache: 162 336
Swap: 4102 0 4102
64 МБ, которые указаны как свободные, - это объем памяти, который не используется никоим образом. Но (почти) все буферы / кэш-память могут использоваться ОС немедленно, если это необходимо, поэтому фактически доступная память составляет почти 350 МБ вместо 64 МБ.
Centos будет использовать любую свободную оперативную память в качестве дискового кэша и буферов для ускорения работы. При доступе к файлам они будут кэшироваться в памяти. Кэш все еще является частью свободной памяти и будет отменен, если это потребуется в другом месте системой. Посмотрите здесь для получения дополнительной информации.
512Мб это не очень много. PHP в сочетании с Apache prefork MPM означает, что вы будете использовать его очень быстро.
На самом деле, вам нужно разделить ваш общий объем ОЗУ (512 МБ) на memory_limit
в /etc/php.ini
чтобы получить разумное количество для Apache's MaxClients
установка. В Magneto wiki написано, что рекомендуется 64MB, но этого может быть недостаточно. Предполагая, что вы используете 64 МБ, это дает вам 8 клиентов. На самом деле, немного меньше, так как вы тоже бежите mysql
и некоторые другие вещи в той же системе. Вы можете уйти с большим числом, чем это, но в какой-то момент ваша система умрет.
Помните, что на каждый запрос должен отвечать один сервер prefork, а не каждый посетитель. Если каждый запрос обрабатывается достаточно быстро, вам может понадобиться не так много серверов, как вы думаете.
Holdddd на секунду здесь. В документации по системным требованиям для текущей версии говорится, что memory_limit должно быть не менее 256 МБ, а на самом деле они запрашивают 512 МБ. Это дает вам 2 или 1 работника Apache, что не совсем корректно.
Так. Вам нужно будет переосмыслить. Вы можете либо использовать больше оперативной памяти для решения проблемы (настоятельно рекомендуется), либо использовать другой Apache MPM (может быть проблематично с вашим приложением PHP; я не знаю), либо использовать lighttpd + fastcgi.
На самом деле, вам, вероятно, придется в любом случае получить больше оперативной памяти - либо использовать совершенно другое приложение.
(Кстати: выключить yum-updatesd
и заменить его на yum-cron
, У вас должны быть автоматические обновления, но вам не нужно, чтобы демон сидел в оперативной памяти весь день.)
Посещая магазин Magneto, mysql извлекает данные с диска и затем сохраняет их в кеше (RAM) для более быстрого извлечения. Это нормально.