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

Как оптимизировать my.cnf и httpd.conf для повышения скорости на мощном выделенном сервере?

У меня есть выделенный сервер с 12 ГБ оперативной памяти и процессорами Dual Nahalem Quad Core. У моего сайта обычно только около 50-100 пользователей онлайн (хотя, как только я оптимизировал сервер, я планирую рекламу и оцениваю, что число будет ближе к 250, что все равно должно быть очень легко обработано этим сервером). По какой-то причине, даже с такими низкими цифрами, сайт, кажется, довольно часто тормозит, почти не загружая сервер.

Я использовал mysqltuner.pl, чтобы попытаться улучшить некоторые настройки в my.cnf. На этом уровне пользователя сайт выполняет около 200 запросов в секунду и составляет около 50/50 операций чтения / записи. Что касается настроек Apache, я бы не знал, что менять.

В основном я просто ищу общие предложения по обновлению, чтобы лучше оптимизировать производительность сервера, чтобы страницы действительно загружались быстро. Стоит отметить, что страницы загружались довольно быстро, до тех пор, пока несколько дней назад средний онлайн не увеличился в 3-4 раза (хотя нагрузка на сервер на самом деле не увеличилась).

Если это важно, это сервер CentOS 5.4.

Что ж, похоже, основная проблема заключалась в том, что MaxClients был установлен очень низким (на 100). Я поднял его до 2000, и с тех пор все идет гладко. Спасибо, Пауска, за указание на это.

Цифры, о которых вы говорите, крошечные, и, как вы заметили, нагрузка не изменилась в течение этого периода времени, поэтому я не думаю, что это будет проблемой прямой настройки apache или mysql.

По моему опыту поиска подобных проблем, это почти всегда связано с SQL. Я бы выделил, какая часть страницы занимает все это время. Вставьте вызовы таймера по всей странице, о которой идет речь, и сохраните данные где-нибудь, где вы можете их просмотреть (отправьте их в stderr и журнал ошибок apache, если ничего другого). Пока вы не узнаете точную часть кода, которая вызывает ваше замедление, вы будете просто гадать.

Некоторые возможности:

  • Запрос к таблице, которая стала очень большой и теперь выполняется медленно (отсутствует индекс? Требуется сокращение?)
  • Сессионный стол, который никогда не обрезается и сильно разросся
  • Очень тонкое повреждение (пробегите и оптимизируйте все свои базы данных mysql, чтобы исправить)
  • Уродливый запрос, выполняющий тяжелые вычисления при каждой загрузке страницы, который можно оптимизировать, сохранив результат в кеше.

Я бы также вернулся к основам и посмотрел, не можете ли вы узнать, что изменилось «пару дней назад». Была ли страница изменена? Обновления?

Еще одна вещь, которую нужно проверить, - это ввод-вывод (iostat), чтобы узнать, не связаны ли вы с вводом-выводом, хотя обычно вы увидите симптомы в загрузке для этого.