Tomcat Performance Tuning

Um die Performance seines eigenen Tomat Servers zu steigern sollte man sowohl an den JVM Optionen feilen, als auch an der Log Konfiguration.

Generell sollte man dem Tomcat Prozess ausreichend Speicher geben. Dabei haben sich, nach meiner Erfahrung, z.B. folgende Parameter bewährt.

JAVA_OPTS="-Xms1024m -Xmx1024m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"

Kurz zur Erklärung:

  • Xms ist die initiale Größe des Heap Speichers. Die eingestellte Speichergröße ist natürlich von dem verwendeten OS abhängig.
  • Xmx ist die maximale Größe des Heap Speichers. Dieser Wert sollte, laut offizieller Empfehlung von Oracle, dem des Xms entsprechen, damit die JVM schneller starten kann.
  • UseConcMarkSweepGC ist der sogenannte “concurrent low pause collector”. Dieser Garabage Collector sollte dann verwendet werden, wenn es sich um einen Webserver handelt, der auf einem MultiCore OS läuft. Der Standard GC einer JVM ist nämlich der “serial garbage collector”, welcher den verbrauchten Speicher seriell mit nur einem Core freigibt.

Darüber hinaus kann man am Tomcat Connector selbst noch die ein oder andere Schraube drehen. Folgende Auflistung soll einen kurzen Hinweis darauf geben:

  • maxThreads: Anzahl der maximalen HTTP Connector Threads.
  • maxSpareThreads: Maximale Anzahl der Threads, die immer existieren, auch wenn sie nichts zu tun haben. (Default: 50)
  • minSpareThreads: Minimale Anzahl der Thread, die immer existieren sollen. (Default: 4)
  • tcpNoDelay: Falls true, dann wird TCP_NO_DELAY für network sockets eingeschaltet. In diesem Falle werden kleine TCP Pakete nicht mit anderen zusammengelegt und versendet, sondern sofort verschickt.
  • maxKeepAliveRequest: Anzahl der HTTP Verbindungen, die das keep-alive Flag nutzen dürfen. (Default: 100)
  • socketBuffer: Bytegröße des Output Buffers. (Default: 9000)
  • enableLookups: wenn false, dann werden DNS Lookups für request.getRemoteHost() abgeschalten.

Beispiel:



Logging

Wenn mehrere Threads versuchen parallel viel in Logs zu schreiben, kommt es öfters zu Locks. In diesem Falle sollte man den “normalen Logger” gegen einen asynchronen austauschen. Dadurch werden die Protokolle erst in einen Buffer abgelegt und dann asynchron von Zeit zu Zeit geschrieben.

Um den asynchronen Logger einzustellen, muss die log4j.properties Datei in eine log4j.xml umgeschrieben werden.

Beispiel:





        

	  
        

        



          

          
        

        
  	  
          
	

        
  	  
          
	

        
  	  
          
	

        
  	  
          
	

        
  	  
          
	

        
  	  
          
	

        

          
        


Diese Einstelllungen sind allerdings noch nicht alles. Wer einen fundierten Einblick in die Möglichkeiten von TOMCAT erhalten will, dem empfehle ich das Buch “Professional Apache Tomcat“.

Posted in Java | Tagged , | Leave a comment

Gaming 2.0

Heute morgen erhielt ich eine E-Mail von Gaiki mit der Ankündigung, daß endlich ein Showcase online wäre. Gaiki? Showcase? WTF? Beinahe wäre die E-Mail sofort in meinem Papierkorb verschwunden, aber dann fiel es mir doch wieder ein. Gaiki ist eine Platform, die es Spielepublishern ermöglicht ihre Spiele zum Endanwender zu streamen. Damit sollen die Zeiten von Windows und potenter Hardware endgültig gezählt sein.

Nun gut, ich hatte im Vorfeld immer mal wieder darüber gelesen, allerdings war ich nie in der Lage das Ganze auch mal auszuprobieren. Nun ja, bis heute zumindest. Also schnell mal die Showcase Site von Gaiki angeklickt und siehe da, dort gibt es die ein oder andere Hightech Demo, wie z.B. Crsysis 2.

Ein Klick auf das Cover fordert einen noch schnell dazu auf den Java Client von Gaiki zu installieren und dann ging es auch schon los und ich muss wirklich sagen ich war BEGEISTERT! Nicht nur, dasß ich Crysis 2 unter LINUX ausprobieren konnte, nein, die Grafik war ebenfalls der Hammer! Ein Blick ins Optionsmenü bestätigte meinen persönlichen Eindruck. Maximale Detailstufe bei einer Auflösung von 1600 x 1200. Der Hammer! Latenzprobleme beim spielen? Fehlanzeige! Sollte sich dieser erste Eindruck in nächster Zeit bestätigen, dann muss ich wirklich ernsthaft darüber nachdenken, warum ich eigentlich noch eine potente Garfikkarte mein Eigen nenne???

In diesem Sinne Happy Gaming und en guten Rutsch!

Posted in Fun | Tagged | Leave a comment

Websockets in JSF 2.0

HTML5 rückt immer näher und die Unterstützung auf Endgeräten wird allmählich marktreif. Höchste Zeit sich einmal mit JSF 2.0 und Websockets auseinanderzusetzen. Das alles wird einem schön in einer JAX Session näher gebracht.

Building next-generation Web Apps with WebSocket and HTML5 from JAX TV on Vimeo.

Posted in Architektur, Java, Webdesign | Tagged , | Leave a comment

Grails UI, gui:dataTable und i18n

Vor kurzem habe ich mich mit Grails beschäftigt. Eigentlich eine ziemlich nettes Framework, mit dem man schnell einen Prototyp programmieren kann. Für meinen Geschmack war die Unterstützung für Rich UI allerdings etwas dürftig, doch das ist kein Problem, denn in diese Lücke springen in Grails die sogenannten Plugins.

In meinem Fall habe ich mich für das Grails-UI Plugin entschieden. Dieses Plugin bietet eine schöne Integration von YUI und YUI wiederum bietet ein umfangreiches Set an Rich UI Komponenten.

Das Plugin war schnell installiert und die Integration in Grails war auch relativ leicht umzusetzen. Vor allem das Tag <gui:dataTable> kam bei mir stark zum Einsatz. Irgendwann allerdings kam ich zu dem Punkt, wo ich mich mit Internationalisierung auseinandersetzen musste und dieses Problem war leider nur sehr dürftig beschrieben. Aus diesem Grund will ich heute kurz aufzeigen was man hierfür alles tun muss.

Continue reading

Posted in Java, JavaScript | Tagged , , , , , | Leave a comment

Maven Tutorials

Da ich in letzter Zeit mich verstärkt mit dem Thema Android Programmierung beschäftige möchte ich euch kurz auf eine Seite aufmerksam machen, die wirklich gut geschrieben ist.

Es handelt sich hierbei um den Blog von Lars Vogel und hier hat es mir vor allem die Android Tutorials Seite schwer angetan. Ein Blick lohnt sich in jedem Fall!

Posted in Android | Leave a comment

Maven, Spring und STS

Durch Zufall bin ich heute im Spring Blog auf einen guten Artikel gestoßen, der sich mit dem Problem von STS (2.8), M2E (1.0) und Android beschäftigt. Für all diejenigen, die nun wissen was ich meine, rate ich dringend diesem Eintrag zu lesen. Für alle anderen, die ihr Android Project mit Hilfe von Maven, Spring und STS bauen wollen, empfehle ich zumindest einen Blick darauf zu werfen. Mir hat es endlich geholfen meine Build Probleme in den Griff zu bekommen.

Los gehts!

Und wenn wir schon beim Thema Android Entwicklung sind. Wenn euch unter dem Stichwort Android Annotations nichts einfällt, dann werft unbedingt auch ein Blick hierauf. Gerade am Anfang erleichtert es einem die App Entwicklung enorm!

Posted in Android, Architektur, Eclipse, Java | Tagged , , , , | Leave a comment

JPA Optimierungen

Da ich im Allgemeinen ein großer Fan von JPA bin, und überdies bei meinen privaten Projekten gerne Spring Data einsetze, ist es für mich unabdingbar mich auch näher mit dessen Optimierung zu beschäftigen. Nichts ist schlimmer als wenn man ein schönes OR-Mapping mit entsprechenden Repositories aufweisen kann, die zu Grunde liegende DB Schicht allerdings eine schlechte Performance aufweist.

Also tut euch und dem DB Admin einen Gefallen und werft einen kurzen Blick auf folgendes Video. Schaden kann es nicht ;)

Optimierung von JPA-Anwendungen from JAX TV on Vimeo.

Posted in Architektur, Java | Tagged , , | Leave a comment

Apache 2 Header Bug führt zum System Stillstand

Leider musste ich heute auf heise.de einen ziemlich beunruhigend Artikel über den apache 2 lesen. Momentan gibt es einen Bug im Apache, der das komplette System zum Stillstand bringt.

Nachzulesen hier:
http://www.heise.de/newsticker/meldung/Tool-bringt-Apache-Webserver-zum-Stillstand-1329986.html

Da ich ebenfalls davon betroffen bin, hab ich gleich mal ein paar Foren und Blogs nach einer Lösung durchsucht, um letztendlich auf folgende header Modul Lösung zu stoßen.

in /etc/apache2/conf.d eine Datei header.conf mit folgendem Inhalt anlegen:

SetEnvIf Range (,.*?){5,} bad-range=1
RequestHeader unset Range env=bad-range

Anschließend muss man, falls nicht aktiv, noch das headers Modul des Apaches aktivieren.

a2enmod headers
/etc/init.d/apache2 restart

Damit sollte man vor diesem Bug sicher sein, zumindest wenn man Root Zugriff hat. Wir immer keine Garantie oder Gewährleistung von mir. Falls ihr was besseres habt immer her damit.

Posted in Sicherheit | Tagged , , , | 1 Comment

Java 7 Video Tutorials

Nach einer gefühlten Ewigkeit ist es nun soweit. Java erscheint in der Version 7. Zumindest hoffe ich das wenn wir endlich den 28 Juli haben.

Umfangreiche Änderungen oder neue Killer Features sucht man leider vergeblich. Allerdings gibt es die ein oder andere Verbesserung, die einem die tägliche Entwicklerarbeit erleichtert. Derjenige, der sich noch nicht mit den neuen Features von Java 7 beschäftigt hat, empfehle ich die zugeschnitten Videos des Java Launch Events. Sie bieten eine kurze Einführung und Übersicht über die neuen Features, wie z.B.:

  • Strings in switch
  • Multi-Catch
  • try-with-resources
  • Varargs Warnungen
  • Diamond Operatoren

Posted in Java | Tagged , , | Leave a comment

Web Application und Webserver Security

In letzter Zeit habe ich mich mit der Sicherheit von Webapplikationen beschäftigt. Eine erste Adresse ist das Open Web Application Security Project, kurz OWASP. Die OWASP veröffentlicht pro Jahr immer eine TOP 10 Liste der meisten Gefahren für Webentwickler. In dieser Liste findet man neben den üblichen Verdächtigen wie SQL-Injection, CSRF und XSS auch eher vernachlässigte Themen wie z.B. “Unvalidated Redirects and Forwards”.
Jeder Sicherheitsaspekt wird hierbei kurz erläutert. Neben Hinweisen, um überhaupt festzustellen ob die eigene Webapplikation anfällig dafür ist, werden auch noch Lösungswege aufgezeichnet. Doch nicht nur die Entwicklung von Webapplikationen wird durchleuchtet. Neben dieser TOP 10 Liste werden noch andere Themenbereiche angesprochen. Dabei hat mir der Artikel “Securing Tomcat” sehr gut gefallen. Der Artikel geht dabei auf die Sicherheitseinstellungen des Servers ein und liefert zahlreiche Anleitungen zur Absicherung. Jeder der einen eigenen Tomcat betreibt sollte diesen Artikel gelesen haben.

Posted in Sicherheit | Tagged , , , , | 1 Comment