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

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

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

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

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

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

[b]需求:[/b]
索引程序每2小时启动一次。就这样写本来应该很容易吧。下图:
[img]http://dl.iteye.com/upload/attachment/300371/085013dd-96c0-30fe-81d5-7ed8173514f0.jpg[/img]

但事实上,却事与愿违,这样的脚本反而是每两小时,然后这一个小时的每一个分钟都在执行这一个脚本。同时也可以看到,执行的规律非常明显,每两小时,然后就是再每一分钟都执行一次,执行完一小时后,再停两小时,这样循环下去。。。
知道了问题,就改一下就行了。下图:
表示两小时后的那一个小时的第1秒执行一次这样的脚本就可以了。而不是*号。。。
[img]http://dl.iteye.com/upload/attachment/300373/b361617f-50f5-3828-a8b0-58c033799f69.jpg[/img]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值