У меня есть LAMP-сервер (MediaTemple (DV) Extreme на базе CentOS с 2 ГБ ОЗУ), на котором работает настроенная комбинация Wordpress + bbPress.
Примерно при 30 тысячах просмотров страниц в день сервер начинает стонать. Сегодня он споткнулся примерно на 5 минут, когда был наплыв трафика. Даже в нормальных условиях я вижу, что виртуальный сервер иногда нагружается на 90% + CPU. Используя Top, я часто вижу 5-7 процессов httpd, каждый из которых использует 15-30% (а иногда даже 50%) ЦП.
Прежде чем мы проведем большую оптимизацию (вероятно, виновато наше использование MySQL), я хотел бы найти страницы, которые являются основными нарушителями, и сначала разобраться с ними. Есть ли способ узнать, какие конкретные запросы были ответственны за наиболее требовательные к процессору процессы httpd? Я нашел много информации по оптимизации в целом, но ничего по этому конкретному вопросу.
Во-вторых, я знаю, что существует миллион переменных, но если у вас есть какое-либо представление о том, должны ли мы быть на границах производительности с одним выделенным виртуальным сервером с сайтом такого размера, то я хотел бы услышать ваше мнение. Стоит ли нам думать о переходе на более мощный сервер или следует сосредоточиться на оптимизации на текущем сервере?
strace
- хороший способ начать отладку такого рода проблем. Попробуйте настроить pid одного из процессов Apache, потребляющих больше ресурсов ЦП:
strace -f -t -o strace.output -p PID
Это покажет вам системные вызовы, сделанные в этом процессе. Взгляните на strace.output и посмотрите, что делает процесс. Это может пролить свет на путь и показать, где висит процесс. Флаг "-t" здесь очень важен, так как он будет указывать в начале каждой строки вывода strace время дня. Итак, ищите прыжок.
С другой стороны, если вы думаете, что MySQL, вероятно, виноват, я бы включил журнал медленных запросов, взглянул на него и попытался оптимизировать эти запросы. Подробнее о журнале медленных запросов Вот.
Кроме того, не забудьте взглянуть на файлы журналов вашего веб-сервера.
Что касается вашего второго вопроса, я думаю, что трудно сказать, используя только эту информацию. Отделение внешнего интерфейса (веб-сервера) от внутреннего (базы данных) всегда является хорошей практикой, если у вас есть на это бюджет. С другой стороны, я думаю, что перед добавлением дополнительного оборудования следует сосредоточиться на попытке оптимизировать производительность с использованием текущего оборудования. В противном случае проблема, вероятно, просто откладывается.
Надеюсь это поможет.
Попробуйте с Точильщик - это поможет вам найти узкое место.