Posts mit dem Label trinidad werden angezeigt. Alle Posts anzeigen
Posts mit dem Label trinidad werden angezeigt. Alle Posts anzeigen

Montag, 15. Oktober 2012

JRuby auf dem Raspberry Pi: Webserver-Performance

Neulich habe ich mir mehrere Raspberry-Pi-Rechner zugelegt und probiere verschieden Sachen damit aus. Der Raspberry Pi ist ein kleiner, billiger (etwa 40€) Einplatinenrechner mit folgender Ausstattung: ARM-CPU, 256MB RAM, Ethernet, schnelle Grafik mit Debian Linux. Zielgruppe sind eigentlich Schüler, die damit programmieren lernen sollen.

Die Kiste lässt sich auch als Webserver benutzen, dazu habe ich mit Sinatra unter MRI-Ruby und PostgreSQL einige Performancetests durchgeführt. Die gleiche Anwendung habe ich nun auch unter JRuby (statt MRI Ruby) getestet.

Installierte Software:

  • Soft-Float Debian wheezy (nur mit dem Soft-Float-ABI läuft Oracles Java7) 
  • Java 7 JDK für ARM
  • JRuby 1.7.0RC2
  • Trinidad-Webserver (Tomcat mit Rack-Interface)
Die Installation von Java 7 JDK und JRuby habe ich hier beschrieben

Test mit Apache Bench (ab), 500 requests, keine Concurrency.

1. Baseline: Ergebnis für MRI-Ruby, siehe auch www.µc.net/2012/10/raspberry-pi-als-webserver-mit.html


Requests per second:    4.91 [#/sec] (mean)
Time per request:       203.817 [ms] (mean)
Time per request:       203.817 [ms] (mean, across all concurrent requests)


2. Ergebnis für JRuby mit Trindad (keine Concurrency) nach Aufwärmen, der erste Request dauerte über 10 Sekunden

Start des Servers mit jruby -S app.rb -s Trinidad

Requests per second:    3.03 [#/sec] (mean)
Time per request:       329.990 [ms] (mean)
Time per request:       329.990 [ms] (mean, across all concurrent requests)



3. Ergebnis für JRuby mit Trindad (Concurrency 10)

Requests per second:    3.01 [#/sec] (mean)
Time per request:       3323.769 [ms] (mean)
Time per request:       332.377 [ms] (mean, across all concurrent requests)
Transfer rate:          3.81 [Kbytes/sec] received


Unter JRuby war der Speicherverbrauch wesentlich höher als unter MRI-Ruby, es waren nur noch etwa 20MB RAM frei (unter MRI etwa 90MB).

Verhalten mit invokedynamic

Start mit "jruby -Xcompile.invokedynamic=true -S app.rb -s Trinidad"

Hier gibt es eine Exception beim Server-Start,
 file:/home/pi/jruby-1.7.0.RC2/lib/ruby/gems/shared/gems/jruby-rack-1.1.10/lib/jruby-rack-1.1.10.jar!/rack/handler/servlet.rb:22:in `call'

es kommen keine sinnvollen Ergebnisse zurück :-(

Fazit für JRuby auf dem Raspberry Pi

JRuby ist keine so gute Wahl für den Raspberry Pi und diesen Use Case: die Performance und der Speicherverbrauch sind schlechter als unter MRI-Ruby. Anders sieht es aus, wenn man Java-Libraries benutzen will.

Links

Donnerstag, 26. Juli 2012

Trinidad 1.4.0 erschienen (JRuby/Rails in Tomcat)

Trinidad 1.4.0 ist erschienen und liegt zum Download bereit.Mit Trinidad kann man sehr einfach JRuby/Rails-Applikationen in einem Tomcat-Container in einer Java-Umgebung deployen. Das geht auch "in der Cloud" auf Heroku. Hierzu hat Joe Kutner eine Anleitung geschrieben.

Samstag, 21. Juli 2012

Buch "Deploying with JRuby" erschienen

Joe Kutner schreibt, daß sein Buch Deploying with JRuby nun als gedrucktes Buch veröffentlicht ist. Auf
http://pragprog.com/book/jkdepj/deploying-with-jruby kann man es bestellen, es steht zwar noch der 15.8. als  Veröffentlichungsdatum dran, aber ich gehe mal davon aus, daß der Autor recht hat.
Mit mehreren Kapiteln geht das Buch auf Deployment in Trinidad und TorqueBox ein und auch der Umgang mit Jenkins (Continous Integration Server) hat ein eigenes Kapitel. Das Buch ist auch als PDF erhältlich. Hört sich auf jeden Fall sehr spannend an.

Freitag, 13. April 2012

Benchmarks

Carl Hörberg hat einen JRuby Application Server Benchmark durchgeführt und die Ergebnisse in seinem Blog veröffentlicht. Trinidad ist am schnellsten, dann kommen Ouma und Mizuna dicht auf. Als Referenz nahm er noch die MRI-Server Thin und Unicorn. Unicorn ist noch ein bischen schneller als die JRuby-Server, Thin ist abgeschlagen. Sehr interessant..



Dienstag, 10. April 2012

Mehrere Anwendungen in einem Webserver mit Trinidad

Joe Kutner zeigt auf dem Jruby-Blog un einer Schritt-für-Schitt-Anleitung wie man mehrere Anwendungen in einem Apache-Tomcat-Container startet. Er benutzt dazu Trinidad, ein light-weight JRuby Webserver für Rails- und Rack-Applikationen.  Joe ist Autor des Buches "Deploying with JRuby". Er wird auf der JRuby-Conf einen Vortrag dazu halten.