考虑到lucene是一个很好的全文检索系统,所以在我们的项目里面集成了java lucene,因为不想用solr,
所以我们选择了ice作为php和java互通的中间层技术,ice其实是一个很好的中间层,
有良好的技术文档和社区支持,最重要的一点是开源,虽然我没有阅读过ice的所有代码(相信很多人也很少阅读),
但是我相信开源就是安全且让人信任的。
在测试的时候发现lucene 出了一个异常
我的服务器是centos5
首先想到的是ulimit
查看默认的文件打开数目,运行如下命令
ulimit -n
1024
1024这是一个默认值,没办法,只好扩大这一个默认值
编辑limits.conf文件
vim /etc/security/limits.conf
添加如下信息
* soft nofile 65536
* hard nofile 65536
这样就增加了允许打开文件的数量
ulimit -n
65536
自己认为问题应该算是解决了,但是在重新进入测试系统的时候,问题又发生了
用lsof -p <pid> | wc -l命令查看此应用打开的文件数目时,让我非常吃惊(pid为应用程序的pid)
发现打开文件的数目不但没有减少,反而一直增加,我想不到一会65536也可能会超过,那too many open files的异常会重新发生。
其实遇到这种情况应该是java代码的问题,一定是打开了索引文件没有关闭,解决方法就是在每次搜索之后关闭
IndexSearcher,IndexSearcher.close()之后打开的文件数目会成为一个常量,不会一直增加