2016-07-07 10 views
3

Ich habe eine Rails-Anwendung auf jruby-9.0.4.0 läuft und mit Puma als Webserver.Wie Übergeben von Java-Optionen an Puma-Daemon?

Ich versuche, die Speichergrenze von puma zu erhöhen; Die aktuellen Flags sind -Xmx500m -Xss2048k. Ich habe _JAVA_OPTIONS=-Xss4096k -Xmx2048m meiner env und alle jruby Prozesse verwenden Sie es wie rake assets:precompile zum Beispiel, aber die puma Instanz selbst nicht.

Teil Capistrano Spur

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 Variablen

JAVA_OPTS=-Xss4096k -Xmx2048m 
_JAVA_OPTIONS=-Xss4096k -Xmx2048m 
JAVA_HOME=/usr/lib/jvm/java-7-oracle-amd64 

Ausgabe von cat /proc/<pid>/environ

RBENV_ROOT =/usr/local/rbenvprevious NUPSTART_JOB = = = rcPATH/dummy/Produktion/shared/Bündel/jruby/2.2.0/bin:/usr/local/rbenv/Versionen/jruby-9.0.4.0/bin:/usr/local/rbenv/libexec:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binPWD =/dummy/Produktion/Freigaben/20160707133222RBENV_DIR =/Dummy/Produktion/Freigaben/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/lokal/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/versions/JRuby-9.0.4.0/lib/Rubin/Edelsteine ​​/ shared/Edelsteine ​​/ Bündler-1.11.2/libroot

Maschine ist ein 8-Core mit 24 GB RAM. Wie kann ich die puma Instanz auch die Java Optionen abholen lassen?

Antwort

2

Wie in this blog post erwähnt, können Sie die JVM-Optionen in JRUBY_OPTS Umgebungsvariable setzen.

In Ihrem Fall könnten Sie die Variable vor dem Start Puma-Daemon:

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

Sie auch die JVM versuchen kann, indem JAVA_OPTS Umgebungsvariable direkt konfigurieren:

export JAVA_OPTS="-Xss4096k -Xmx2048m" 

Prüfen Sie auch, wie die puma Daemon wird gestartet

Ihre Umgebung wird nicht an den PUMA-Daemon weitergegeben. Sie müssen herausfinden, wie Puma gestartet wird. Es kann als init.d service oder upstart service sein.

Update:

Es scheint, dass Sie Ihre Umgebung mit rbenv-vars einstellen.

erstellen .rbenv-vars Datei in Ihrem Rails-Projekt mit der folgenden

JAVA_OPTS='-Xss4096k -Xmx2048m' 

Ihrer Umgebung Dann zum puma Daemon propagiert werden soll.

+0

Ich habe diese Variablen bereits in meiner Umgebung, der Puma-Daemon scheint sie nicht aufzunehmen. Es startet mit eigenen Flags und ignoriert somit alle anderen Variablen. Ich werde die Frage aktualisieren, um mein env hinzuzufügen. Trotzdem danke. –

+0

Wie wird der Puma-Daemon gestartet? Wie ist die tatsächliche Umgebung des Puma-Prozesses? Sie können es drucken, indem Sie 'cat/proc//environ' ausführen, wobei' 'die Prozess-ID des Puma-Daemon ist. –

+0

Es wurde der Frage hinzugefügt, da es für einen Kommentar zu lang ist. –

0

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

JRuby

JRuby-Server wie Puma gut nutzen Gleichzeitigkeit ohne die Notwendigkeit für mehrere Prozesse. Sie werden jedoch die Menge an Speicher zu stimmen den JVM zugewiesen müssen, abhängig von dem Dyno-Typ. Der Rubin buildpack definiert sinnvolle Standardwerte, die von außer Kraft gesetzt werden kann, entweder JAVA_OPTS oder JRUBY_OPTS einstellen.

+0

Ja '_JAVA_OPTIONS' sollte von allen laufenden' java' Prozessen verwendet werden. 'JAVA_OPTS' sollte jedoch in den Argumenten angegeben werden. Die erste wird von allen "Rake" -Tasks erfasst, die während der Bereitstellung ausgeführt werden, nicht jedoch vom 'puma'-Daemon. –

Verwandte Themen