Я выделил сервер с одноядерным процессором с частотой 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, какие-либо предложения о том, как решить эту проблему?
Мое предложение было бы запустить PHP из командной строки и посмотреть, что произойдет. Если возможно, отключите Apache заранее. Также попробуйте запустить тот же сайт / PHP на другом сервере. Если у вас нет другого доступного сервера, вы можете использовать бродяга коробка. Можно легко создать коробку с помощью PHP и Apache, используя Puphpet.
Если при выполнении этих тестов проблем не возникает, попробуйте отключить PHP в Apache и запросить несколько простых HTML-страниц.
Я думаю, что узким местом здесь является ваш MySQL, так как он потребляет большую часть ресурсов процессора и php, и, скорее всего, это делает те, кто запрашивает. Проблема может быть из-за плохого кода PHP.
Правильный способ детализации проблемы, так что используйте php profiler и посмотрите, какая функция требует времени, а затем имеет дело с ней соответствующим образом. Если взаимодействие с БД требует времени, попробуйте кэшировать запросы, пакетные запросы, чтобы избежать проблем параллелизма.