
Может ли кто-нибудь порекомендовать конфигурацию или, что еще лучше, указать мне на полный пример использования этой веб-настройки?
В принципе, у нас есть сайт php, получающий около 100 000 обращений в день. Он уже получает тайм-ауты соединения и т. д. при попытке обслужить эту нагрузку на VPS из-за перегрузки ЦП. Я хотел бы указать что-то, что позволит ему масштабироваться до 250 000 обращений в день.
В настоящее время сервер:
- одноядерный VPS с возможностью увеличения производительности 1 ГГц (из двухъядерного Xeon 2,6 ГГц)
- 2 ГБ расширяемой оперативной памяти (опять же, я считаю расширяемую оперативную память весьма расплывчатой)
- 32 МБ на процесс PHP, работающий движок выражений (насколько мне известно) или что-то подобное тяжелое
- графические страницы с большим количеством изображений
- время от времени выполняется закулисная работа на некоторых страницах, например, передача xmlrpc на сторонние серверы
- простой Apache с modphp (поэтому статические файлы, такие как изображения, также нуждаются в полных процессах PHP — на данный момент это изменить нельзя)
Пока что, похоже, основным узким местом является CPU, при этом некоторые процессы Apache используют около 30% CPU во время запросов. Некоторые другие процессы Apache, похоже, работают намного лучше, используя всего 1% CPU; я предполагаю, что это запросы на статические файлы.
Итак. Мы хотим уйти от VPS на какой-то выделенный или виртуальный выделенный ящик с невзрывной (измеримой, гарантированной) производительностью. Он должен быть в состоянии обрабатывать текущий сетевой трафик и как минимум удвоить его в будущем.
Какие рекомендации или исследования вы можете мне порекомендовать?
Существуют ли какие-либо инструменты, которые могут дать вам приблизительную оценку характеристик сервера на основе таких параметров, как память на процесс Apache, процент динамических запросов, является ли PHP-код тяжелым CMS-кодом или легковесным hello-world-кодом и т. д.?
решение1
Я сомневаюсь, что существуют какие-либо полезные практические исследования по этому вопросу, поскольку производительность всегда будет существенно различаться в зависимости от сложности приложения. Единственный способ приблизиться к оптимальному варианту — это измерить и экстраполировать.
Вы не упомянули ОС, но я бы настроил ряд мониторов производительности, фиксирующих потоки, загрузку ЦП, статистику памяти, данные диска и сети и т. д. Также убедитесь, что вы фиксируете количество попаданий, с которыми имеете дело. Из этого вы сможете определить минимальное, среднее и максимальное использование ресурсов для всех этих компонентов на основе фактической видимой нагрузки - как только у вас будет эта статистика (МГц/10 тыс. пользователей, память/10 тыс. пользователей и т. д.), вы сможете быстро экстраполировать необходимую вам производительность. Обязательно запланируйте около 20% дополнительного запаса даже при пиковой ожидаемой нагрузке.
Я знаю, что это большой объем работы с электронными таблицами, но это единственный способ почувствовать себя увереннее. Ну, всегда есть метод «бросить кучу оборудования на решение проблемы», который тоже работает, но стоит дорого :)
Желаем удачи и возвращайтесь с данными позже, если вам понадобится помощь в их понимании.
решение2
Просто добавьте nginx в режиме прокси перед apache и настройте его на сервер действительно статических данных, не трогая apache. Вы почувствуете мгновенное увеличение скорости.
Затем я бы переключил apache2 в режим prefork с 4–16 дочерними процессами.
Фоновая работа, такая как внешние соединения, действительно мешает, я бы переписал этот код, чтобы сделать эти вещи асинхронными.
Наконец, у вас может не хватить пропускной способности на главном узле (т.е. сервере, на котором хранятся все VPS). Спросите у своей хостинговой компании, есть ли у них 1 Гбит соединение на главном узле, и если это всего лишь 100 Мбит - вам, возможно, стоит сменить хостинг.