503使用apache/wsgi在日志中没有跟踪
我的Flask应用程序定期返回503个错误。我说不出原因。可能与负载有关。它不是系统性的,因此不是文件权限问题。它更像是在10个后续请求上执行5次。在浏览器中使用F5易于复制 我想调试它,但在日志中找不到任何东西 我已经检查了apache主日志文件(访问/错误)和VirtualHost访问/错误日志文件。我尝试将503使用apache/wsgi在日志中没有跟踪,apache,logging,mod-wsgi,http-status-code-503,Apache,Logging,Mod Wsgi,Http Status Code 503,我的Flask应用程序定期返回503个错误。我说不出原因。可能与负载有关。它不是系统性的,因此不是文件权限问题。它更像是在10个后续请求上执行5次。在浏览器中使用F5易于复制 我想调试它,但在日志中找不到任何东西 我已经检查了apache主日志文件(访问/错误)和VirtualHost访问/错误日志文件。我尝试将LogLevel设置为调试,但没有效果 当应用程序返回一个503(例如,使用Flask的abort(503))时,错误会记录在virtualhost访问日志中(这不是apache错误,因
LogLevel
设置为调试,但没有效果
当应用程序返回一个503
(例如,使用Flask的abort(503)
)时,错误会记录在virtualhost访问日志中(这不是apache错误,因此会记录在访问日志中)。它也会记录在我的应用程序日志中,因为我的框架会记录所有http错误
我在过去遇到过加载问题,没有可用的线程。这导致apache本身返回503个错误,我很确定这些错误记录在access或错误日志中(很可能是错误)
客户机怎么可能得到503,而日志中没有它的踪迹?
虚拟主机配置摘录:
ErrorLog ${APACHE_LOG_DIR}/my-app-error.log
CustomLog ${APACHE_LOG_DIR}/my-app-access.log combined
WSGIDaemonProcess my-app threads=5
WSGIScriptAlias /api /srv/my-app/application.wsgi process-group=my-app application-group=%{GLOBAL}
WSGIPassAuthorization On
<Location /api>
WSGIProcessGroup my-app
</Location>
<Directory /srv/my-app/>
Options FollowSymLinks
AllowOverride All
</Directory>
重启后
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-12-04 11:13:23 CET; 2 weeks 0 days ago
Process: 10023 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Process: 536 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 977 (apache2)
Tasks: 133 (limit: 4915)
Memory: 1.7G
CPU: 6d 6h 3min 51.105s
CGroup: /system.slice/apache2.service
├─ 977 /usr/sbin/apache2 -k start
├─10066 /usr/sbin/apache2 -k start
├─10067 /usr/sbin/apache2 -k start
├─10068 /usr/sbin/apache2 -k start
├─10069 /usr/sbin/apache2 -k start
├─16834 /usr/sbin/apache2 -k start
└─16836 /usr/sbin/apache2 -k start
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-12-19 12:32:02 CET; 3s ago
Process: 11840 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 11735 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Process: 11850 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 11854 (apache2)
Tasks: 79 (limit: 4915)
Memory: 125.3M
CPU: 4.080s
CGroup: /system.slice/apache2.service
├─11854 /usr/sbin/apache2 -k start
├─11855 /usr/sbin/apache2 -k start
├─11856 /usr/sbin/apache2 -k start
├─11857 /usr/sbin/apache2 -k start
└─11858 /usr/sbin/apache2 -k start
我在这里看到的区别是进程的数量(不知道该如何总结)和内存使用。好的,应用程序似乎对内存有点贪婪,但我认为服务器可以处理这一点。首先,您查看访问日志了吗?因为如果没有错误日志,这意味着服务器已被访问,因此访问日志中必须有某些内容。 如果有,检查烧瓶是否确实可用 其次,您是否代理请求?如果这样做,请确保代理配置正常
当然,请确保您的mod_wsgi配置为,以防有所帮助:我们遇到过类似的问题,一个flask wsgi应用程序间歇性返回
503
(比如,每5-10个请求一次)
手动测试显示,相应的请求没有显示在apache访问日志中(而成功的请求则显示在日志中)
正如在的回答中所暗示的,apache配置确实也包含了其他应用程序的代理配置,我们对其中一个ProxyPass
指令使用了keepalive=On
关键字(不是针对flask应用程序,而是针对使用相同前缀的另一个应用程序)。摘录:
<Location /curated-cofs>
WSGIProcessGroup curated-cofs # this is the flask app
</Location>
<Location /curated-cofs/optimade>
ProxyPass http://localhost:3759 keepalive=On timeout=1200
ProxyPassReverse http://localhost:3759
</Location>
WSGIProcessGroup策划的cofs#这是flask应用程序
ProxyPasshttp://localhost:3759 keepalive=On超时=1200
ProxyPassReversehttp://localhost:3759
实际上,我们没有理由在这里使用keepalive
关键字(没有内部防火墙)
从ProxyPass指令中删除关键字似乎解决了flask应用程序的
503
问题,这是一个副作用。>“我检查了apache主日志文件(访问/错误)和VirtualHost访问/错误日志文件。我尝试将LogLevel设置为debug,但没有效果。”我在Ubuntu18.04.2版本的libapache2 mod wsgi 4.5.17中也遇到了同样的问题。这个问题已经很老了,我无法再复制它了,但这可能会对未来的读者有所帮助。