最近、自分のコードで見つけにくいバグを突き止めていました。配列の一部の平均を計算する 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 が停止した理由について何か考えはありますか? 今後は予防に努めたいと思います。