django, mod_wsgi, Alta CPU do MySQL - Problemas

2

Estou tendo um problema com um site do OSQA. É Django / Apache / mod_wsgi site configurado. A cada hora, a CPU chega a 164% (Média) para a tarefa HTTPD. Após 10 minutos, libera o backup. Eu revi os logs, tabelas cron, feitas muitas alterações de configuração, mas não podem rastrear este problema. Alguém pode por favor olhar nas informações abaixo e deixe-me saber se é um problema de configuração, ou se alguém mais tiver experimentado esse problema.

  1. Executar TOP mostra HTTPD usando 165% da CPU
  2. O monitor de desempenho do VMware também exibe picos.
  3. Isso acontece a cada hora por 10 minutos.
  4. Eu tenho as seguintes informações do status do servidor

    Server Version: Apache/2.2.15 (Unix) DAV/2 mod_wsgi/3.2 Python/2.6.6
    Server Built: Feb 7 2012 09:50:15
    
    Current Time: Sunday, 10-Jun-2012 21:44:29 EDT
    Restart Time: Sunday, 10-Jun-2012 19:44:51 EDT
    Parent Server Generation: 0
    Server uptime: 1 hour 59 minutes 37 seconds
    Total accesses: 1088 - Total Traffic: 11.5 MB
    CPU Usage: u80.26 s243.8 cu0 cs0 - 4.52% CPU load
    .152 requests/sec - 1682 B/second - 10.8 kB/request
    4 requests currently being processed, 11 idle workers
    
    ....._..........__......W.......................................
    ...................................C._..._....._L__._L_._.......
    ......................
    
    Scoreboard Key:
    "_" Waiting for Connection, "S" Starting up, "R" Reading Request,
    "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
    "C" Closing connection, "L" Logging, "G" Gracefully finishing,
    "I" Idle cleanup of worker, "." Open slot with no current process
    
    Srv PID Acc M   CPU     SS  Req Conn    Child   Slot    Client  VHost   Request
    0-0 -   0/0/34  .   0.42    327 17  0.0 0.00    0.67    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    1-0 -   0/0/22  .   0.31    339 32  0.0 0.00    0.26    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    2-0 -   0/0/22  .   0.65    358 10  0.0 0.00    0.31    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    3-0 -   0/0/31  .   1.03    378 31  0.0 0.00    0.60    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    4-0 -   0/0/20  .   0.45    356 9   0.0 0.00    0.31    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    5-0 18852   0/16/34 _   0.98    27  18120   0.0 0.37    0.62    69.180.250.36   osqa.informs.org    GET /questions/289/what-is-the-difference-between-operations-re
    6-0 -   0/0/32  .   0.94    309 29  0.0 0.00    0.64    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    7-0 -   0/0/31  .   1.15    382 32  0.0 0.00    0.75    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    8-0 -   0/0/21  .   0.28    403 19  0.0 0.00    0.20    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    9-0 -   0/0/32  .   1.37    288 16  0.0 0.00    0.60    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    10-0    -   0/0/33  .   1.72    383 16  0.0 0.00    0.40    127.0.0.1   osqa.informs.org    OPTIONS * HTTP/1.0
    
  5. Estou executando o Django 1.3

  6. Esta é uma configuração mod_wsgi e copiada é o arquivo wsgi.conf:

    <IfModule !python_module>
    <IfModule !wsgi_module>
    
    LoadModule wsgi_module modules/mod_wsgi.so
    
    <IfModule wsgi_module>
    
    <Directory /var/www/osqa>
     Order allow,deny
     Allow from all
     #Deny from all
    </Directory>
    
    WSGISocketPrefix /var/run/wsgi
    WSGIPythonEggs /var/tmp
    WSGIDaemonProcess OSQA maximum-requests=10000
    WSGIProcessGroup OSQA
    
    Alias /admin_media/ /usr/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/contrib/admin/media/
    Alias /m/ /var/www/osqa/forum/skins/
    Alias /upfiles/ /var/www/osqa/forum/upfiles/
    
    <Directory /var/www/osqa/forum/skins>
     Order allow,deny
     Allow from all
    </Directory>
    
    WSGIScriptAlias / /var/www/osqa/osqa.wsgi
    
    </IfModule>
    </IfModule>
    </IfModule>
    
  7. Este é o arquivo httpd.conf

    Timeout 120
    KeepAlive Off
    MaxKeepAliveRequests 100
    MaxKeepAliveRequests 400
    KeepAliveTimeout 3
    
    <IfModule prefork.c>
    Startservers      15
    MinSpareServers   10
    MaxSpareServers   20
    ServerLimit      50
    MaxClients       50
    MaxRequestsPerChild  0
    </IfModule>
    
    
    <IfModule worker.c>
    StartServers         4
    MaxClients         150
    MinSpareThreads      25
    MaxSpareThreads     75
    ThreadsPerChild      25
    MaxRequestsPerChild  0
    </IfModule>
    
  8. Estamos usando o MySQL

  9. O servidor é um ESX4i, configurado para a VM usar 4 CPUs e 8 GB de RAM. Hyper threading está habilitado, 2 CPUs físicas, com 4 Logical. a CPU é Intel Xeon 2,8 GHz. A memória total é de 12 GB
por Red Rover 11.06.2012 / 03:59

1 resposta

1

Esse problema foi resolvido. A pedido do graham-dumpleton, adicionei o servidor de monitoramento New Relic, que apontava para uma má solicitação do Yahoo Pipes. Depois de entrar em contato com o Yahoo, eles forneceram o seguinte texto para bloquear o Yahoo Pipes do site.

Configure seu servidor da Web para bloquear o agente do usuário "Yahoo Pipes" . Por exemplo, para bloquear Pipes no Apache, adicione isso ao seu bloco de host virtual em httpd.conf:

NoPipes SetEnvIfNoCase User-Agent "Yahoo Pipes" no

Limite GET POST
Ordem Permitir, Negar
Permitir de todos os
Negar de env = noPipes
/ Limite

    
por 14.06.2012 / 20:21