lucene在NFS的环境中搜索导致JVM崩溃
我们使用了3台服务器部署了tomcat,使用阿里云的SLB做了负载均衡。
至于索引的构建,添加另外使用了一台JOB服务器,定时向挂载的NFS盘commit,这里用的也是阿里云NAS服务,以NFS协议挂载。3台应用服务器以只读模式挂载NFS磁盘,用于响应搜索请求。配置看上去已经完成了,只需要根据特性在代码上做些调整。
- 我使用了lucene提供的搜索器管理类(SearcherManager)用于近时搜索,定期调用SearcherManager.maybeRefresh()方法检测索引的更新状态尝试获取更新后的IndexReader。在没有使用NFS的服务之前,服务状态一直良好。
- 由于NFS服务本身的限制,文件删除状态不能够被挂载机器及时的检测到,lucene官方文档建议在这种环境下使用自定义索引删除策略(IndexDeletionPolicy)来确保服务能够正常进行。
- 于是,我自定义了索引删除策略(IndexDeletionPolicy)在lucene初始化的时候进行配置(IndexWriterConfig),确保索引删除(IndexComment.delete())的时间和检测刷新尝试获取新读取器的过程(SearcherManager.maybeRefresh())不可能重叠。
- 部署运行之后,能够发现,调用SearcherManager.maybeRefresh()方法的过程中,segment文件FileNotFoundException异常已经不再出现,说明产生的效果,但原本的关键问题并没有解决。
此异常直接导致jvm崩溃
@红薯 老大,osc现在luceue搜索仍然使用的是NFS做的索引共享么?希望能够给我些建议。刚才看到几年前的帖:
https://www.oschina.net/question/12_2137731
这两天我们的几台tomcat也是CPU跑高,也让我不得不怀疑是NFS的锅,因为相同的环境,没有挂载NFS的服务器一直没有任何异常。
连续几天半夜被报警短信催起床启动已经崩溃的服务,真是折磨!
希望有经验的朋友能够为小弟提供些建议,感激不尽!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
引用来自“刘少”的评论
我用rsync进行索引文件的分发,当commit完成后,再进行分发, 你这种状况的话,建议:
job服务器写索引到本地目录, commit后,拷贝到nfs的目录,避免中间状态, 其他没有特殊.
我用rsync进行索引文件的分发,当commit完成后,再进行分发, 你这种状况的话,建议:
job服务器写索引到本地目录, commit后,拷贝到nfs的目录,避免中间状态, 其他没有特殊.
用tomcat demo方式启动 挂不了
未找到具体原因之前,为了避免半夜起床,可以定时轮流重启三个tomcat.....
job试试能不能samba挂载。或iscsi映射
我们放nfs毫无压力,你读得很厉害吗
引用来自“红薯”的评论
这个错误应该还是在操作索引时被中断吧,索引的写改删都应该在独立进城,最好不要放tomcat
这个错误应该还是在操作索引时被中断吧,索引的写改删都应该在独立进城,最好不要放tomcat
引用来自“红薯”的评论
读取的问题不大啊,写的话只能有一个,不会有什么问题啊
引用来自“红薯”的评论
读取的问题不大啊,写的话只能有一个,不会有什么问题啊
读取的问题不大啊,写的话只能有一个,不会有什么问题啊