использование процессора — высокая загрузка процессора при выполнении процессов php

Я выделил сервер с одноядерным процессором с частотой 3,1 ГГц и оперативной памятью 32 ГБ.
Он работает как веб-сервер и настроен на:
Apache 2.4 + MPM Worker + Mod_fcgid

Когда я запускаю команду top, я вижу высокую загрузку процессора PHP-процессами сайта. Ниже приведен снимок

Tasks: 193 total,   1 running, 112 sleeping,   1 stopped,  79 zombie
Cpu(s): 84.0%us,  1.4%sy,  0.0%ni, 12.3%id,  2.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  33554432k total, 26637508k used,  6916924k free,        0k buffers
Swap:        0k total,        0k used,        0k free, 10471152k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
8415 mysql     20   0 12.5g 4.1g 6348 S 115.1 12.8   5107:00 mysqld
18687 domainus  20   0  303m 110m  44m S 64.5  0.3   1:05.51 php
18728 domainus  20   0  311m 118m  46m S 42.7  0.4   1:00.57 php
18732 domainus  20   0  333m 140m  45m S 40.3  0.4   1:19.61 php
17371 domainus  20   0  306m 114m  46m S 32.5  0.3   0:57.16 php
18726 domainus  20   0  278m  87m  47m S 24.8  0.3   1:48.62 php
14765 domainus  20   0  324m 133m  47m S 17.7  0.4   4:00.94 php

Я хочу быть уверен, что моя конфигурация Apache правильная, и проблема в коде PHP, какие-либо предложения о том, как решить эту проблему?

1

Решение

Мое предложение было бы запустить PHP из командной строки и посмотреть, что произойдет. Если возможно, отключите Apache заранее. Также попробуйте запустить тот же сайт / PHP на другом сервере. Если у вас нет другого доступного сервера, вы можете использовать бродяга коробка. Можно легко создать коробку с помощью PHP и Apache, используя Puphpet.

Если при выполнении этих тестов проблем не возникает, попробуйте отключить PHP в Apache и запросить несколько простых HTML-страниц.

1

Другие решения

Я думаю, что узким местом здесь является ваш MySQL, так как он потребляет большую часть ресурсов процессора и php, и, скорее всего, это делает те, кто запрашивает. Проблема может быть из-за плохого кода PHP.

Правильный способ детализации проблемы, так что используйте php profiler и посмотрите, какая функция требует времени, а затем имеет дело с ней соответствующим образом. Если взаимодействие с БД требует времени, попробуйте кэшировать запросы, пакетные запросы, чтобы избежать проблем параллелизма.

1