2016-07-07 11 views
3

私はjruby-9.0.4.0で実行中のRailsアプリケーションを持っていて、WebサーバーとしてPumaを使用しています。PumaデーモンにJavaオプションを渡すには?

pumaのメモリ制限を引き上げようとしています。現在のフラグは-Xmx500m -Xss2048kです。私は_JAVA_OPTIONS=-Xss4096k -Xmx2048mを私のenvに加え、すべてのjrubyプロセスはrake assets:precompileのようにそれを使用しますが、pumaインスタンス自体はそうではありません。カピストラーノトレースの

パート

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 = /ダミー/生産/共有/バンドル/ JRubyの/ 2.2.0は、/ binに:は/ usr/local/rbenv /バージョン//bin /:/ usr/local/sbin:/ usr/local/bin /:/ bin /:/ usr/bin/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=2SUP ERVISOR_GROUP_NAME = dummyprocessTERM = linuxRUBYOPT = -rbundler/setupRUBYLIB =は/ usr/local/rbenv /バージョン/ JRubyの-9.0.4.0/libに/ルビー/宝石/共有/宝石/バンドラ-1.11.2 /リンクフォルダ

マシン24コアのRAMを搭載した8コアです。

pumaインスタンスでもJavaオプションを取得させるにはどうすればよいですか。

答えて

2

this blog postに記載されているように、JVMオプションは環境変数JRUBY_OPTSに入れることができます。あなたのケースでは

、あなたはプーマデーモンを起動する前に変数を設定することもできます

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

あなたはまた、JAVA_OPTS環境変数を設定することで、直接JVMを設定してみてください可能性があります

export JAVA_OPTS="-Xss4096k -Xmx2048m" 

また、どのように確認してくださいpumaデーモンが起動しました

cat /proc/<pid>/environ 

環境はPumaデーモンに伝播されません。あなたはプーマがどのように始まっているかを知る必要があります。それはinit.d serviceまたはupstart serviceのようになります。

更新:

あなたがrbenv-varsでご使用の環境を設定することができそうです。

pumaデーモンに伝播する必要があり、次の

JAVA_OPTS='-Xss4096k -Xmx2048m' 

そして、自分の環境でお使いのRailsプロジェクトで.rbenv-varsファイルを作成します。

+0

私の環境ではすでにこれらの変数を持っていますが、Pumaデーモンはそれらを選択していないようです。それはそれ自身のフラグで起動するので、他のすべての変数は無視されます。私は私のenvを追加する質問を更新します。しかし、ありがとう。 –

+0

Pumaデーモンの起動方法は?プーマプロセスの実際の環境は何ですか? 'cat/proc//environ'を実行すると印刷できます。ここで' 'はプーマデーモンのプロセスIDです。 –

+0

コメントに長すぎるため、質問に追加しました。 –

0

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

JRubyの

はプーマのようなJRubyのサーバーは、複数のプロセスを必要とせずに 同時実行を有効に利用すること。ただし、dynoのタイプに応じて、 のメモリをJVMに割り当てる必要があります。 Ruby ビルドパックでは、適切なデフォルトが定義されています。これは、 によって上書きされ、JAVA_OPTSまたはJRUBY_OPTSのいずれかに設定されます。

+0

はい '_JAVA_OPTIONS'は、実行中のすべての' java'プロセスで使用する必要があります。 argsに 'JAVA_OPTS'を指定する必要があります。最初のものは、 'puma'デーモンではなく、展開中に実行されるすべての' rake'タスクによって捕捉されます。 –

関連する問題