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
[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