それが100%の時間で機能し、この問題なしでプログラムを数時間(数日)実行しようとするのは非常に難しい場合、なぜ問題を解決するためにエンジニアリングリソースを費やすのですか?
申し訳ありませんが、最初はこの質問の要点全体を見逃しました。はい、それは次の理由で重要だと思います。
プログラマーは常にコードをコピーします。現在、システムの他の部分に伝播している不良パターンまたはライブラリがサーバーで実行されている可能性があります。
これが拡張が必要なサービスである場合、30分ごと、次に20分ごと、そして常に再起動する必要がある場合があります。この時点になると、問題を実際に見つけて修正するためのエンジニアリング時間がなくても、ほとんどの場合、問題が発生する可能性があります。より大きなボックスへの垂直スケーリングは、あなた自身の機会です。
一般に、エンジニアリングチームは演習から何かを学ぶことができます。一般に、これらの問題を診断する方法、特に実行中のプロファイラーとリーク検出器について最新の情報を入手する必要があります。
この製品が現在開発中である場合、次の機能がメモリ曲線を変更し、この問題を悪化させるかどうかを予測することは非常に困難です。次に、次のリリースをプッシュする前に、問題を解決するために足が火になります。
ただし、これがメンテナンスモードでの使用頻度の低い製品である場合は、修正にリソースを割り当てないことはおそらく問題ありませんが、最適ではありません。
それがスレッドまたはメモリのリークであるかどうかを判断するという点では、それは本当にあなたが不足しているものに依存します。を実行して、ps
大量のスレッドをフォークしていることがわかり、それが(スタックのために)メモリが不足している理由である場合は、その問題に取り組む必要があります。
生成されるスレッドの数が比較的安定しているように見えても、メモリが増え続けている場合は、メモリリークに集中する必要があります。
Linuxを使用している場合は、スレッドのプロセスIDをps auxf
次のように確認できます。
root 2501 0.0 0.3 244448 25576 ? Ss Jul03 0:11 /usr/sbin/httpd
apache 2716 0.0 0.5 384776 46696 ? S Oct14 0:17 \_ /usr/sbin/httpd
apache 2717 0.0 0.5 382208 44304 ? S Oct14 0:11 \_ /usr/sbin/httpd
子スレッドの数が増加しているかps
、プロセスの仮想メモリがスワップまたはヒットするまで増加していることを示しますulimit
が、スレッドは比較的一定です。