代码之家  ›  专栏  ›  技术社区  ›  Oss

如何将Java选项传递给Puma守护程序?

  •  3
  • Oss  · 技术社区  · 8 年前

    我有一个Rails应用程序正在运行 jruby-9.0.4.0 并使用Puma作为web服务器。

    我正在尝试增加的内存限制 puma ; 当前标志为 -Xmx500m -Xss2048k 。我添加了 _JAVA_OPTIONS=-Xss4096k -Xmx2048m 到我的 env 以及所有 jruby 流程像这样使用它 rake assets:precompile 例如,但是 彪马 实例本身并没有。

    部分毛细管痕迹

    DEBUG [0aec947c] Command: cd 
    /dummy/production/releases/20160707071111 && ( 
    export RBENV_ROOT="/usr/local/rbenv" RBENV_VERSION="jruby-9.0.4.0" 
    RAILS_ENV="production" ; /usr/local/rbenv/bin/rbenv exec bundle exec 
    rake assets:precompile )
    
    DEBUG [0aec947c]    Picked up _JAVA_OPTIONS: -Xss4096k -Xmx2048m
    

    配置/puma.rb

    # Min and Max threads per worker
    threads 8, 512
    
    # Default to production
    rails_env = ENV['RAILS_ENV'] || 'production'
    environment rails_env
    
    app_dir = "/dummy/#{rails_env}/current"
    
    # Set up socket location
    bind "tcp://localhost:3000"
    
    # Logging
    stdout_redirect "#{app_dir}/log/puma.stdout.log", "#{app_dir}/log/puma.stderr.log", true
    
    # Set master PID and state locations
    pidfile "#{app_dir}/pids/puma.pid"
    state_path "#{app_dir}/pids/puma.state"
    activate_control_app
    

    ENV变量

    JAVA_OPTS=-Xss4096k -Xmx2048m
    _JAVA_OPTIONS=-Xss4096k -Xmx2048m
    JAVA_HOME=/usr/lib/jvm/java-7-oracle-amd64
    

    的输出 cat /proc/<pid>/environ

    机器是一个8核处理器,内存为24GB。

    我怎么能让 彪马 实例也会拾取 Java 选项?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Oss    8 年前

    this blog post ,可以将JVM选项放入 JRUBY_OPTS 环境变量。

    在您的情况下,可以在启动Puma守护程序之前设置变量:

    export JRUBY_OPTS="-J-Xss4096k -J-Xmx2048m"
    

    您也可以通过设置 JAVA_OPTS 环境变量:

    export JAVA_OPTS="-Xss4096k -Xmx2048m"
    

    同时检查 puma 守护程序已启动

    cat /proc/<pid>/environ
    

    您的环境不会传播到Puma守护程序。你需要了解彪马是如何开始的。它可能是作为 init.d service 或一个 upstart service .

    更新:

    看来你可以用 rbenv-vars .

    创建 .rbenv-vars Rails项目中包含以下内容的文件

    JAVA_OPTS='-Xss4096k -Xmx2048m'
    

    然后,您的环境应该传播到 彪马 守护程序。

        2
  •  0
  •   Reenactor Rob    8 年前

    https://devcenter.heroku.com/articles/optimizing-dyno-usage#basic-methodology-for-optimizing-memory

    JRuby公司

    像Puma这样的JRuby服务器可以很好地利用并发性,而无需 用于多个进程。但是,您需要调整 分配给JVM的内存,具体取决于dyno类型。红宝石 buildpack定义了合理的默认值,可以由 设置JAVA_OPTS或JRUBY_OPTS。