Назад | Перейти на главную страницу

Как настроить сервер для обработки большого трафика?

Сейчас у меня в сети 1000 одновременных пользователей. Но мой сайт работает очень медленно. У меня могло быть 8000 одновременных пользователей, но сервер не может обрабатывать трафик, и я теряю посетителей.

Мой сервер - это VPS-сервер:

Выделенный процессор 7,2 ГГц

RAM 4512 МБ

Использование памяти намного ниже доступных ресурсов. (прямо сейчас 632 МБ) Что делать? Стоит ли настраивать сервер apache? Если да, то как? Что насчет кеширования, может memcached?

Это виртуальный сервер, состоящий из узлов, каждый из которых представляет процессор с тактовой частотой 600 МГц и оперативную память 376 МБ.

Я запускаю на нем веб-сайт, построенный с использованием php и mysql.

Контрольный показатель, контрольный показатель, контрольный показатель. Это единственное решение. Есть миллион вещей, которые могут замедлить работу сайта. Вот что бы я сделал:

  • Загрузите Firefox с помощью Firebug. Проверьте сетевую панель, чтобы узнать время загрузки вашего основного запроса. Если это дает много времени для «подключения», у вас могут быть проблемы с сетью или пропускной способностью, или Apache не может обрабатывать такое количество запросов одновременно. Если есть длительное время «ожидания» или «передачи», то причиной могут быть ваши PHP-скрипты. Они слишком долго обрабатывают страницу.
  • При работе с PHP первым подозреваемым обычно является ваш (Мой) SQL-сервер. Если вы используете центральную библиотеку SQL, сравнительный анализ ваших запросов не составит особого труда. Просто отслеживайте, сколько запросов нужно вашей странице и сколько времени они занимают. Сравните это с общим временем рендеринга страницы. Если у вас есть старое приложение, использующее простой mysql(i)_ функционирует повсюду, затем спрыгните с двух быков.
  • Если проблема связана с MySQL, то первым подозреваемым обычно являются правильные индексы. Запустите EXPLAIN для всех ваших запросов и посмотрите, используются ли индексы. Определите правильные индексы. Повторный бенчмарк. Ввод-вывод также является частой причиной замедления MySQL (используйте больший кеш запросов, выполняйте меньше запросов (кеш приложения), измените настройки MySQL или просто разделите веб-сервер и SQL-сервер.
  • Если проблема в самом PHP, загрузите xdebug и запустите свою страницу через профилировщик (убедитесь, что только для ваш запрос или вы можете легко убить свой сервер). Загрузите дамп в KCacheGrind и выясните, на что ваше приложение тратит все свое время. Рефакторинг.

Я бы так и поступил. Каждый шаг во многом зависит от результатов, полученных на предыдущем шаге. Мы не можем вам дать общих советов. Просто протестируйте, протестируйте, протестируйте и реорганизуйте свой код и настройку сервера соответственно.

Мой сайт начал доходить до точки, когда производительность немного снизилась. Я поместил memcached на некоторые из моих более «сложных» страниц, и он работал лучше, чем я мог себе представить. У меня было несколько страниц, на разбор которых потребовалось 0,5 секунды, и одна, на анализ которой потребовалось 3 секунды (позор мне, я знаю). Я потратил меньше часа на установку memcached в пару из этих ключевых мест, и теперь все анализируется менее чем за 0,01 секунды. Кроме того, я заметил, что моя средняя загрузка тоже сильно упала, так как не так много запросов mysql для обработки. Больше не могу рекомендовать memcached :)