把linux的corn应用于Lucene的索引方式

cron 的用处我就不多说了,最近,在做这样的一个事情,索引进行中,要间隔20分钟就会把索引更新一次,即,索引程序会 sleep 20分钟,但要知道 lucene 的 IndexReader 把硬盘的索引缓存到内存,说明了,就算 sleep 过程中什么也没有做,此索引程序还是占用了系统的内存了。而事实上,我们却希望在休眠期间释放其索引占用的内存。当然我们先要分析一下利弊。

利:
1。 索引程序退出了,即调用了System.exit(0);方法,表示整一个程序退出,那当然是其使用的内存全部释放掉。
2。 在现在约200W的数据量来说,虽然不说得上很大,但其也占用了近1G的内存,至少,释放掉这些内存,使linux系统不再管理更多的内存,搜索程序的反应速度也会相应提高。

弊:
1。 索引程序退出了,的确是把内存释放掉,但,索引程序启动时却要把索引重新读入内存,这样在索引程序启动的时候,会消耗提更多的CPU与IO读写等操作。

但,综合来说,还是选用这个方法,利大于弊。

首先,当然是修改索引程序,其实只是把 Thread.sleep改为 System.exit(0);
然后,就是编写一个脚本实时启动它了。

需求:
索引程序每2小时启动一次。就这样写本来应该很容易吧。下图:


但事实上,却事与愿违,这样的脚本反而是每两小时,然后这一个小时的每一个分钟都在执行这一个脚本。同时也可以看到,执行的规律非常明显,每两小时,然后就是再每一分钟都执行一次,执行完一小时后,再停两小时,这样循环下去。。。
知道了问题,就改一下就行了。下图:
表示两小时后的那一个小时的第1秒执行一次这样的脚本就可以了。而不是*号。。。


这样就实现了每两小时执行一次了。
由于本人水平有限,难免有错误,同时欢迎转载,请注明出处:http://kernaling-wong.iteye.com/blog/750256 或联系 [email protected]

你可能感兴趣的:(thread,linux,脚本,Lucene,Gmail)