【问题标题】:with cloure lein ring server, how to set max heapsize when starting the web appication?使用 clojure lein ring 服务器,如何在启动 Web 应用程序时设置最大堆大小?
【发布时间】:2019-08-03 04:24:03
【问题描述】:

所以当我使用命令 lein ring server 启动 cloure web 应用程序时,有 2 个已处理启动。

第一个进程是 clojur.main,然后运行主 Web 应用程序。 jvm 选项

:jvm-opts ["-Xmx128m"  "-server"]

用于控制 Web 应用程序内存的环工作。问题是 clojure.main -m leingen.core.main 分配了 300+ MB 的堆空间。 (见截图 32)

【问题讨论】:

    标签: clojure leiningen ring


    【解决方案1】:

    没关系

    显然我应该跑 lein 蹦床环形服务器

    这样 leingen 让路,节省内存

    【讨论】:

      【解决方案2】:

      另一种方法是创建一个uberjar:

      > lein clean
      > lein uberjar
      Compiling demo.hello
      Compiling demo.numbers
      Created /home/alan/expr/demo-horizon/target/demo-horizon-0.1.0-SNAPSHOT.jar
      Created /home/alan/expr/demo-horizon/target/demo-horizon-0.1.0-SNAPSHOT-standalone.jar
      

      您通常总是希望使用xxx-standalone.jar 版本。

      然后你使用纯 java 开始这个过程,完全没有任何 lein:

      java -jar /home/alan/expr/demo-horizon/target/demo-horizon-0.1.0-SNAPSHOT-standalone.jar
      

      您可以添加任何标志,例如 -Xmx4g 或任何其他您喜欢的标志。


      更新

      我总是在创建 uberjar 之前运行 lein clean。这是默认行为,但可以通过在project.clj 中设置:auto-clean false 来禁用。根据 Sample project.clj:

        ; By default Leiningen will run a clean before creating jars to prevent
        ; undeclared AOT from leaking to downstream consumers; this disables
        ; that behaviour.
        :auto-clean false
      

      我不明白为什么从脏构建开始会是一个好主意,这就是为什么我总是先手动运行lein clean(以防:auto-clean被禁用)。

      【讨论】:

      【解决方案3】:

      您需要在您的project.clj 中设置:jvm-opts。例如

      :jvm-opts ["-Xmx1g" "-server"] 
      

      另见this answer

      【讨论】:

      • 你不是说project.clj吗?我想他已经按照帖子中的描述尝试过。
      猜你喜欢
      • 1970-01-01
      • 2012-03-16
      • 2018-03-14
      • 2012-05-04
      • 2013-01-20
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 2020-06-25
      相关资源
      最近更新 更多