以下代码段导致JVM崩溃:如果获取锁后发生网络中断
while (true) {
//file shared over nfs
String filename = "/home/amit/mount/lock/aLock.txt";
RandomAccessFile file = new RandomAccessFile(filename, "rws");
System.out.println("file opened");
FileLock fileLock = file.getChannel().tryLock();
if (fileLock != null) {
System.out.println("lock acquired");
} else {
System.out.println("lock not acquired");
}
try {
//wait for 15 sec
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("closing filelock");
fileLock.close();
System.out.println("closing file");
file.close();
}
观察:JVM 收到 KILL(9) 信号并以退出代码 137(128+9) 退出。
可能在重新建立网络连接后,文件描述符表中出现了问题。这种行为可以通过系统调用flock(2) 和shell 实用程序flock(1) 重现。
有什么建议/解决方法吗?
PS:使用带有 NFSv4 的 Oracle JDK 1.7.0_25
编辑:此锁将用于识别分布式高可用性集群中哪个进程处于活动状态。退出代码是 137。我期望什么?检测问题的方法。关闭文件并尝试重新获取。