Я впервые настраиваю VPS-сервер, и у меня есть несколько проблем. Мы запускаем Wordpress на сервере Centos емкостью 1 ГБ, настроенном для Интернета (онлайн-исследование). Никаких пользовательских запросов или чего-то безумного, кроме как закрытие 8K сообщений. Через произвольные промежутки времени сервер просто отключается. Со стороны клиента он просто говорит «Загрузка ...» и будет вращаться более или менее бесконечно. На стороне сервера оболочка будет полностью заблокирована. Нам нужно сделать жесткую перезагрузку с панели управления, и тогда все в порядке.
Наблюдая за «верхом», я вижу, что он колеблется между 35-55% использования памяти в целом и случайными всплесками примерно до 80%. Когда я увидел, что это происходит, было около 30-40 процессов Apache, которые выталкивали память за границу. error_log сообщает мне, что максимальное количество клиентов было достигнуто прямо перед каждой перезагрузкой. Я пробовал повозиться с этим, но безуспешно.
Я думаю, что нам, вероятно, придется поднять сервер до следующего уровня ОЗУ, но с ~ 120 000 просмотров страниц в месяц кажется, что это немного перебор, так как раньше он работал достаточно хорошо на общем сервере.
Любые идеи? Значения httpd.conf и my.cnf добавить? Я обновлю это текущими, если это поможет.
Заранее спасибо! Это был интересный и важный учебный опыт, но в целом он довольно разочаровывающий!
Изменить: быстрый снимок сверху:
top - 15:18:15 up 2 days, 13:04, 1 user, load average: 0.56, 0.44, 0.38
Tasks: 85 total, 2 running, 83 sleeping, 0 stopped, 0 zombie
Cpu(s): 6.7%us, 3.5%sy, 0.0%ni, 89.6%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 2051088k total, 736708k used, 1314380k free, 199576k buffers
Swap: 4194300k total, 0k used, 4194300k free, 287688k cached
Проверьте, используете ли вы какую-либо память подкачки при блокировках (свободная и vmstat). Если у вас установлено слишком высокое значение MaxClients, то во время пиков трафика будет использоваться память, и нагрузка на сервер будет медленно увеличиваться, пока у вас не закончится ОЗУ и вы не начнете использовать подкачку. Это приводит к тому, что клиенты Apache начинают загружаться в / из памяти подкачки, что просто убивает производительность, сервер загружает небесные ракеты и сервер "зависает".
В идеале вы хотите установить MaxClients так, чтобы вы никогда не начинали использовать память подкачки. Точная сумма будет зависеть от ваших настроек Apache и того, что вы обслуживаете. Поскольку вы видите 30-40 процессов во время пиков трафика, я бы начал с 30 и посмотрел, предотвращает ли это использование подкачки (при условии, что это является источником проблемы).
Если ваш сервер не может обрабатывать 30-40 процессов httpd (не может), не позволяйте этому. Я подробно расскажу о конфигурации ЛАМПЫ в мой ответ на этот вопрос. Примеры, которые я привожу, относятся к VPS на 512 МБ, поэтому не копируйте слепо конфигурацию «для Интернета». :)
Краткая версия: уменьшите размер httpd MaxClients
и ServerLimit
переменные, чтобы предотвратить запуск 30+ процессов httpd. Я бы начал с 10 или 15 в зависимости от среднего размера ваших процессов и того, сколько места вы предоставили MySQL. Обратите внимание, что httpd будет отклонять запросы, когда все клиентские процессы заняты.
Похоже, ваша система взбучка.
Чтобы отладить его, я бы сначала отключил свопинг. Таким образом, вы будете получать ошибки из-за нехватки памяти вместо зависаний, вызванных постоянным обменом местами между страницами памяти. Тогда вам будет намного легче увидеть, что вызывает у вас проблемы.
Я бы также:
Это заставит ваш Apache не использовать более 700 МБ памяти (10 * 64 + память для httpd). Если скрипту потребуется больше памяти, он просто выйдет из строя, а не выйдет из строя ваш сервер.
Когда вы узнаете, что вызывает проблемы, вы можете включить свопинг. Но не более 1/4 вашей оперативной памяти. Таким образом, неиспользуемая память может быть выгружена, но не настолько, чтобы вызвать сбой.