Высокая загрузка процессора сервера PHP с Wordpress на выделенном сервере

Я веду два блога на выделенных серверах, один с 500 уникальными посетителями в день, а другой с 18 000 уникальных посетителей в день, в cPanel я вижу, что PHP загружается до 99% загрузки ЦП, и я пробовал много вещи, но ничто не решает нагрузку.

Сервер работает медленно, когда 250 человек онлайн, с 500 начинаются проблемы с подключением к базе данных, и, конечно же, сайт работает слишком медленно.

Я также пытался деактивировать все плагины, но, похоже, проблема в любом из них.

Это характеристики сервера:

CPU: AMD Athlon™ II X4 - 4x 2.3 GHz 4 Cores
Memory: 8GB Memory DDR3 ECC
Disk Controller: RAID 1 Software
First Hard Drive: 1000GB SATA Drive (7200 RPM)
Second Hard Drive: 1000GB SATA Drive (7200 RPM)
Uplink/Port Speed: 100 Mbps Uplink Port
Public Bandwidth: Unmetered 100Mbps
Operating System: Cent OS 6.2 64 bit
Control Panel Software: cPanel/WHM

[PHP] httpd.conf:

StartServers 5
MinimumSpareServers 5
MinimumSpareServers 10
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 10000
KeepAlive Off
Timeout 60

Плагины Wordpress:

Akismet
AZIndex
BackWPup
BulletProof Security
Category Templates Two
Contact Form 7
Easy FancyBox
leenk.me
qTranslate
Really Simple CAPTCHA
Search Everything
SI CAPTCHA Anti-Spam
Stealth Update
Verve Meta Boxes
W3 Total Cache
WordPress File Monitor Plus
WP-PostRatings
WP Total Hacks

person Shixons    schedule 24.12.2012    source источник
comment
См. это: serverfault.com/ вопросы/58097/   -  person citizenen    schedule 24.12.2012
comment
Вы используете APC или другой кеш байт-кода? Кроме того, это процессор потребительского уровня... пятилетней давности. Каково использование памяти? Вы настроили MySQL?   -  person Charles    schedule 24.12.2012
comment
@Charles Да, я использую APC на Page Cache с W3 Total Cache, использование памяти в порядке, я использовал мастер настройки Precona (tools.percona.com/wizard) для настройки mysql, и теперь я жду 48 часов, чтобы использовать mysqltuner.   -  person Shixons    schedule 24.12.2012
comment
Попробуйте понизить MaxClients (для вашего идентификатора статистики около 160 или около того), Timeout и MaxRequestPerChild (чтобы вы чаще отключали серверы). Вы также можете подумать о переходе на php-fpm вместо использования mod_php.   -  person prodigitalson    schedule 24.12.2012
comment
@prodigitalson Я изменил MaxClients на 150, но нагрузка на процессор по-прежнему высока, даже когда в сети 200 человек.   -  person Shixons    schedule 24.12.2012


Ответы (3)


Проверьте используемую память с помощью top, чтобы увидеть, достигает ли она предела и переключается на диск. Вы должны увидеть, что своп используется почти на нуле, если все настроено нормально.

Для PHP добавьте кешировщик кода операции, например. APC, memcached, eaccelerator и т. д. Это снимет большую нагрузку.

Также проверьте MySQL. Вы можете испортить огромный сервер, если не измените заводские настройки по умолчанию. См. здесь для некоторых мыслей по этому поводу. Я бы порекомендовал для этого JetProfiler. Проверьте кеш запросов и т. д., чтобы узнать, используется ли он. Низкие попадания в кэши означают, что они слишком малы. Также проверьте полное сканирование таблицы. Много означает, что вам нужно оптимизировать индексы (для этого используйте этот сайт), чтобы медленные запросы не проблема.

person Matt Gibson    schedule 24.12.2012
comment
Своп: 2800к б/у, использую APC. - person Shixons; 24.12.2012
comment
Судя по звуку, это не проблема обмена. Вы проверили частоту попаданий в кэш APC? - person Matt Gibson; 24.12.2012
comment
Как проверить скорость попадания APC? - person Shixons; 24.12.2012
comment
Где-то есть скрипт под названием apc.php, к которому вы можете получить доступ через браузер. Должен был поставляться с расширением APC, когда вы его устанавливали. - person Matt Gibson; 24.12.2012
comment
Кажется, у меня проблема с APC. Кэшированные файлы 0 ( 0,0 байт) Попадания 1 Промахи 0 - person Shixons; 25.12.2012

Вам следует рассмотреть возможность добавления кэширования на ваш сайт с высокой нагрузкой, например, с помощью memcached. Это вполне может сэкономить вам много ресурсов.

Дальнейшее чтение:

person Sebastian Paaske Tørholm    schedule 24.12.2012
comment
Memcached работает иначе, чем APC. APC в основном предназначен для кэширования скомпилированного байт-кода, а memcached — для кэширования данных, что позволяет избежать попадания в MySQL. APC также может выполнять кэширование данных. - person Charles; 25.12.2012

Мы сталкиваемся с похожей проблемой. Оказывается, в нашем случае это комбинация Contact Form 7 / Really Simple Captcha. Попробуйте отключить эти плагины WP.

Если это работает, снова включите его и очистите каталог captcha/tmp и каталог upload/captcha. Кажется, плагин не очищает свой мусор.

Если у вас уже есть последние версии этих плагинов (последние версии ДЕЙСТВИТЕЛЬНО очищаются), то вы, вероятно, работаете в Windows, как и я. В Windows файлы капчи создаются только для чтения (атрибут файловой системы Windows), поэтому очистка не выполняется.

Итак, если вы используете последние версии плагинов И работаете в Windows, то отредактируйте файл real-simple-captcha.php... Где-то в строке 67 вы увидите

$this->file_mode = 0440;

а также

$this->answer_file_mode = 0444;

Замените оба 0440 и 0444 на 0666. Это исправит механизм очистки.

После этого не забудьте удалить существующие файлы tmp вручную или, по крайней мере, удалить их атрибут файловой системы Windows «только для чтения».

person nl-x    schedule 15.01.2013