Назад | Перейти на главную страницу

Apache на большом сервере слишком низкая производительность (веб-сайт Cake PHP 1.3), не используются все доступные ресурсы

У меня есть «большая» виртуальная машина с apache 2.4.6-90, MPM Prefork, почти полностью посвященная веб-сайту, запрограммированному на PHP 5.4.16 Cake 1.3 (да, старый ...), который подключается к внешнему выделенному серверу Percona.

Мне нужно обрабатывать около 10 тыс. Запросов в минуту, а на данный момент я получаю не более 3000 (50 в секунду).

Странно, что apache не использует весь доступный процессор или оперативную память, максимум я получаю 6 средних точек нагрузки на 24-ядерной виртуальной машине с более чем 32 ГБ свободной оперативной памяти в любое время.

Я играл со многими вариантами, касающимися mpm_prefork (большие и малые пулы серверов) и некоторых параметров ядра, без каких-либо значительных улучшений, я действительно схожу с ума. Установка ProxySQL на тот же компьютер не помогла ...

Сайт не использует пул подключений к базе данных, поэтому ProxySQL действительно помог снизить количество активных подключений, но не вызвал большого улучшения производительности. Он поддерживает до 100 подключений при тестах с задержкой <2000 мс, это хорошая новость для сервера базы данных, не актуальна для веб-сервера ...

Если я увеличу MaxRequestWorkers до большого числа, например 1000, почти весь запрос завершится ошибкой из-за тайм-аута, и сервер продолжит использовать не все доступные ресурсы.

Это типичное чтение:

Server load: 4.75 4.25 4.35
CPU Usage: u1175.25 s50.09 cu0 cs0 - 205% CPU load
19.6 requests/sec - 0.6 MB/second - 33.5 kB/request
215 requests currently being processed, 38 idle workers

Будем очень признательны за любые подсказки о том, как достичь более высокой производительности !!!

ОПИСАНИЕ СЕРВЕРА:

Virtualized with libvirt/kvm (Host Centos 7, exclusive cores assigned)
VCPUS: 24 exposed as Westmere E56xx/L56xx/X56xx (Nehalem-C) (real: Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz)
RAM: 64GB
HD: RAID1 SSD

ТЕКУЩАЯ КОНФИГУРАЦИЯ MPM_PREFORK:

StartServers         200
MinSpareServers      25
MaxSpareServers      50
MaxRequestsPerChild  5000
ServerLimit          512
MaxRequestWorkers    300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 10
Timeout 60

ТЕКУЩИЕ ПРЕДЕЛЫ

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 256965
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 40000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256965
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ТЕКУЩИЕ ПРЕДЕЛЫ ПИД-регулятора:

#cat /proc/11648/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             256965               256965               processes 
Max open files            40000                40000                files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       256965               256965               signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us 

НЕКОТОРЫЕ ПАРАМЕТРЫ SYSCTL:

net.core.somaxconn = 32768
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 87380 134217728
net.core.netdev_max_backlog = 300000
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_congestion_control = htcp
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_mem = 50576   64768 98152
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10