我在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
选项?
答案 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 service或upstart 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。