Numpy运行时警告导致Apache Workers冻结在“发送回复”状态

时间:2013-10-06 20:46:03

标签: django apache numpy mod-wsgi

最近,我在我的代码中追踪了一个难以捉摸的错误。它归结为一些计算数组部分平均值的numpy代码。

np.array(X[X == i]).mean(0)

当然,如果X中没有值为i的元素,那么之前的代码相当于计算空数组的平均值。

np.array([]).mean(0)

这会产生值nan。但在某些架构上,它也会导致此警告。

  

RuntimeWarning:double_scalars中遇到无效值

我们修改了代码,现在一切都运行得很好,但是这个故事的另一部分有点麻烦。

错误显示的方式是,它导致Apache进程因每个陷入“发送回复”状态的工作人员而陷入困境。在“发送回复”中被抓住的工人不是导致问题的实际工人,而是紧随其后的工人。没有引发python异常,内存使用情况很好,并且几乎没有使用CPU。它只是慢慢削弱了Apache,直到它完全没有反应。

enter image description here

我们使用Apache,Django,mod_wsgi和numpy等。

关于为什么这个numpy代码导致Apache陷入困境的任何想法?我想在将来采取行动防止它。

2 个答案:

答案 0 :(得分:2)

请参阅:

来自内存numpy受该问题的变体影响。确保强制WSGI应用程序在主解释器上下文中运行。

答案 1 :(得分:2)

从@Graham Dumpleton建立回答,只需添加以下行:

WSGIApplicationGroup %{GLOBAL}

到我的应用程序的apache配置文件为我解决了这个问题。