O Apache usa 100% da CPU. O comando "ps" pode me dizer o que está fazendo?

8

Eu tenho um servidor Linux SLES 10 e algumas vezes é atingido no máximo pelo Apache para 100% da CPU.

Com ps axposso ver, que o Apache gerou ~ 50 processos Apache.

Por exemplo, o pscomando pode me dizer o que cada um desses processos Apache está fazendo?

Ou talvez algum outro método para que eu possa ver quais páginas da web desencadeiam o problema?

Sandra
fonte

Respostas:

14

Meu arquivo /etc/httpd/conf/httpd.conf possui esta seção:

# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from .example.com
    Allow from 127. 192.168.1.
</Location>

Portanto, se eu for para http://192.168.1.1/server-status , recebo uma página que diz:

  1. versão do servidor
  2. tempo de atividade do httpd
  3. uso atual da CPU
  4. de solicitações sendo processadas e número de trabalhadores ociosos

  5. uma grade do que cada processo está fazendo
  6. pedidos recentes

    Status do servidor Apache para 192.168.3.1

    Versão do servidor: Apache / 2.2.3 (Red Hat)
    Servidor criado: 14 de julho de 2009 06:04:04

    Hora atual: Sábado, 17 de julho de 2010 10:20:31
    Hora de reinicialização do CDT : Sábado, 17 de julho de 2010 10:13:12
    Geração de servidor pai CDT : 0
    Tempo de atividade do servidor: 7 minutos 19 segundos
    Total de acessos: 51 - Total Tráfego: 156 kB
    Uso da CPU: u0 s0 cu0 cs0
    .116 solicitações / s - 363 B / segundo - 3132 B / solicitação
    1 solicitações atualmente em processamento, 7 trabalhadores ociosos

    __W_____................................................. .......
    ........................................... .....................
    ............................. ...................................
    ............... .................................................

    Chave do placar:
    "_" Aguardando conexão, "S" Inicializando, "R" Solicitação de leitura,
    "W" Enviando resposta, "K" Keepalive (leitura), "D" Pesquisa DNS, "D" Pesquisa DNS,
    "C" Fechando conexão ", L "Log", G "Concluindo graciosamente",
    "Limpeza ociosa do trabalhador". Slot aberto sem processo atual

    Srv PID Acc M CPU SS Req
    Conexão Slot filho Solicitação VHost do cliente 0-0 20715 0/2/2 _ 0,00 418 0 0,0 0,01 0,01 192.168.3.97 no GET / status do servidor HTTP / 1.1
    1-0 20716 0/49/49 _ 0.00 128 0 0.0 0.15 0.15 192.168.3.97 com GET / status do servidor HTTP / 1.1
    2-0 20717 0/0/0 W 0.00 0 520222374 0.0 0.00 0.00 192.168.3.97 com GET / status do servidor HTTP / 1.1

Kevin M
fonte
Você pode precisar definir ExtendedStatus ONpara ver cada solicitação #
TonyUser
3

stracepode dizer o que um processo específico está fazendo no nível das chamadas do sistema, mas não fornece uma "visão de dez metros" do que está acontecendo. Você precisará reunir as chamadas do sistema que está usando para descobrir isso.

Ignacio Vazquez-Abrams
fonte
2

Se você possui um site com um back-end de banco de dados, pode procurar no DBMS quais comandos estão em execução no momento. Talvez isso possa ajudá-lo a restringir onde, no código do site, a carga é gerada.

Caso contrário, você poderá aumentar o nível de log do daemon httpd. Então você tem mais informações nos logs.

Raffael Luthiger
fonte
1

Também existe o ltrace, que funciona como strace, mas com chamadas de biblioteca.


fonte
0

Você pode achar o top mais informativo que o ps.

bmargulies
fonte