3

最近、自分のコードで見つけにくいバグを突き止めていました。配列の一部の平均を計算する numpy コードにたどり着きました。

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

もちろん、X値が の要素がない場合i、前のコードは空の配列の平均を計算するのと同じです。

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

これにより、値が得られますnan。ただし、一部のアーキテクチャでは、この警告も発生します。

RuntimeWarning: double_scalars で無効な値が検出されました

コードを修正し、現在はすべて問題なく動作していますが、この話にはもう少し厄介な部分があります。

バグが顕在化したのは、Apache プロセスが「Sending Reply」状態でスタックするすべてのワーカーで停止したためです。「応答の送信」に巻き込まれたワーカーは、問題を引き起こした実際のワーカーではなく、その直後に続いたワーカーでした。Python 例外は発生せず、メモリ使用量は問題なく、CPU はほとんど使用されていませんでした。完全に応答しなくなるまで、ゆっくりと Apache を無効にしました。

ここに画像の説明を入力

Apache、Django、mod_wsgi、numpy などを使用しています。

この派手なコードが原因で Apache が停止した理由について何か考えはありますか? 今後は予防に努めたいと思います。

4

2 に答える 2

2

See:

From memory numpy is affected by a variant of that issue. Ensure you force the WSGI application to run in the main interpreter context.

于 2013-10-06T21:37:32.997 に答える
2

@Graham Dumpletonの回答から構築し、次の行を追加するだけです:

WSGIApplicationGroup %{GLOBAL}

私のアプリケーションのApache構成ファイルに問題を修正しました。

于 2013-10-09T19:36:26.380 に答える