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

django, mod_wsgi, MySQL High CPU - Проблемы

У меня проблема с сайтом OSQA. Это настроенный сайт Django / Apache / mod_wsgi. Каждый час загрузка ЦП увеличивается до 164% (в среднем) для задачи HTTPD. Через 10 минут он снова высвобождается. Я просмотрел журналы, таблицы cron, внес много изменений в конфигурацию, но не могу отследить эту проблему. Может кто-нибудь, пожалуйста, посмотрите информацию ниже и сообщите мне, если это проблема конфигурации или кто-то еще сталкивался с этой проблемой.

  1. Запуск TOP показывает, что HTTPD использует 165% ЦП
  2. Монитор производительности VMware также отображает всплески.
  3. Это происходит каждый час в течение 10 минут.
  4. У меня есть следующая информация из статуса сервера

    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. Я использую Django 1.3

  6. Это конфигурация mod_wsgi, скопированный файл 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. Это файл 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. Мы используем MySQL

  9. Сервер представляет собой ESX4i, настроенный для виртуальной машины на использование 4 ЦП и 8 ГБ ОЗУ. Включена гиперпоточность, 2 физических процессора, 4 логических. Процессор - Intel Xeon 2,8 ГГц. Общий объем памяти 12 ГБ

Эта проблема решена. По запросу Graham-dumpleton я добавил сервер мониторинга New Relic, который указал на неверный запрос от Yahoo Pipes. После обращения в Yahoo они предоставили следующий текст, чтобы заблокировать доступ Yahoo Pipes к веб-сайту.

Настройте свой веб-сервер, чтобы блокировать пользовательский агент "Yahoo Pipes". Например, чтобы заблокировать каналы в Apache, добавьте это в блок виртуального хоста в httpd.conf:

SetEnvIfNoCase Пользовательский агент "Yahoo Pipes" noPipes

Ограничить GET POST
Заказать разрешить, запретить
Разрешить от всех
Запретить в env = noPipes
/ Лимит