PSI-Probe – ein besserer Tomcat-Manager

Schnell mal eine Web-Anwendung im Tomcat deployen, sich einen Überblick über den Speicherverbrauch verschaffen oder einen Blick in die Log-Dateien werfen – mit PSI-Probe ist das bequem und einfach. PSI-Probe dient der Administration und Überwachung von Tomcat-Servern und bildet damit eine ausgezeichnete Alternative zu dem hauseigenen Tomcat-Manager.

Bei den zahlreichen Features sollte jeder Tomcat-Nutzer PSI-Probe mal ausprobiert haben:

  • einfache Installation als Web-Anwendung
  • Status von Web-Anwendungen anzeigen
  • deploy, start, stop, undeploy von Web-Anwendungen
  • Statistiken zu Sessions und Requests anzeigen
  • Log-Dateien sich live anzeigen lassen
  • System-Properties auflisten
  • Statistiken zu JVM und Garbage Collection
  • Statistiken zu CPU, Speicher, Datei-System
  • und vieles, vieles mehr …
Probe - Applications

Probe – Applications

Weiterlesen

Java-Webanwendung mit Tomcat auf Port 80 ausliefern

Ich arbeite ja ganz gerne mit der JiffyBox und der aktuellsten Ubuntu Langzeit-Support Version (Precise Pangolin – 12.04 LTS). Wenn man eine Java-Webanwendung mit Tomcat auf dem Standardport für Webserver (Port 80) bereitstellen möchte, gibt es dafür verschiedene Wege.

Die schnellste Möglichkeit könnte es sein, Tomcat per apt-get zu installieren und in der server.xml den Tomcat-Standardport von 8080 auf 80 zu ändern. Allerdings wird dann beim Starten des Servers ein Fehler auftreten. Schließlich werden Root-Rechte benötigt, um einen der ersten 1024 Ports zu reservieren:

Jan 22, 2013 11:53:51 PM org.apache.coyote.http11.Http11Protocol init
SEVERE: Error initializing endpoint
java.net.BindException: Permission denied <null>:80
        at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:549)
        at org.apache.coyote.http11.Http11Protocol.init(Http11Protocol.java:176)
        at org.apache.catalina.connector.Connector.initialize(Connector.java:1049)
        at org.apache.catalina.core.StandardService.initialize(StandardService.java:703)
        at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:838)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:538)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:562)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.net.BindException: Permission denied
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:353)
        at java.net.ServerSocket.bind(ServerSocket.java:336)
        at java.net.ServerSocket.<init>(ServerSocket.java:202)
        at java.net.ServerSocket.<init>(ServerSocket.java:158)
        at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:50)
        at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:538)
        ... 12 more
Jan 22, 2013 11:53:51 PM org.apache.catalina.core.StandardService initialize
SEVERE: Failed to initialize connector [Connector[HTTP/1.1-80]]
LifecycleException:  Protocol handler initialization failed: java.net.BindException: Permission denied <null>:80
        at org.apache.catalina.connector.Connector.initialize(Connector.java:1051)
        at org.apache.catalina.core.StandardService.initialize(StandardService.java:703)
        at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:838)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:538)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:562)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Jan 22, 2013 11:53:51 PM org.apache.catalina.startup.Catalina load

Natürlich gibt es viele Möglichkeiten, das Problem anzugehen. Hier jetzt eine dreckige und eine saubere Lösung:

  1. Schnell und unsicher (einfach dreckig): Eigenen Tomcat-Server installieren und als Root starten
  2. Aufwendiger und sicher (schöööön sauber): Standard Apache-Server und Tomcat installieren und per AJP (Apache JServ Protocol) miteinander verbinden

Weiterlesen

screen – Arbeiten mit mehreren virtuellen Terminalsessions

Das Werkzeug screen hilft immer weiter, wenn man innerhalb einer Terminal-Sitzung verschiedene Befehle parallel ausführen möchte. Dafür bietet screen mehrere virtuelle Terminalsessions. Die aktuelle Terminal-Sitzung kann man auch beenden und dann nach erneuter Anmeldung die Verbindung zu den vorhandenen screen-Sitzungen wieder aufnehmen.

Dafür muss man unter Ubuntu erst einmal screen installieren:

sudo apt-get install screen

Ein neue Sitzung startet man mit ‚screen -S meine_session‚ , löst sich von ihr mit ‚Strg+a-d‚ und verbindet sich mit dem Befehl ‚screen -r meine_session‚ wieder mit ihr:

# neue Session anlegen
screen -S meine_session
# hier jetzt mit der Session arbeiten
Strg+a-d
# wir haben uns von der Session gelöst und können uns auch ausloggen

# wir wollen die Arbeit wieder aufnehmen - welche Sessions gibt es?
screen -ls
# mit der ausgewählten Session verbinden
screen -r meine_session
# hier jetzt mit der Session weiterarbeiten

Innerhalb einer Session sind dann folgende Befehle nützlich:

Strg+a-?      # Hilfe anzeigen
Strg+a-c      # Weitere virtuelle Sitzung erstellen
Strg+a-Space  # Zur nächsten Sitzung wechseln 
Strg+a-0..9   # Zur angegebenen Sitzung wechseln 

Ach screen , du bist so ein schönes Programm 🙂

Locale-Fehler bei JiffyBox unter Ubuntu 10.4

Ich finde die JiffyBox von DomainFactory ja klasse (war auch Thema meines ersten Blogartikels). Damit kann man eben schnell einen kostengünstigen Server aufsetzen und einige Sachen ausprobieren. Falls dann etwas schief geht, wirft man die ganze Installation weg und startet mal eben einen neuen Server – alles innerhalb weniger Minuten.

Jetzt bin ich allerdings auf ein Problem gestoßen, das ich vor Monaten nach meiner Meinung nicht hatte. Ich möchte nämlich eigentlich einen neuen Server mit ‚Ubuntu 10.04 LTS 64Bit‘ (Lucid) und PostgreSQL aufsetzen. Das klappte nach einigen Warnungen nicht und letztlich lag es an fehlerhaften Locale-Einstellungen, wie es auch in diesem Link beschrieben wird. Hätte die angegebene Lösung sofort bei mir geklappt, wäre dieser Artikel wahrscheinlich nicht entstanden.

Um das Problem nachzustellen, muss man nicht gleich PostgreSQL installieren, sondern man kann auf dem frisch gestarteten System auch einfach mal einen neuen Benutzer anlegen: adduser myuser

root@j24664:~# adduser myuser
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Weiterlesen

JiffyBox mit Apache über neue Domain nutzen

Für ein Projekt benötige ich einen Ubuntu-Server mit Apache, der über eine Top-Level-Domain erreichbar sein soll. Normalerweise hätte ich den bei einem der üblichen Webhoster bestellt, aber ein Bekannter meinte: „Nimm dir doch lieber einen Cloud-Anbieter – wie Amazon. Damit bist du doch viel flexibler !“.  Also habe ich mal ein bisschen gesucht und bin auf die JiffyBox (CloudServer On Demand) von domainFACTORY gestoßen. Genau das Richtige für mich:

  • keine festen monatlichen Kosten, sondern bedarfsgerechte Abrechnungen
  • günstigstes Angebot mit 1 GB Arbeitsspeicher und 50 GB Festplatte für 0,02 Euro pro Stunde (weniger als 15 Euro pro Monat)
  • keine langfristigen Vertragsbindungen
  • einfaches Erstellen, Sichern, Duplizieren, Einfrieren und Löschen von JiffyBoxen
  • Datencenter in Deutschland – Amazon scheidet für mich aus datenschutzrechtlichen Gründen aus

Weiterlesen