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

我正在尝试增加 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 

环境变量

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选项?

请您参考如下方法:

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 守护程序。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!