У меня проблема с сайтом OSQA. Это настроенный сайт Django / Apache / mod_wsgi. Каждый час загрузка ЦП увеличивается до 164% (в среднем) для задачи HTTPD. Через 10 минут он снова высвобождается. Я просмотрел журналы, таблицы cron, внес много изменений в конфигурацию, но не могу отследить эту проблему. Может кто-нибудь, пожалуйста, посмотрите информацию ниже и сообщите мне, если это проблема конфигурации или кто-то еще сталкивался с этой проблемой.
У меня есть следующая информация из статуса сервера
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
Я использую Django 1.3
Это конфигурация 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>
Это файл 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>
Мы используем MySQL
Эта проблема решена. По запросу Graham-dumpleton я добавил сервер мониторинга New Relic, который указал на неверный запрос от Yahoo Pipes. После обращения в Yahoo они предоставили следующий текст, чтобы заблокировать доступ Yahoo Pipes к веб-сайту.
Настройте свой веб-сервер, чтобы блокировать пользовательский агент "Yahoo Pipes". Например, чтобы заблокировать каналы в Apache, добавьте это в блок виртуального хоста в httpd.conf:
SetEnvIfNoCase Пользовательский агент "Yahoo Pipes" noPipes
Ограничить GET POST
Заказать разрешить, запретить
Разрешить от всех
Запретить в env = noPipes
/ Лимит