2016-07-07 5 views
3

У меня есть приложение Rails, работающее на jruby-9.0.4.0 и использующее Puma в качестве веб-сервера.Как передать Java-возможности демону 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 

конфигурации/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/бен:/USR/местные/rbenv/версии/JRuby-9.0.4.0/бен:/USR/местные/rbenv/libexec:/USR/местные/SBIN:/USR/местные/бен:/SBIN:/бен:/USR/SBIN:/USR/binPWD =/манекена/производство/выпуски/20160707133222RBENV_DIR =/манекена/производство/выпуски/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/дт/приложение-умолчанию /% L/DtSHLVL = 0UPSTART_INSTANCE = PREVLEVEL = NRBENV_VERSION = JRuby-9.0.4.0RBENV_HOOK_PATH =:/USR/местные/rbenv/rbenv.d:/USR/местные/и т.д. /rbenv.d:/etc/rbenv.d:/usr/lib/rbenv/hooksrunlevel=2SUP ERVISOR_GROUP_NAME = dummyprocessTERM = linuxRUBYOPT = -rbundler/setupRUBYLIB =/USR/местные/rbenv/версии/JRuby-9.0.4.0/Библиотека/рубин/драгоценные камни/общие/драгоценные камни/пакетирования-1.11.2/libroot

машина является 8-ядерным с 24 ГБ оперативной памяти.

Как я могу позволить экземпляру puma также выбрать опции Java?

ответ

2

Как упоминалось в this blog post, вы можете поместить параметры виртуальной машины Java в JRUBY_OPTS переменной окружения.

В вашем случае, вы можете установить переменную перед запуском Puma демона:

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

Вы также можете попробовать настройки виртуальной машины Java непосредственно путем установки переменной JAVA_OPTS среды:

export JAVA_OPTS="-Xss4096k -Xmx2048m" 

Также проверьте, как puma daemon запущен

cat /proc/<pid>/environ 

Ваша среда не распространяется на демон Puma. Вам нужно узнать, как начинается Puma. Он может быть как init.d service, так и upstart service.

Update:

Кажется, вы можете настроить свою среду с rbenv-vars.

Создать .rbenv-vars файл в проекте Rails со следующим

JAVA_OPTS='-Xss4096k -Xmx2048m' 

Тогда среды должна распространяться на puma демона.

+0

У меня уже есть эти переменные в моей среде, демон Puma, похоже, не забирает их. Он запускается со своими собственными флагами, поэтому игнорирует все другие переменные. Я обновлю вопрос, чтобы добавить свой env. Спасибо хоть. –

+0

Как запускается демон Puma? Какова реальная среда процесса Puma? Вы можете распечатать его, запустив 'cat/proc//environ', где' 'является идентификатором процесса для демона Puma. –

+0

Добавил его к вопросу, так как он слишком длинный для комментария. –

0

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

JRuby

JRuby серверы, такие как Puma хорошо использовать параллелизм без необходимости для нескольких процессов. Тем не менее, вам нужно будет настроить количество памяти , выделенное JVM, в зависимости от типа dyno. Ruby buildpack определяет чувствительные значения по умолчанию, которые можно переопределить , устанавливая JAVA_OPTS или JRUBY_OPTS.

+0

Да '_JAVA_OPTIONS' должно использоваться всеми работающими процессами' java'. 'JAVA_OPTS' должен быть указан в args. Первый захвачен всеми задачами 'rake', которые выполняются во время развертывания, но не демоном' puma'. –