過去 5 ~ 6 年間発生していなかったプロダクション コードで突然の問題が発生しました。最大 64 個のスレッドを生成するスレッド プールがあり、64 個のスレッドすべてがデータを読み取り、それMap
をさらに処理するために共通に配置します。
読み取りは特定のソースからのすべてのスレッドによって行われ、データが実際にソースから読み取られていることを確認しましたが、1 つの特定のバッチがMap
.
コード スニペットを次に示します (機密性の問題のため、コード全体を配置することはできません)。
try {
<read the data>
.
.
<do processing>
.
.
synchronized(glock) { //glock is a class attribute, Object glock = new Object[];
map.put(<data that was read>);
log.debug("bla bla bla")
}
} catch(Throwable e) {
log.error("error")
}
finally {
log.debug("done")
}
問題: 特定のスレッドが同期ブロックに入らない、マップに入らない、印刷しない、印刷"bla bla bla"
しない"error"
が印刷する"done"
。
すべてを確認しました...コードに変更はありません。この問題はどこからともなくすぐに現れました。問題は、すべてのクライアントの同意を得ずに運用コードであるため、追加のログを配置できないことですが、それは最後の部分です。
誰かが同様の問題に直面したか、それについて何か知っていますか? 読み取られるデータは巨大で、6000 レコードで、各レコードには最小 0f 30 ~ 40 列のデータがあります。
前もって感謝します。
編集:キャッチThrowable
していないException