Следующий фрагмент кода вызывает сбой 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) и утилитой оболочки flock(1).
Любые предложения/обходные пути?
PS: использование Oracle JDK 1.7.0_25 с NFSv4
EDIT: эта блокировка будет использоваться для определения того, какой из процессов активен в распределенном кластере высокой доступности. Код выхода 137. Что я ожидаю? способ обнаружения проблемы. закройте файл и попробуйте повторно получить.