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)
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 TrinidadRequests 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
- Raspberry Pi
- Raspberry Pi als Webserver mit PostgreSQL, Ruby und Sinatra
- JRuby läuft auf dem Raspberry Pi, jffi-Library wird benötigt
Keine Kommentare:
Kommentar veröffentlichen