ruby-on-rails - 如何将 Java 选项传递给 Puma 守护进程?

标签 ruby-on-rails capistrano jruby supervisord puma

我有一个运行在 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 守护程序。

关于ruby-on-rails - 如何将 Java 选项传递给 Puma 守护进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38240719/

相关文章:

ruby-on-rails - rails 方式 : Formatting Value Before Setting it in the Model?

ruby-on-rails - Rake 因 Capistrano 部署而失败

Ruby 中的 Java 兼容 REST 客户端

java - 在 jruby 中重写 java 方法时出现问题

ruby-on-rails - gmaps4rails 是否与地理编码器 gem 冲突?

ruby-on-rails - 是否可以使用 Rails 3 更改 MongoDB 中的默认时区?

ruby-on-rails - 在任何源中都找不到timers-1.1.0 (Bundler::GemNotFound)

linux - 使用 Capistrano 跨集群设置环境变量

ruby 鞋4 : how does Sample13 work?

arrays - 将数据库中现有的字符串字段类型转换为数组字段类型 | Rails + PostgreSQL