2010-05-29 157 views
4

我想在小服务器上运行一个小的守护进程(看起来不是太多),监视目录中是否添加了新文件(以及主目录中的任何目录),并调用另一个Clojure程序来处理这个新文件。用Clojure/JVM守护进程

理想情况下,每个文件都会被添加到队列中(Clojure中的ref表示的列表?),主进程将基于FIFO来处理队列中的这些文件。

我的问题是:有一个JVM一直运行这个小程序太多资源猪吗?你有什么建议如何去做这件事?

非常感谢!

编辑:我应该问的另一个问题:我应该运行它作为它自己的实例(使用较少的内存),并让它启动一个新的JVM时,看到一个文件,或在同一个JVM的Clojure代码,处理文件?

回答

5

只要它现在运行良好,它没有内存泄漏,它应该没问题。

从守护程序术语我收集它在一个unix克隆,在这种情况下最好的是从一个init脚本或从rc.local脚本启动它。不幸的是细节不同,从操作系统到操作系统更具体。

使用-Xmx = 64m或其他东西来限制内存,以确保其在取消其余服务之前失败。用数字玩一下,找到最低的可靠尺寸。另外,由于clojures声称能够处理并发性,因此只运行一个JVM并在其中运行多个线程中的所有功能,这是非常有意义的。产生新进程的开销已经很大,如果它是一个需要JIT并加热其内存管理的JVM,那就更是如此。在资源受限的机器上可能会造成问题。在资源丰富的机器上这是浪费。

我总是发现JVM不能快速运行类似脚本的脚本并再次退出。在我看来,它确实不是用于这个用例 。

+2

JVM实际上消耗更多的内存,然后它的最大堆设置。虽然我喜欢clojure这样一个运行JVM的简单应用程序,但似乎有巨大的开销。 – 2010-05-29 09:54:21