【发布时间】:2016-08-12 04:19:00
【问题描述】:
我的 Django 服务器在 Webfaction 托管上存在问题。对于某些请求(每天 500.000 的大约 1.000 个请求),我可以在访问日志中看到错误。在 nginx 日志中我可以看到代码为“499”的请求,在 apache 日志中它们有“500”错误代码。
奇怪的是我在我的 django 日志中没有看到任何问题(通常我收到的邮件除了堆栈跟踪)。你能帮我吗,是什么导致了这种奇怪的行为?
在收到超出托管内存限制的问题后,我开始调查日志。似乎我的应用程序有一些内存泄漏,因为我可以看到使用的内存在缓慢上升。因此,我尝试通过优化我的 wsgi 进程、线程并尝试设置最大请求参数来进行快速修复。之后我会调查内存泄漏的原因。
我的基础设施如下:
- Nginx - 前端服务器(由 Webfaction 运营)
- Apache/2.4.16,带有 mod_wsgi 4.4.13/Python 3.4
- Django 1.8.12
我的 httpd.conf 如下:
ServerRoot "/home/quick/webapps/citaty/apache2"
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule unixd_module modules/mod_unixd.so
LogFormat "%{X-Forwarded-For}i %l %u %t %{Host}i \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %D" combined
CustomLog /home/quick/logs/user/access_citaty.log combined
ErrorLog /home/quick/logs/user/error_citaty.log
Listen 21628
KeepAlive Off
SetEnvIf X-Forwarded-SSL on HTTPS=1
ServerLimit 1
StartServers 1
MaxRequestWorkers 10
MinSpareThreads 1
MaxSpareThreads 5
ThreadsPerChild 10
MaxRequestsPerChild 1000
WSGIRestrictEmbedded On
WSGILazyInitialization On
<VirtualHost *>
ServerName domain.com
CustomLog /home/quick/logs/user/access_citaty.log combined
ErrorLog /home/quick/logs/user/error_citaty.log
WSGIDaemonProcess citaty processes=5 threads=1 maximum-requests=1000 python-path=/home/quick/webapps/citaty:/home/quick/webapps/citaty/lib/python3.4/site-packages display-name=%{GROUP}
WSGIProcessGroup citaty
WSGIScriptAlias / /home/quick/webapps/citaty/apache2/conf/citaty.wsgi
</VirtualHost>
<VirtualHost *>
ServerName domain2.com
CustomLog /home/quick/logs/user/access_citaty_laska.log combined
ErrorLog /home/quick/logs/user/error_citaty_laska.log
WSGIDaemonProcess citaty_laska processes=1 threads=1 maximum-requests=1000 python-path=/home/quick/webapps/citaty:/home/quick/webapps/citaty/lib/python3.4/site-packages display-name=%{GROUP}
WSGIProcessGroup citaty_laska
WSGIScriptAlias / /home/quick/webapps/citaty/apache2/conf/citaty_laska.wsgi
</VirtualHost>
我的 django 日志设置如下:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'file': {
'level': 'INFO',
'filters': ['require_debug_false'],
'class': 'logging.FileHandler',
'filename': '/home/quick/logs/user/django_citaty.log',
},
'file_jobs': {
'class': 'logging.FileHandler',
'filename': '/home/quick/logs/user/django_jobs.log',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['file', 'mail_admins'],
},
'py.warnings': {
'handlers': ['file'],
},
'citaty.sources.crawlers.base': {
'level': 'INFO',
'handlers': ['file_jobs', 'console'],
},
},
}
【问题讨论】:
标签: django apache nginx mod-wsgi