Zuviele Prozesse auf einer shell

Nanaki

Erfahrenes Mitglied
Hi,

ich hab ein kleines Programm geschrieben, welches dann auf einem Linux Rechner -> Shell-Account laufen soll. Dieses Programm führt mehrere Verbindungen in ein IRC-Network aus und läuft auch soweit. Jedoch verbraucht das ganze zuviele Prozesse. Wenn ich nur 2 dieser Bots starten lasse werden schon sehr viele Prozesse in anspruch genommen, wie ihr hier sehen könnt:


$ ps x
PID TTY STAT TIME COMMAND
19175 ? S 110:53 ./psybnc
7728 ? S 0:00 /usr/sbin/sshd
7729 pts/2 S 0:00 -bash
7821 ? S 0:00 /usr/sbin/sshd
7822 pts/12 S 0:00 -bash
7823 pts/12 S 0:00 java -jar bots.jar
7824 pts/12 S 0:00 java -jar bots.jar
7825 pts/12 S 0:00 java -jar bots.jar
7826 pts/12 S 0:00 java -jar bots.jar
7827 pts/12 S 0:00 java -jar bots.jar
7828 pts/12 S 0:00 java -jar bots.jar
7829 pts/12 S 0:00 java -jar bots.jar
7830 pts/12 S 0:00 java -jar bots.jar
7831 pts/12 S 0:00 java -jar bots.jar
7832 pts/12 S 0:00 java -jar bots.jar
7833 pts/12 S 0:00 java -jar bots.jar
7834 pts/12 S 0:00 java -jar bots.jar
7835 pts/12 S 0:00 java -jar bots.jar
7836 pts/12 S 0:00 java -jar bots.jar
7837 pts/12 S 0:00 java -jar bots.jar
7838 pts/12 S 0:00 java -jar bots.jar
7839 pts/12 S 0:00 java -jar bots.jar
7840 pts/12 S 0:00 java -jar bots.jar
7841 pts/12 S 0:00 java -jar bots.jar
7842 pts/12 S 0:00 java -jar bots.jar
7843 pts/12 S 0:00 java -jar bots.jar
7844 pts/12 S 0:00 java -jar bots.jar
7845 pts/12 S 0:00 java -jar bots.jar
7846 pts/12 S 0:00 java -jar bots.jar
7847 pts/12 S 0:00 java -jar bots.jar
7848 pts/12 S 0:00 java -jar bots.jar
7849 pts/12 S 0:00 java -jar bots.jar
7850 pts/12 S 0:00 java -jar bots.jar
7851 pts/12 S 0:00 java -jar bots.jar
7852 pts/12 S 0:00 java -jar bots.jar
7853 pts/12 S 0:00 java -jar bots.jar
7854 pts/12 S 0:00 java -jar bots.jar
7855 pts/12 S 0:00 java -jar bots.jar
7856 pts/12 S 0:00 java -jar bots.jar
7857 pts/12 S 0:00 java -jar bots.jar
7858 pts/12 S 0:00 java -jar bots.jar
7859 pts/12 S 0:00 java -jar bots.jar
7860 pts/12 S 0:00 java -jar bots.jar
7861 pts/2 R 0:00 ps x

Und wenn ich die ursprünglich 25 Bots starte, läuft das ganze bis ca. 300 Prozessen, was eindeutig zuviel ist.
Starten lasse ich das Programm auch nicht über irgendeine Schleife, sondern über die Befehlszeile $ java -jar bots.jar wodurch eigentlich auch nicht soviele Prozesse in Anspruch genommen werden sollten.
Das Programm ruft sich selbst auch nicht wieder auf, sondern besteht pro Bot aus 2 Threads. Zwar verbraucht ein Thread 1 Prozess (soweit ich das getestet habe), aber bei 25 Bots laufen im Endeffekt höchstens 50 Threads und keine 300.

Solltet ihr diesbezüglich irgendwelche Ideen haben, woran das liegen könnte bzw. wie ich das Problem beheben kann, wäre ich euch sehr dankbar, denn solangsam bin ich mit meinem Latein am Ende :rolleyes:

Falls ihr noch irgendwelche Informationen braucht, bitte einfach nachbohren ;)
 
Nach weiteren Nachforschungen bin ich jetzt dahinter gekommen, dass sämtliche Prozesse Threads sind (jeder Bot hatte noch ein paar Timer aktiviert, wodurch auch wieder Threads gestartet wurden).

Des Weiteren konnte ich in Erfahrung bringen, dass Thread-Prozesse Problem vom Betriebssystem abhängig ist.
Somit sind Betriebssysteme wie z. B. Win NT/2000/XP, Solaris threadbasierend gestaltet und dabei werden die Java-Threads auf native Threads abgebildet.
Linux ist jedoch nicht threadbasierend, wodurch man sich eine Abhilfe geschaffen hat. Früher hat man da noch sogenannte Green Threads verwendet, welche aber nicht besonders effektiv bei mehreren Prozessoren waren. Ab JDK 1.3 werden für die Threads komplette Prozesse erzeugt, womit mehrere Prozessoren wieder einen erheblichen Vorteil haben.

Deshalb werde ich schauen, dass ich meine Thread Anzahl verringern werde. Sollte jemand anderst das gleiche Problem wie ich haben, hoffe ich das meine Antwort hier eine Hilfe/Erklärung ist.
 
Zurück