私たちの生産ボックスで奇妙なことが起こっています。コードの機能: UI サーブレットは、ユーザーが操作しているドキュメント オブジェクトに対してモニター ロックを取得し、それに対して何らかの計算を実行します。モニター ロックは、同じドキュメント オブジェクトが複数のユーザーによって同時に変更されるのを防ぐために取得されます。
製品で観察された問題: タイムアウトになるユーザー アクションはほとんどありません。
ログ分析: タイムアウトになったユーザー アクションに対応するスレッドは、ドキュメント オブジェクトの監視ロックを取得する前にすべてのログを出力しています。次に、スレッドがログに表示されない 1 時間以上のギャップがあり、その後突然アクティブになり、計算を行い、HTTP 要求が既にタイムアウトしているため、明らかにエラーになる応答を返信しようとします。ログとコードを確認したところ、その特定のドキュメント オブジェクトでモニター ロックを取得したスレッドが他にないことを確認できました。したがって、問題の時点でロックは争われていませんでした。
考えられる問題は何ですか?同期ブロックに遭遇したときにスレッドが実行可能状態になり、次の 60 ~ 80 分間、CPU がこの特定の実行可能スレッドを実行する機会がなかったというだけですか?