Stuck tentando rastrear o culpado pelo alto uso da CPU em um servidor LAMP

2

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).

    
por edgester 27.04.2011 / 23:26

2 respostas

1

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.

    
por 28.04.2011 / 02:53
0

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.

    
por 28.04.2011 / 00:37