如何将 Java 选项传递给 Puma 守护进程?
How to pass Java options to Puma daemon?
我在 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
config/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/local/rbenvprevious=NUPSTART_JOB=rcPATH=/dummy/production/shared/bundle/jruby/2.2.0/bin:/usr/local/rbenv/versions/jruby-9.0.4.0/bin:/usr/local/rbenv/libexec:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binPWD=/dummy/production/releases/20160707133222RBENV_DIR=/dummy/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/app-defaults/%L/DtSHLVL=0UPSTART_INSTANCE=PREVLEVEL=NRBENV_VERSION=jruby-9.0.4.0RBENV_HOOK_PATH=:/usr/local/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
选项?
https://devcenter.heroku.com/articles/optimizing-dyno-usage#basic-methodology-for-optimizing-memory
JRuby
JRuby servers like Puma make good use of concurrency without the need
for multiple processes. However, you will need to tune the amount of
memory allocated to the JVM, depending on the dyno type. The Ruby
buildpack defines sensible defaults, which can be overridden by
setting either JAVA_OPTS or JRUBY_OPTS.
如 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 service or an upstart service.
更新:
看来你可以用rbenv-vars设置你的环境。
使用以下
在您的 Rails 项目中创建一个 .rbenv-vars
文件
JAVA_OPTS='-Xss4096k -Xmx2048m'
然后您的环境应该传播到 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
config/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/local/rbenvprevious=NUPSTART_JOB=rcPATH=/dummy/production/shared/bundle/jruby/2.2.0/bin:/usr/local/rbenv/versions/jruby-9.0.4.0/bin:/usr/local/rbenv/libexec:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binPWD=/dummy/production/releases/20160707133222RBENV_DIR=/dummy/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/app-defaults/%L/DtSHLVL=0UPSTART_INSTANCE=PREVLEVEL=NRBENV_VERSION=jruby-9.0.4.0RBENV_HOOK_PATH=:/usr/local/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
选项?
https://devcenter.heroku.com/articles/optimizing-dyno-usage#basic-methodology-for-optimizing-memory
JRuby
JRuby servers like Puma make good use of concurrency without the need for multiple processes. However, you will need to tune the amount of memory allocated to the JVM, depending on the dyno type. The Ruby buildpack defines sensible defaults, which can be overridden by setting either JAVA_OPTS or JRUBY_OPTS.
如 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 service or an upstart service.
更新:
看来你可以用rbenv-vars设置你的环境。
使用以下
在您的 Rails 项目中创建一个.rbenv-vars
文件
JAVA_OPTS='-Xss4096k -Xmx2048m'
然后您的环境应该传播到 puma
守护程序。