如何在 jvm 崩溃后清除 lucene write.lock 文件的锁?



我需要java lucene启动代码来检查是否有一个锁定的write.lock文件在JVM崩溃后留下,如果是,则需要解锁它。

在 JVM 崩溃后,lucene 没有机会正确释放 write.lock 文件。我需要的是java lucene代码来检查启动时的这种情况并顺利处理它,而不会抛出一个大胖LockObtainFailedException

正在使用 Lucene 版本 5。

这应该通过删除锁定文件在 Lucene 之外解决。

问题是新的 Lucene 实例无法安全地删除锁定文件,因为它无法判断锁定文件是否存在,因为现有实例仍在运行。

您需要的是一个外部应用程序,该应用程序可以测试以查看实例是否仍然存在。 您可以使用一些简单的脚本来构建它:

  • 在"PID 文件"中捕获 Lucene 实例的 PID。
  • 重新启动 Lucene 时,请检查现有的 PID 文件。 如果 PID 文件存在:
    • 检查具有该 PID 的进程是否仍在运行; 例如使用kill -0 <pid>
    • 如果是,请检查它是否是Lucene过程;例如,通过对ps ... <pid>的输出进行模式匹配。
  • 如果以上都不是,脚本可以删除锁定文件。

如果您的应用程序注册为服务(在 Linux 上),则各种"init"和服务管理服务(System V init、upstart、systemd)允许您以受控方式停止和启动服务。 您甚至可以将服务配置为在服务崩溃时重新启动。

第三种选择是使用现有的 HA(或类似)框架在 Lucene 崩溃时自动重新启动。 现有的框架可能会具有您自己从头开始开发的优势。

最新更新