【发布时间】:2013-10-30 13:00:42
【问题描述】:
您知道任何方法来记录所有在 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:“没有可用的锁”。
向汉斯·梅斯致敬
【问题讨论】:
标签: java exception-handling tomcat7 nfs