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

时间:2016-07-07 08:23:17

标签: ruby-on-rails capistrano jruby supervisord puma

我在jruby-9.0.4.0上运行了一个Rails应用程序,并使用Puma作为Web服务器。

我正在尝试增加puma的内存限制;当前标志为-Xmx500m -Xss2048k。我向_JAVA_OPTIONS=-Xss4096k -Xmx2048m添加了env,并且所有jruby进程都使用了它,例如rake assets:precompile,但puma实例本身没有。

capistrano追踪的一部分

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

的输出
  

RBENV_ROOT =的/ usr /本地/ rbenvprevious = NUPSTART_JOB = rcPATH = /虚设/生产/共享/束/的jruby / 2.2.0 / bin中:/usr/local/rbenv/versions/jruby-9.0.4.0/bin:的/ usr /本地/ rbenv /的libexec:在/ usr / local / sbin中:在/ usr / local / bin中:/ sbin目录:/ bin中:/ usr / sbin目录:在/ usr / binPWD = /虚设/生产/释放/ 20160707133222RBENV_DIR = /虚设/production/releases/20160707133222SUPERVISOR_SERVER_URL=unix:///var/run/supervisor.sockUPSTART_EVENTS=runlevelRUNLEVEL=2NLSPATH=/usr/dt/lib/nls/msg/%L/%N.catSUPERVISOR_PROCESS_NAME=dummyprocessSUPERVISOR_ENABLED=1XFILESEARCHPATH=/usr/ DT /默认应用程序/%L / DtSHLVL = 0UPSTART_INSTANCE = PREVLEVEL = NRBENV_VERSION = JRuby的9.0.4.0RBENV_HOOK_PATH =:在/ usr /本地/ rbenv / rbenv.d:/usr/local/etc/rbenv.d:在/ etc / rbenv.d:/usr/lib/rbenv/hooksrunlevel=2SUPERVISOR_GROUP_NAME=dummyprocessTERM=linuxRUBYOPT=-rbundler/setupRUBYLIB=/usr/local/rbenv/versions/jruby-9.0.4.0/lib/ruby/gems/shared/gems/bundler -1.11.2 / libroot

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

如何让puma实例同时选择Java选项?

2 个答案:

答案 0 :(得分:2)

正如this blog post中提到的,您可以将JVM选项放在JRUBY_OPTS环境变量中。

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

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

您也可以尝试通过设置JAVA_OPTS环境变量来直接配置JVM:

export JAVA_OPTS="-Xss4096k -Xmx2048m"

还要检查puma守护程序的启动方式

cat /proc/<pid>/environ

您的环境未传播到Puma守护程序。你需要了解Puma是如何开始的。它可以是init.d serviceupstart service

更新:

您似乎可以使用rbenv-vars设置环境。

使用以下

在Rails项目中创建.rbenv-vars文件
JAVA_OPTS='-Xss4096k -Xmx2048m'

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

答案 1 :(得分:0)

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

  

的JRuby

     

像Puma这样的JRuby服务器可以在不需要的情况下充分利用并发性   用于多个过程。但是,您需要调整金额   分配给JVM的内存,具体取决于dyno类型。红宝石   buildpack定义了合理的默认值,可以被覆盖   设置JAVA_OPTS或JRUBY_OPTS。