javaでスローされたすべての例外(キャッチおよび処理されたかどうかにかかわらず)をログに記録する方法を知っていますか?
これが私の問題です:変更できないアプリケーションがあり、ロックファイルの作成に問題がある場合があります(以下の関連コード)。tryLock() メソッドを呼び出すと、30 秒間フリーズし (tryLock がノンブロッキングであるにもかかわらず)、失敗して戻ります (CANT_CREATE_LOCK)。ご覧のとおり、すべてのキャッチ層は、ログに記録することさえせずに、実際の問題を隠しています。
final File lockFile = new File(fooHomeDir, ".foo-home.lock");
try
{
FileOutputStream stream = new FileOutputStream(lockFile);
try
{
if (stream.getChannel().tryLock() == null)
{
return LockResult.HELD_BY_OTHERS;
}
this.fileOutputStream = stream;
this.lockFile = lockFile;
return LockResult.OK;
}
catch (OverlappingFileLockException overlappingFileLockException)
{
return LockResult.HELD_BY_OTHERS;
}
catch (IOException ie)
{
return LockResult.CANT_CREATE_LOCK;
}
}
catch (FileNotFoundException fnfe)
{
return LockResult.CANT_CREATE_LOCK;
}
私が望むこと: 例外の詳細を確認できます。
他の情報:
- 環境はLinux、Java 1.7、Tomcat 7です。
- fooHomeDir は、NFS でバックアップされたマウント ポイントを指します。
- fooHomeDir の権限は変更されていません。
- fooHomeDir の所有者は変更されていません。
- fooHomeDir のファイル システムがいっぱいではありません。
- SELinux など、干渉する可能性のあるものはありません。
基本的には、以前は動いていて、「突然」「理由もなく」止まってしまいました。というわけで現在調査中です。
アプリケーションのリモート デバッグを開始しますが、それまでは提案を歓迎します :-)
ありがとう、ジョー
アップデート
記録として、この問題の根本的な原因は、rpc.statd デーモンが停止したことです。したがって、ネイティブ ロック メカニズムは NFS で失敗しました。症状は、「利用可能なロックがありません」というメッセージを伴う IOException でした。
ハンス・メイスへの称賛