Как использовать все CPU для FastCGI (PHP fast CGI один процесс использует 100% CPU, но общее использование CPU составляет всего 25%)
Я настроил FastCGI для запуска своего PHP-сайта и обнаружил, что при создании большого файла с использованием сайта работает только один процесс php-cgi, и его загрузка ЦП составляет 100%. Но общее использование процессора составляет всего 25%.
Вот вывод "top -u user".
top - 13:50:35 up 3:58, 3 users, load average: 0.07, 0.20, 0.32
Tasks: 116 total, 1 running, 115 sleeping, 0 stopped, 0 zombie
Cpu(s): 25.0%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 35126760k total, 1090160k used, 34036600k free, 60644k buffers
Swap: 0k total, 0k used, 0k free, 289816k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7570 user 20 0 232m 13m 10m S 100.0 0.3 0:00.03 php-cgi
7571 user 20 0 234m 16m 10m S 0.0 0.0 0:00.22 php-cgi
7572 user 20 0 304m 86m 10m S 0.0 0.3 1:37.49 php-cgi
7573 user 20 0 234m 15m 9228 S 0.0 0.0 0:00.16 php-cgi
7574 user 20 0 232m 13m 9528 S 0.0 0.0 0:00.40 php-cgi
7594 user 20 0 232m 13m 10m S 0.0 0.0 0:00.02 php-cgi
7595 user 20 0 234m 14m 9492 S 0.0 0.0 0:00.09 php-cgi
7596 user 20 0 232m 13m 9184 S 0.0 0.0 0:00.06 php-cgi
7597 user 20 0 234m 15m 9500 S 0.0 0.0 0:00.03 php-cgi
7598 user 20 0 232m 10m 7116 S 0.0 0.0 0:00.02 php-cgi
7599 user 20 0 232m 13m 10m S 0.0 0.0 0:00.02 php-cgi
7601 user 20 0 326m 33m 11m S 0.0 0.1 1:58.60 php-cgi
7602 user 20 0 234m 14m 8988 S 0.0 0.0 0:00.14 php-cgi
7603 user 20 0 234m 12m 6800 S 0.0 0.0 0:00.15 php-cgi
7604 user 20 0 308m 13m 9848 S 0.0 0.0 0:00.13 php-cgi
Сервер является экземпляром AWS m2.x2large и имеет 4 виртуальных ЦП (возможно, 4 ядра). И теперь FastCGI, похоже, использует только одно ядро.
Я понятия не имею, как настроить FastCGI, чтобы позволить ему использовать все 4 vCPU.
Мои текущие настройки - FastCGI + suEXEC + PHP 5.5.11 + apache2.
Вот конфигурации FastCGI в Apache:
FcgidIPCDir /usr/local/apache2/logs/mod_fcgid
FcgidProcessTableFile /usr/local/apache2/logs/mod_fcgid/fcgid_shm
FcgidIOTimeout 7200
FcgidMaxRequestLen 2097152
FcgidMaxProcesses 100
FcgidMaxProcessesPerClass 100
FcgidMaxRequestsPerProcess 5000
FcgidMaxRequestInMem 20971520
FcgidZombieScanInterval 5
FcgidIdleScanInterval 120
FcgidProcessLifeTime 3600
Вот настройки /cgi-bin/php.fcgi:
#!/bin/bash
# Shell Script To Run PHP5 using mod_fastcgi under Apache 2.x
### Set PATH ###
PHP_CGI=/usr/bin/php-cgi
PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=5000
### no editing below ###
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI
Пожалуйста помоги мне с этим.
Заранее большое спасибо!
1 ответ
В процессе используется 100% одного ядра, что составляет 25% от общей вычислительной мощности (4 ядра). У одного потока нет возможности использовать более одного ядра, но похоже, что FastCGI можно настроить на использование нескольких потоков. Обратитесь к этому вопросу для получения более подробной информации.
Обратите внимание, что один запрос может привести только к одному потоку, поэтому, если он обрабатывает один запрос, кажется, что этот запрос не может быть обработан в нескольких потоках.