# Programm stürzt ab



## Ryukotsu (4. Sep 2012)

Hallo Freunde,

ich hab einen ganz einfachen SOAP-Webservice geschrieben. Die Klasse schaut so aus:


```
public static void main(String[] args) {

	    Importer importer = new Importer();
	    Endpoint endpoint =
	    Endpoint.publish(Properties.ENDPOINT , importer);
			    
	}
```

Ich verpackt mein Projekt immer als jar und schmeiß es dann auf einen Linux Server und starte die Applikation dann mit java -jar importer.jar &.

Der Service läuft dann unter servername:8984/importer?wsdl 

Das hat bis jetzt super auf meinem Test-Server funktioniert. Aber in der Live-Umgebung (anderer Server) stürtzt das Programm regelmäßig ab. Ich fang so ziemlich alle Errors per try catch ab und mache logging mit log4j. Allerdings sind die Logs komplett leer und ich hab keine Ahnung was diese Abstürtze bewirkt. Oder ist das ein Thema für den Systemadministrator?? Bitte HIlfe


Gruß Ryu


----------



## nillehammer (4. Sep 2012)

Man kann nur spekulieren, warum, weil wir Die Umgebung nicht kennnen. Unter dem Vorbehalt meine Antwortversuche:

Trotz try-catch und Logging scheinen Dir in der Produktionsumgebung Ereignisse verloren zu gehen. Zwei geratene, aber mögliche und durchaus wahrscheinliche Ursachen:
- In Produktion steht der Loglevel meist auf WARN oder höher. Wenn Du Deine Ereignisse als INFO oder gar DEBUG loggst, werden sie nicht ausgegeben.
- In Produktion hast Du nicht die gleichen Schreibrechte in Verzeichnissen wie auf Deinem Entwicklungsrechner

Ursachen dafür, dass das Programm nicht läuft, könnten sein:
- Server-Port bereits belegt
- Anwendung darf auf Grund von Sicherheitseinstellungen des OS keinen Serverport aufmachen


----------



## trolololololol (5. Sep 2012)

es ist bekannt das gerade bei vServern gerne virtuozzo eingesetz wird was wohl viele foren-posts zu folge probleme mit java machen solll ..

wäre also mal interessant auf was für nem system dein produktiver server läuft ...


----------



## Ryukotsu (5. Sep 2012)

Also wir virtualisieren unsere Server mit VMware vSphere (Esxi). Als Betriebssytem benutzen wir Centos. Soweit ich weiß sollte kein Programm den Port belegen, hab das schon nachgeprüft. Es ist ja auch komisch das der Webservice eine zeitlang scheinbar läuft und dann auf einmal nicht mehr ansprechbar ist. Log-Level ist auch ok und Schreibrechte sind da. Das komische ist ja das der Service super läuft und soweit ich jetzt weiß ist der Service einfach nach einer gewissen Zeit nicht mehr ansprechbar und wenn ich nachschaue mit ps faux | grep java ist der Prozess nicht mehr da.

Bräuchte nur irgendwie hinweise wo man nach Fehlern suchen müsste. Bin leider noch relativ unerfahren. Also ich denke mal die Programmierung ist soweit ok ist und wenn es einen Fehler im Programm geben würde, würde das im Log stehen. Und was ich ansonsten machen könnte kenne ich mich leider gar nicht mehr aus.

Vielleicht noch hilfreich zu erwähnen das ich OpenJDK 64-Bit installiert hab.


Gruß Ryu


----------



## trolololololol (5. Sep 2012)

versuchs mal mit der oracle variante ... glaube zwar weniger dran das es das problem löst aber ein versuch ist es wert ...

und das keine log-einträge vorhanden sind die auf den fehler hinweise ist auch merkwürdig ... weil einfach so abstürzen ohne was zu hinterlassen tut ein programm eigentlich nur wenn man sowas wie leere catch-blöcke hat ... also das exception-handling vernachlässigt hat ...


----------



## Ryukotsu (6. Sep 2012)

also die java version würde ich lieber erst dann neu intallieren wenn es sonst wirklich nichts mehr gibt was man tun kann.

Das Exception catching schut bei mir so aus momentan:

private Logger logger = Logger.getRootLogger();

		try {

			Importer = new Importer();

			Importer.startImport(merchantList);

		} catch (Throwable t){

			this.logger.error("[webservice.Importer]", t);		
		}

Hab das momentan mit Absicht so um wirklich ALLES abzufangen. Also ich bin echt am verzweifeln. CPU RAM ist alles im Überfluss vorhanden.

Kann keiner weiterhelfen?


----------



## trolololololol (6. Sep 2012)

also auf Throwable catched man schon mal überhaupt nicht ...
es würde sonst keinen sinn machen das es eine unterscheidung zwischen Exceptions und Errors gibt ...

Errors sind grundsätzlich dazu da einen schweren systemfehler anzuzeigen und die vm gewaltsam zum anhalten zu zwingen ... diese treten in der regel auch nicht auf und müssen daher auch gar nicht gefangen werden (selbst OutOfMemoryError sollte man nicht fangen (wie man es von minecraft kennt) sondern lieber die VM damit "abstürzen" lassen) ...

und bei Exceptions gibt es ja auch noch mal die unterteilung in checked und unchecked exceptions ...
unchecked sind RuntimeException und alles was davon abgeleitet ist ... für das auftreten sind in der regel programmierfehler verantwortlich und sollten bei richtiger programmierung auch niemals auftreten ... wenn man aber bewusst auf diese prüft ist das sog. "missbrauch des exception-handling" ...


und anstatt dich auf den Logger zu verlassen der zum zeitpunkt seines calls vielleicht schon nichts mehr ins log schreiben kann dachte ich bei "exception-handling" eingentlich zumindest an diese zeile :

```
Throwable.printStackTrace()
```
die kann man zur not mit ner pipe noch in n extra file umleiten ...


----------



## Ryukotsu (7. Sep 2012)

trolololololol danke erstmal für deine Hilfe. Ich werde das erstmal so umsetzen und schauen was dabei rauskommt. 

Letzte Nacht ist der Service übrigens nicht abgestürtzt. Der unterschied war, dass ich den Prozess mit

java -jar importer.jar 

und nicht mit

java -jar importer.jar &

gestartet hab. "java -jar importer.jar &" benutz ich damit der Prozess im Hintergrund läuft und wenn ich mich vom Server/Konsole auslogge weiterläuft. Und gestern wollte ich gleich auf der Konsole sehen wenn Fehler auftreten also habe ich den Prozess mit "java -jar importer.jar" gestartet und über Nacht laufen lassen (war über die Konsole die ganze Nacht eingeloggt). Kamen aber keine Errors und der Service war heute Morgen noch da. Vielleicht ist das ein Anhaltspunkt.

Gruß Ryu


----------



## Ryukotsu (13. Sep 2012)

Scheinbar war "java -jar importer.jar &" wirlich das problem. Habe das Programm jetzt mit "nohub java -jar importer.jar" gestartet und es scheint jetzt ohne Probleme zu laufen.


Gruß Ryu


----------



## Gast2 (13. Sep 2012)

Moin,

auch wenn Du den Fehler schon gefunden hast



Ryukotsu hat gesagt.:


> "java -jar importer.jar &" benutz ich damit der Prozess im Hintergrund läuft und wenn ich mich vom Server/Konsole auslogge weiterläuft.



das nette kleine & funktioniert nur solange Du angemeldet bist. Es blockiert Dir nicht die Konsole. Aber wenn Du Dich abmeldest, dann wird die Shell beendet auf der Du angemeldet warst. Damit werden aber auch alle Kinder dieser Shell beendet.

*screen* wäre was für dich

hand, mogel


----------

