# Java Programm als Dienst unter Linux Debian ausführen



## marcel_m (15. März 2008)

Hallo zusammen,

als Linux Neuling habe ich folgendes Problem:

Ich möchte auf einem Debian Server ein Java Programm als Dienst laufen lassen - also rund-um-die-uhr.

Könntetn Ihr mir bitte helfen, wie ich das per SSH regel?

Vielen Dank im Voraus!

Marcel


----------



## Navy (15. März 2008)

Generell unterscheidet Linux ersteinmal nicht zwischen Deamon- und anderen Prozessen, von daher kannst Du Dein Programm über die rc-Scripte beim Start laden lassen. Wichtig ist nur, daß /keine/ direkte Userinteraktion über das Terminal notwendig ist.

Fraglich ist in meinen Augen ob ein Daemon bzw. Dienst in Java geschrieben werden sollte, nicht jede Maschine hat Java installiert und Java an sich ist im Vergleich zu C auch sehr viel träger, langsamer und ressourcenhungriger.


----------



## marcel_m (15. März 2008)

Danke für deine Antwort!
Ja - zugegebener maßen - Java ist nicht gerade Ressourcenfreundlich.

Was ich aber genau suche ist ein Befehl, mit dem eine via SSH gestartetes Kommando auch nach dem die Shel geschlossen ist, weiterläuft.

Gruß Marcel


----------



## RedWing (15. März 2008)

Hallo,


marcel_m hat gesagt.:


> Was ich aber genau suche ist ein Befehl, mit dem eine via SSH gestartetes Kommando auch nach dem die Shel geschlossen ist, weiterläuft.
> 
> Gruß Marcel



versuchs doch mal mit nohup. Siehe

```
man nohup
```

Gruß,
RedWing


----------



## zerix (15. März 2008)

Navy hat gesagt.:
			
		

> Java an sich ist im Vergleich zu C auch sehr viel träger, langsamer


Da muss ich dich leider korregieren. 
Das war mal  so. Das hat sich aber schon lange geändert. Das was halt auch mehr an Speicherverbrauch da ist, ist die VM. Die braucht halt Speicher. 

MFG

Sascha


----------



## Navy (16. März 2008)

> Da muss ich dich leider korregieren.

Ich Dich auch. Es heißt "korrigieren". [SCNR] 

> Das war mal so. Das hat sich aber schon lange geändert. Das was halt auch mehr an
> Speicherverbrauch da ist, ist die VM. Die braucht halt Speicher.

Java ist im Vergleich zu [C|C++] bis zu 10 mal langsamer, da Java meistens nur im Bytecode vorliegt und noch von der VM interpretiert werden muß während äquivalente Programme "direkt" auf der Maschine laufen.

Es ist auch egal warum Java mehr Ressourcen verbraucht, Fakt ist allein der Umstand, dass es das tut. Das ist auch der Grund, warum unter Linux nur sehr wenige (ich kenne im Grunde überhaupt keines) Systemprogramme in Java geschrieben werden. Macht ja auch keinen Sinn, da Java nicht hardwarenah läuft und für ganz andere Zwecke konzeptioniert worden ist. Das heißt aber nicht, daß sowas nicht möglich wäre...


----------



## Dario Linsky (16. März 2008)

Hi,



> Da muss ich dich leider korregieren


ich schließe mich an:



> da Java *meistens* nur im Bytecode vorliegt und noch von der VM interpretiert werden muß



Das ist nicht nur meistens so, sondern immer.  

Von einer interpretierten Programmiersprache ist Java allerdings auch ziemlich weit entfernt. Der Sourcecode wird ja durchaus in eine Art von Maschinencode kompiliert, der lediglich auf einer virtuellen CPU (in Form der VM) ausgeführt wird.

Und weil Java bis zu 10 Mal langsamer ist als C oder C++ und nicht als Daemon laufen sollte, wird es auch überhaupt nicht im Webserver-Bereich eingesetzt. 

*scnr*, D.


----------



## zerix (16. März 2008)

Da irrst du dich leider. Auch wenn es ByteCode ist. Schon mal was vom Just in Time-Compiler gehört?

Hier mal die allgemeine Definition
http://de.wikipedia.org/wiki/JIT-Compiler

Java ist in den meisten Operationen schneller als C/C++. Es gibt kaum was bei dem Java noch langsamer ist.  

Kannst du mir glauben. Bin nicht umsonst seit 3 Jahren Java-Entwickler. Tom wird die das auch bestätigen. 

Auch, wenn die VM läuft, in größeren Anwendungen ist das nebensächlich. Wenn man natürlich eine sehr kleine Anwendung schreiben möchte, die kaum Speicher verbraucht, dann ist das natürlich schlecht. Da gebe ich dir recht.

Ich habe ja nicht gesagt, dass es richtig wäre einen Dienst in Java zu schreiben. Wollte nur mal den allgemeinen Irrtum korr*i*gieren. ;-)

MFG

Sascha


----------



## zerix (16. März 2008)

Dario Linksy hat gesagt.:
			
		

> Und weil Java bis zu 10 Mal langsamer ist als C oder C++ und nicht als Daemon laufen sollte, wird es auch überhaupt nicht im Webserver-Bereich eingesetzt.



Ich weiß ja nicht, ob das von dir ironisch gemeint ist, aber für den Fall das nicht, hier mal ein kleines Beispiel. 
http://de.wikipedia.org/wiki/Apache_Tomcat


MFG

Sascha


----------



## Dario Linsky (16. März 2008)

> Ich weiß ja nicht, ob das von dir ironisch gemeint ist


Ist es. Hätte ich vielleicht dazu schreiben sollen. 

Grüße, D.


----------



## zerix (16. März 2008)

Ich wusste es jetzt nicht. Teilweise hat es ausgesehen als würdest du zustimmen, teilweise aber auch als wäre es ironisch gemeint. 

MFG

Sascha


----------



## Navy (16. März 2008)

> Das ist nicht nur meistens so, sondern immer.  

Nanana... ich kann das auch im Quelltext ausliefern und trotzdem laufen lassen.

> Von einer interpretierten Programmiersprache ist Java allerdings auch ziemlich weit 
> entfernt. Der Sourcecode wird ja durchaus in eine Art von Maschinencode kompiliert, der
> lediglich auf einer virtuellen CPU (in Form der VM) ausgeführt wird.

Ich verwendete das Wort "interpretiert" mit Bedacht. Die VM ist keine echte Maschiene und läuft "nur" auf dem OS, muss also die Befehle des Bytecodes noch in Systembefehle bzw direkte Maschinenbefehle umsetzen. Von daher kann es nicht schneller als nativer Maschinencode sein -- sofern letzterer ebenso effizient programmiert ist.

> Und weil Java bis zu 10 Mal langsamer ist als C oder C++ und nicht als Daemon laufen 
> sollte, wird es auch überhaupt nicht im Webserver-Bereich eingesetzt.

Java wird im Webserverbereich eingesetzt weil es ersteinmal eine relativ einfache Sprache ist und sie auch auf andere Systeme portierbar ist. Es ging nie um echte Effizienz, denn sonst würde Java nicht mit PHP oder anderen Sprachen in diesem Bereich konkurrieren.

> Da irrst du dich leider. Auch wenn es ByteCode ist. Schon mal was vom Just in 
> Time-Compiler gehört?

s.o.

> Java ist in den meisten Operationen schneller als C/C++. Es gibt kaum was bei dem 
> Java noch langsamer ist.  

Dann zeig mir mal bitte einen objektiven Vergleich. Ich will jetzt keinen Streit anfangen, aber in allen bisherigen Artikeln die einen vermeintlichen Geschwindigkeitsvorteil von Java gegenüber C propagandiert haben wurde das entsprechende Programm in C nicht optimiert (so wurde auf Biegen und Brechen OOP verwendet um Datentypen zu schaffen anstatt sie mit schnellen und schlanken Zeigeroperationen zu implementieren)

> Kannst du mir glauben. Bin nicht umsonst seit 3 Jahren Java-Entwickler. Tom wird die 
> das auch bestätigen. 

Ich bin auch in der Entwicklung tätig und nutzte mehrere Sprachen. Ich mag Java ob seiner klaren Strukturen und der Übersichtlichkeit, bei Programmen die jedoch auf Performance ausgelegt sind, verwende ich lieber C.

> Auch, wenn die VM läuft, in größeren Anwendungen ist das nebensächlich. Wenn man
> natürlich eine sehr kleine Anwendung schreiben möchte, die kaum Speicher verbraucht, 
> dann ist das natürlich schlecht. Da gebe ich dir recht.

Mhmm... ich habe noch kein großes Projekt gesehen welches performant laufen soll und in Java geschrieben ist. Keine Serveranwendungen, keine Datenbanken, keine Spiele und sontwas... und das wird wohl seinen Grund haben. 

> Ich habe ja nicht gesagt, dass es richtig wäre einen Dienst in Java zu schreiben. Wollte > nur mal den allgemeinen Irrtum korr*i*gieren. ;-)

Welchen meinst Du?


----------



## Dario Linsky (16. März 2008)

Hi,



> ich kann das auch im Quelltext ausliefern und trotzdem laufen lassen.


ist mir neu. Allerdings hab ich auch eine ganze Weile nichts größeres mehr mit Java gemacht.



> Ich verwendete das Wort "interpretiert" mit Bedacht. Die VM ist keine echte Maschiene und läuft "nur" auf dem OS, muss also die Befehle des Bytecodes noch in Systembefehle bzw direkte Maschinenbefehle umsetzen.


Ich war früher auch mal der Meinung, dass Java "interpretiert" wird und weiß, was du meinst. Aber nach einer Diskussion hat mich Chris damals eines besseren belehrt.



> Java wird im Webserverbereich eingesetzt weil es ersteinmal eine relativ einfache Sprache ist und sie auch auf andere Systeme portierbar ist.


Das war ironisch gemeint. Ich weiß, dass es Tomcat, Struts, Servlets, Web Services, usw. gibt.



> Es ging nie um echte Effizienz, denn sonst würde Java nicht mit PHP oder anderen Sprachen in diesem Bereich konkurrieren.


Java ist aber um Längen schneller als PHP, weil ein Servlet oder ein JSP nur beim ersten Aufruf kompiliert werden muss und danach eben direkt von der VM verarbeitet werden kann - wohingegen PHP tatsächlich bei jedem Aufruf zeilenweise interpretiert wird.



> Ich bin auch in der Entwicklung tätig und nutzte mehrere Sprachen. Ich mag Java ob seiner klaren Strukturen und der Übersichtlichkeit, bei Programmen die jedoch auf Performance ausgelegt sind, verwende ich lieber C.


Natürlich kann Java-Bytecode niemals schneller sein als nativer Maschinencode, das ist richtig. Aber es hat sich in puncto Performance in den letzten Jahren doch einiges auf der Java-Seite getan. Und wenn es wirklich um zeitkritische Dinge geht, ist selbst C noch zu lahmarschig, weil jeder Compiler und Linker unnützes Zeug mit in den Maschinencode rein "optimiert". Dann lieber Assembler. 



> Mhmm... ich habe noch kein großes Projekt gesehen welches performant laufen soll und in Java geschrieben ist. Keine Serveranwendungen, keine Datenbanken, keine Spiele und sontwas...


Ich weiß nicht, wie umfangreich diese Dinge sind, weil ich den Sourcecode nicht kenne, aber... spontan fallen mir Webseiten wie die vom DENIC, von SUN  und von Siemens ein. Auf der Desktop-Seite Eclipse (ja, wirklich ) und wenn mich nicht alles täuscht, ist OpenOffice.org auch in Java geschrieben. Davon kriegt man als Anwender natürlich nicht so viel von mit.

Grüße, D.


----------



## zerix (16. März 2008)

Den Irrtum das Java langsamer ist.

C/C++ wird meistens genommen wenn es um Performance geht. Wenn man richtig programmiert, kann man das meiste auch in Java machen.

Schau mal hier 
http://www.tutorials.de/forum/coders-talk/289122-beste-sprache-fuer-anwendungen-3.html

Da gab es schon mal eine ähnliche Diskussion. Da hab ich einfach mal ein kleines Beispiel geschrieben. In C und in Java.

Wenn man natürlich die fertigen Klassen von Java verwendet (z.b. Vector) und das mit etwas selbstgeschriebenen in C vergleicht. Ist Java natürlich langsamer. Der Verwaltungsaufwand bei VEctor ist enorm, wenn man es mit etwas selbstgeschriebenen in C vergleicht. Schreibt man aber beides selbst, dann sieht das ganze schon anders aus. 


MFG

Sascha


----------



## Neurodeamon (16. März 2008)

Dario Linsky hat gesagt.:


> Java ist aber um Längen schneller als PHP, weil ein Servlet oder ein JSP nur beim ersten Aufruf kompiliert werden muss und danach eben direkt von der VM verarbeitet werden kann - wohingegen PHP tatsächlich bei jedem Aufruf zeilenweise interpretiert wird.



Ich mische mich nicht in Eure Diskussion ein, nur eine kleine Erinnerung/ein Hinweis:

eAccelerator/Zend Optimizer
Diese Anwendungen Cachen den erzeugten Bytecode, so das nicht zwangsläufig jedes mal das Script komplett abgearbeitet werden muss.
Ohne so eine Technologie - da stimme ich zu - wird PHP wirklich zweilenweise interpretiert.


----------



## Navy (17. März 2008)

> Den Irrtum das Java langsamer ist.

Das ist kein Irrtum.

> C/C++ wird meistens genommen wenn es um Performance geht. Wenn man richtig 
> programmiert, kann man das meiste auch in Java machen.

Jain. Wenn man C *richtig* nutzt wird jedes erstellte Programm schneller laufen als unter Java, denn die Optimierungen der jetzigen Compiler sind derart stark, dass der Maschinencode überaus effizient ist.

>Schau mal hier [...]

Hab ich gelesen, den Link auch. Es gab keine Beweise dafür, dass Java schneller ist, nur Behauptungen und ein Gegendarstellung.

> Da gab es schon mal eine ähnliche Diskussion. Da hab ich einfach mal ein kleines 
> Beispiel geschrieben. In C und in Java.
> Wenn man natürlich die fertigen Klassen von Java verwendet (z.b. Vector) und das mit 
> etwas selbstgeschriebenen in C vergleicht. Ist Java natürlich langsamer. Der
> Verwaltungsaufwand bei VEctor ist enorm, wenn man es mit etwas selbstgeschriebenen 
> in C vergleicht. Schreibt man aber beides selbst, dann sieht das ganze schon anders 
> aus. 

Kann ich nicht nachvollziehen. Schreib einfach mal ein Programm welches einen Baum mit n Elementen natürlicher Zahlen (n > 10000) erstellt, diesen dann traversiert und die Ergebnisse summiert. Das versuche so effizient wie möglich mit beiden Sprachen zu implementieren (vermeide z.B. Rekursion, nutze Pointer wenn vorhanden, etc) und Du wirst sehen, dass 1. Java viel mehr Speicher braucht und 2. C schneller traversiert.

Java ist im Laufe der Zeit tatsächlich schneller geworden, reine Server/Dienste unter Linux würde ich damit trotzdem nicht implementieren, da ich dazu ja auch (fast) immer die Java-VM bräuchte...


----------



## zerix (17. März 2008)

Hallo,

dann schau mal hier
http://www.w3sys.com/pages.meta/benchmarks.html

Die Server-VM (in dem JRE mit dabei) ist in fast allen Tests schneller als C++. Das ist noch das alte JDK. Mittlerweile gibt es 2 neuere Versionen. 
Zählt das als Beweis?

Es ist wirklich so, dass Java bei vielen Sachen mittlerweile schneller ist als c/c++. 


Vielleicht solltest du es einfach mal ausprobieren und selbst mal ein Programm schreiben und vergleichen.

Du brauchst auch nicht immer eine JVM, du kannst dir auch einen Java Native Compiler nehmen, dann brauchst du keine JVM. 




> Jain. Wenn man C *richtig* nutzt wird jedes erstellte Programm schneller laufen als unter Java, denn die Optimierungen der jetzigen Compiler sind derart stark, dass der Maschinencode überaus effizient ist.



Der HotSpot von Sun wird der Code immer besser optimiert, je öfter er ausgeführt wird. Die Optimierung ist in dem Fall besser als bei einem Native Compiler.



> Kann ich nicht nachvollziehen. Schreib einfach mal ein Programm welches einen Baum mit n Elementen natürlicher Zahlen (n > 10000) erstellt, diesen dann traversiert und die Ergebnisse summiert. Das versuche so effizient wie möglich mit beiden Sprachen zu implementieren (vermeide z.B. Rekursion, nutze Pointer wenn vorhanden, etc) und Du wirst sehen, dass 1. Java viel mehr Speicher braucht und 2. C schneller traversiert.


Da ich es nicht probiert hab, kann ich nicht sagen, welche Sprache da schneller ist. Aber hab ich gesagt, dass Java in allem schneller ist? Ich hab gesagt, bei vielen Sachen. Es gibt aber noch durchaus Aufgaben die C/C++ schneller erledigt. 
Das Java mehr Speicher braucht ist ja auch klar. Die JVM muss ja auch in den Speicher.

MFG

Sascha


----------



## Neurodeamon (17. März 2008)

zerix hat gesagt.:


> dann schau mal hier
> http://www.w3sys.com/pages.meta/benchmarks.html
> 
> Die Server-VM (in dem JRE mit dabei) ist in fast allen Tests schneller als C++. Das ist noch das alte JDK. Mittlerweile gibt es 2 neuere Versionen.
> Zählt das als Beweis?



Ähmm, was hast Du da bitte gelesen? Den ersten Absatz?
Lies mal bis zum Schluss. Es handelt sich um einen Text der einen angeblich "objektiven" Test zugunsten von JAVA widerlegen soll 

Nachdem er den Testcode in C++ etwas korrigiert hatte kommt er zum schluss:



> This code is twice as fast.  In the context of the orginal kano test results would yield:
> 9 seconds for C++
> 26 seconds for Java -s
> 
> ...



Nochmal: ich mische mich nicht in den Streit ein, ich lese ihn nur interessiert


----------



## zerix (17. März 2008)

Hast du auch genau gelesen um was es in dem Text geht? Da geht es nur um Hash. 

Die Zeile ist auch in der Tabelle markiert.

MFG

Sascha


----------



## Neurodeamon (17. März 2008)

zerix hat gesagt.:


> Hast du auch genau gelesen um was es in dem Text geht? Da geht es nur um Hash.
> 
> Die Zeile ist auch in der Tabelle markiert.



Bitte lies den Text genauer: Die Tabelle ist das Beispiel von der anderen Testseite. Darunter schreibt er das nicht realtime genommen wurde sondern die usertime. Es ist ein Text der einen anderen widerlegen soll. Die Tabelle belegt Deine Aussage - wenn man sie aus dem Kontext des Textes dieser Seite nimmt - im Kontext widerlegt es Deine Aussage.

Puh... schweres Deutsch =)


----------



## zerix (18. März 2008)

Das war wohl der falsche Link. *schäm* 

Bin sowieso der Meinung, dass mit dieser Diskussion dem TE nicht geholfen ist und bin dafür, dass die komplette Diskussion gelösch wird. 

Jemand was dagegen?

MFG

Sascha


----------



## Navy (18. März 2008)

> Das war wohl der falsche Link. *schäm* 

Dann bring einen anderen, der einen objektiveren "Beweis" bringt.

> Bin sowieso der Meinung, dass mit dieser Diskussion dem TE nicht geholfen ist und bin 
> dafür, dass die komplette Diskussion gelösch wird. 
> Jemand was dagegen?

Ja. Ich. Warum löschen? Weil das Ergebnis nicht Deinen Erwartungen entspricht?

Es ging ja u.A. auch darum, dass ein Dienst nicht in Java geschrieben werden sollte. Ein Thread in solche einem Forum hier muss muss ja nicht lupenrein topicdeterministisch sein.


----------



## zerix (18. März 2008)

Man kann das Thema ja an einer anderen Stelle gerne ausdiskutieren. 

MFG

Sascha

EDIT:

Bitte schön. Hier wird gezeigt, dass Java mit dem JIT meistens genau so schnell, manchmal schneller und manchmal langsamer ist.
Prefomance tests show java as fast as c++


----------



## Navy (19. März 2008)

Lustig dass Du einen Artikel postest, der 10 Jahre alt ist und der keine Beweise sondern nur Behauptungen enthält.

- Die Quelltexte der Testprogramme sind nicht verfügbar -- man kann also keine Aussage über deren Effizienz machen
- Der Artikel enthält meinem Geschmack nach zuviele Kompromisse, wie man C++ langsamer machen kann (Carmine Mangione verwendet unbedingt OOP und dazu noch RTTI im Vergleich)
- Auf Linux wird dort nur am Rande eingegangen
- Compileroptimierungen sind wohl nur für Java zulässig

Da könnte man bestimmt noch mehr finden. 

Interessanter ist da dieser Vergleich: http://www.tommti-systems.de/go.htm...ain-Dateien/reviews/languages/benchmarks.html
Die Quelltexte sind verfügbar, leider ist aber auch dieser Vergleich schon etwas älter, zeigt aber, daß C++ in den meisten Bereichen (noch?) schneller ist.

Praxisnah wurde aber auch noch nicht die GUI-Geschwindigkeit beider Sprachen auf verschiedenen Systemen verglichen...

Im Serverbereich wird sich Java  auch nur schwer durchsetzen, da sie eben Ressourcenfressend ist und auch nicht nativ auf der Maschine läuft.


----------



## olqs (19. März 2008)

Ich verfolge den Thread jetzt doch schon länger und hätte da doch mal eine Bitte.

Könntet ihr die Diskussion pro/Contra Java ins Programmierforum verlegen?
Vom Ursprungstopic ist das mittlerweile doch meilenweit entfernt und dem Threadersteller ist damit doch auch nicht geholfen.

Ok nun schlagt mich 
Musste das aber einfach mal loswerden


----------



## zerix (19. März 2008)

> Lustig dass Du einen Artikel postest, der 10 Jahre alt ist


Es ist doch egal, wie alt der Artikel ist.



> Carmine Mangione verwendet unbedingt OOP


Das ist nicht c++ langsamer machen, sondern gleiche Bedingungen schaffen. Sauber Object-Orientiert programmiert, ist meistens langsamer als Prozedural.

Java mit Jet 3.5 ist in 7 von 14 vergleichen schneller als C++. Ich sag mal, das ist die hälfte. 
Ist dann Java schlechter als c++?

Mit der Server-VM ist es in 5 vergleichen schneller. Das ist auch fast die hälfte. Das widerspricht doch der Aussage, dass Java so langsam ist. Meinst du nicht?

MFG

Sascha


----------

