Anexe ao ltrace o pid do processo ativo que está causando o problema. Parece que é um regex ruim, ou um regex que é chamado muito. Em ambos os casos, precisa localizá-lo primeiro. Lembre-se de seguir os garfos.
Estou executando o Apache no RedHat Enterprise 5.5 com PHP 5.1 do repositório da comunidade Rackspace IUS.
Ocasionalmente, tenho picos de servidor de 8+ carga. top
mostra que o httpd.worker está consumindo 120-150% de CPU, mas os hits não parecem estar chegando tão rápido. Eu noto que nossa URL de craftysyntax parece continuar chegando quando isso acontece.
Eu também tenho o mod_security instalado com um dos principais conjuntos de regras.
Estou pensando em como descobrir o que está causando o alto uso da CPU. Meus principais suspeitos são PHP e mod_security.
Eu tenho o seguinte formulário de saída oprofile durante um pico de carga, mas ele não me diz qual processo está chamando libpcre:
% opreport
CPU: Intel Architectural Perfmon, speed 2793.09 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Clock cycles when not halted)
with a unit mask of 0x00 (No unit mask) count 100000
CPU_CLK_UNHALT...|
samples| %|
------------------
7061182 91.9105 libpcre.so.0.0.1
206901 2.6931 php-cgi
142239 1.8514 mod_security2.so
138121 1.7978 vmlinux
53809 0.7004 libc-2.5.so
20909 0.2722 libapr-1.so.0.2.7
16585 0.2159 oprofiled
9230 0.1201 oprofile
FYI, ldd
mostra que o mod_security está vinculado à libpcre, mas o php-cgi não é (estranho).
libpcre é perl expressões regulares. Seu código ou .htaccess usa muitas expressões (ou muito complicadas)? Parece que o problema está enraizado no mod_security.
Tags performance linux apache-2.2 redhat