0

在某些时候,我的网站在 Apache2 上运行 mod_wsgi 只是停止处理请求。与服务器的连接保持不变,客户端等待响应,但它永远不会被 apache 返回。此时服务器处于0% CPU状态,没有任何处理。我认为,apache 只是将请求发送到队列并且永远不会让它们离开那里。当我执行时apache2ctl graceful,问题没有解决。只有之后apache2ctl restart

我的站点是 Pyramid 的 4 个实例 wsgi 应用程序和 Zope 3 的 2 个实例。据我所知,它运行正常并且没有速度问题。

版本:Ubuntu 10.04 apache2 2.2.14-5ubuntu8.9 libapache2-mod-wsgi 2.8-2ubuntu1

4

1 回答 1

0

听起来您正在使用嵌入式模式来运行多个应用程序,并且您正在使用在子解释器中有问题的第三方 C 扩展,从而导致潜在的死锁。否则,您的代码会在内部死锁或阻塞外部服务并且永远不会返回,从而导致可用进程/线程耗尽。

首先,您应该考虑使用守护进程模式并将每个 Web 应用程序委托给不同的守护进程组,然后强制每个进程在主解释器中运行。

看:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API

否则使用以下描述的调试提示:

http://code.google.com/p/modwsgi/wiki/DebuggingTechniques

用于获取有关应用程序正在做什么的堆栈跟踪。

于 2012-06-10T12:00:21.167 回答