【问题标题】:Speed up clojure startup time with nailgun使用 nailgun 加快 clojure 启动时间
【发布时间】:2013-10-01 03:57:07
【问题描述】:

我不时认为将clojure 用于shell 脚本 会很好,但是大约900 毫秒的启动时间太慢了。然后,我将 googlestartpage 用于“nailgun clojure”,但出现的唯一结果是针对 vimclojure 等特殊情况。那时我假装没有时间,转而使用更多启动速度更快的awkward 语言。

那么,如何使用nailgun来加快clojure的启动时间呢?

【问题讨论】:

    标签: shell clojure startup nailgun


    【解决方案1】:

    Debian

    执行以下操作一次:

    apt-get install nailgun                          # install nailgun
    java -server -jar /usr/share/java/nailgun.jar&   # run nailgun server
    ng-nailgun ng-cp /usr/share/java/clojure-1.4.jar # add clj to classpath
    

    现在服务器正在运行和配置,您可以在其上运行您的 clojure 脚本:

    ng-nailgun clojure.main path/to/myscript.clj
    

    在我的例子中,实际脚本的启动时间降至 80 毫秒,而没有 nailgun 的启动时间为 900 毫秒。

    为了更方便地运行实际脚本,请创建一个包含以下行的可执行文件ng-clojure,并将其放在路径中的某个位置:

    ng-nailgun clojure.main "$@"
    

    在您的 clojure shell 脚本中,将其添加为第一行:

    #!/usr/bin/env ng-clojure
    

    然后使 clojure shell 脚本可执行并像这样运行它

    path/to/myscript.clj
    

    OSX

    brew install nailgun
    ng-server 
    ng ng-cp ~/.m2/repository/org/clojure/clojure/1.5.1/clojure-1.5.1.jar 
    

    然后像上面那样执行你的脚本。

    更新:使用了一段时间后,它似乎并没有完美运行。有时我会遇到在没有 nailgun 的情况下运行时不会发生的 随机错误,有时似乎存在 内存泄漏,这使得 nailgun JVM 会随着时间的推移消耗所有内存,最终使系统交换到磁盘。尚未对此进行内存分析,但想添加此提示。

    【讨论】:

    • 海量!有人应该在 Planet Clojure 博客上分享此内容。
    • 尝试在一台 java 服务器上运行不同的东西时不会出现代码冲突问题吗?还是我误解了什么?
    • @rvirding 我不确定您所说的“代码冲突”是什么意思,但如果这不能 100% 起作用,我不会感到惊讶。例如,可能存在静态全局状态等问题。
    • 内存泄漏的可能原因是Clojure会在运行时生成很多新的类,而jvm的gc在清理permgen/垃圾类方面不如普通数据那么熟练
    • @noisesmith 现在已经有一段时间了,但如果我在 nailgun 的生命周期中创建了相当于千兆字节的类文件——不管是否收集垃圾,我都会感到惊讶。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多