Brauche HIlfe von jemandem, der einen 2.6er Kernel laufen hat.

Dieses Thema: "Brauche HIlfe von jemandem, der einen 2.6er Kernel laufen hat." im Forum "Java/Mono/dotGNU" wurde erstellt von Anakin77, 07.01.2004.

  1. #1 Anakin77, 07.01.2004
    Zuletzt bearbeitet: 07.01.2004
    Anakin77

    Anakin77 Mitglied

    Dabei seit:
    07.01.2004
    Beiträge:
    28
    Zustimmungen:
    0
    Kann bitte jemand mal das folgende Javaprogramm testen?

    Die Links:

    http://www.netphantom.de/down/Threadtest.class
    http://www.netphantom.de/down/Threadtest.java

    Das Programm benötigt eine Java Virtual Machine. Man kann es wie folgt starten:

    java Threadtest.class 1024

    Dies würde dann 1024 Threads erzeugen, welches unter einem 2.4er Kernel nicht funktioniert hat, da es dort eine Grenze gibt. Wenn also jemand einen laufenden 2.6er Kernel und eine JVM hat, dann würde ich mich sehr freuen, wenn er dieses kleine Programm mal testen könnte (wie viele Threads erzeugt werden können bevor eine Fehlermeldung wie OutofMemoryException erscheint).

    Der Quellcode:

    Code:
    import java.lang.Thread;
    
    public class Threadtest extends Thread 
    {
        public static int threadcounter=0;
        public Threadtest() {}
        
        public static void main(String[] args) 
        {
            Thread [] t = new Thread[20000];
            Integer anzahl;
            int anz=0;
            
            // nur einen Parameter
            if (args.length == 1)
            {
                // Übergebene Zeichenkette in int wandeln
                try
                {
                    anzahl = new Integer(args[0]);
                    anz = anzahl.intValue();
                }
                catch(Exception e)
                {
                    System.out.println("Bitte gueltige Zahl zwischen
                                        2 und 20000 eingeben!");
                    System.exit(2);
                }
                
                // 20000 Threads würden reichen !
                if (anz>20000)
                {
                    System.out.println("Maximum ist 20000!");
                    System.exit(2);
                }
                
                // Mehr Threads, sonst ist der Test sinnlos!
                if (anz<2)
                {
                    System.out.println("Minimum ist 2!");
                    System.exit(2);
                }
    
                System.out.print("Erzeuge ");
                System.out.print(anz);
                System.out.println(" Threads!");
                Threadtest x = new Threadtest();
    
                // gewünschte Anzahl Threads erzeugen. Referenzen in Thread-Array
                for(int i=1;i<=anz;i++)
                {
                    t[i] = new Thread(x);
                    t[i].start();
                    System.out.print("Thread Nummer ");
                    System.out.print(i);
                    System.out.println(" erzeugt!");
                }
                
                // Ende des Mainthreads!
                System.out.print(threadcounter);
                System.out.println(" Threads erfolgreich gestartet!");
            }
            else
            {
                System.out.println("Fehler: Anzahl der Threads (2-20000) als
                                    Parameter, Bsp: java Threadtest 1000!");
            }
        }
        public void run()
        {
            try {
                // globalen Threadzähler erhöhen
                threadcounter++;
                
                // warten bis zum Crtl-C (oder der OutofMemoryException)
                do 
                    { Thread.sleep(1000); }
                while(true);
            }
            catch(Exception e){}
        }
    }
    
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Zero

    Zero Keyboard-Ninja

    Dabei seit:
    12.11.2003
    Beiträge:
    598
    Zustimmungen:
    0
    Ort:
    echo $HOME
    kriege nen fehler:

    Exception in thread "main" java.lang.NoClassDefFoundError: Threadtest/class
     
  4. Andre

    Andre Foren Gott
    Moderator

    Dabei seit:
    01.04.2002
    Beiträge:
    3.876
    Zustimmungen:
    0
    ich schiebe das mal nach Java....
     
  5. #4 Anakin77, 07.01.2004
    Anakin77

    Anakin77 Mitglied

    Dabei seit:
    07.01.2004
    Beiträge:
    28
    Zustimmungen:
    0
    Sorry, das Kommando sollte wie folgt sein:

    java Threadtest 1500

    und nicht java Threadtest.class 1500

    Dann sollte es starten!
     
  6. Zero

    Zero Keyboard-Ninja

    Dabei seit:
    12.11.2003
    Beiträge:
    598
    Zustimmungen:
    0
    Ort:
    echo $HOME
    1499 Threads erfolgreich gestartet :D
     
  7. #6 Anakin77, 07.01.2004
    Anakin77

    Anakin77 Mitglied

    Dabei seit:
    07.01.2004
    Beiträge:
    28
    Zustimmungen:
    0
    Vielen Dank für den Test.

    Kannst du bitte noch das Ganze mal mit deutlich höheren Werten testen?

    So mal 5000, 10000, 19000 (20000 akzeptiert das Testprog nicht mehr ^^).
     
  8. #7 Zero, 07.01.2004
    Zuletzt bearbeitet: 07.01.2004
    Zero

    Zero Keyboard-Ninja

    Dabei seit:
    12.11.2003
    Beiträge:
    598
    Zustimmungen:
    0
    Ort:
    echo $HOME
    hehe
    das teil frisst ja meinen ram wie nix :D
    Nachdem ich das progg 3 mal gestartet habe,
    kommt folgende Meldung

    bei 19000 und jeglicher anderer summe auch,
    die nicht höher als eben die 20000 sind:

    Thread Nummer 374
    Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start(Native Method)
    at Threadtest.main(Threadtest.java:52)

    Wenn ich jedoch als Startparamet die Zahl bis
    373 eingebe, dann geht es einwandfrei.

    Bei jeder Zahl über 374 kommt dann die
    oben genannte Meldung.

    HTH

    EDIT:
    Achja, habe 512 MB drinen, falls das von interesse ist,
    wegen der Fehlermeldung ;)
     
  9. #8 Anakin77, 07.01.2004
    Anakin77

    Anakin77 Mitglied

    Dabei seit:
    07.01.2004
    Beiträge:
    28
    Zustimmungen:
    0
    Wie viele Threads liefen denn zu dem Zeitpunkt genau???

    Mit welchen Parametern hast du es dreimal gestartet?
     
  10. Zero

    Zero Keyboard-Ninja

    Dabei seit:
    12.11.2003
    Beiträge:
    598
    Zustimmungen:
    0
    Ort:
    echo $HOME
    Beim ersten mal lief die 1500 komplett durch,
    beim zweiten mal die 5000
    und beim dritten mal die 19000

    und beim vierten mal testete ich es mit 19500
    da ist es eben bei 374 stehen geblieben.

    Das fünfte mal teste ich es mit 373.
     
  11. meez

    meez miis

    Dabei seit:
    27.04.2003
    Beiträge:
    46
    Zustimmungen:
    0
    Ort:
    CH
    Warum soviele Threads ?
    Mehr als 50 sind ehh sinnlos, da der Prozess sonst mehr mit der Verwaltung der Thread zu tun hat, als mit den "wirklichen" Operationen...

    Wenn dus aber dennoch versuchen willst, mach folgendes:

    Aendere deinen Code. Einen Thread Feld mit 20000 Plätzen :Kopfschüttel:
    Lösch den Array und erzeuge die Threads so (spart Speicherplatz):

    for (int i=1;i<anz;i++) {
    new Threadtest().start();
    System.out.println(...);
    }

    (Falls du die Refernz auf den Thread noch brauchen solltest, lege sie in einen Vector)

    Zudem starte die JVM (Hotspot-Engine) so:
    java -Xms2m -Xmx2m -Xss2m Threadtest
     
  12. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Was bringt das? HotSpot-Engine hab ich schon mal gehört.. aber was ist das gleich noch mal?
     
  13. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Achtung: Alles nur Vorschläge, keine Kritik!

    Es ist besser immer nur die Exceptions abzufangen die man auch haben will.
    Mit "catch(Execption e)" fängst du alles ab! Ein "catch(NumberFormatException e)" ist da besser.

    Ist jetzt zwar kniefieselig, aber warum nicht in einer Zeile?
    "System.out.println("Erzeuge" + anz + " Threads!");"
    Hat den Vorteil, dass du die Funktion nur einmal aufrufst. Außerdem wird die Mehthode um sage und schreibe zwei Zeilen kürzer.. :)

    Falls du nicht weißt was ein Vector ist: (wusste ich bis vor kurzem auch nicht, obwohl ich es dringend gebraucht hätte!)
    Ein Vector ist eine Klasse die eine beliebige Anzahl von Objects aufnimmt. Du kannst also immer mehr reinstecken ohne dich um Speicher kümmern zu müssen.

    Viel Spaß mit Java, wünscht
     
  14. #13 meez, 15.01.2004
    Zuletzt bearbeitet: 15.01.2004
    meez

    meez miis

    Dabei seit:
    27.04.2003
    Beiträge:
    46
    Zustimmungen:
    0
    Ort:
    CH
    Setzt das Memory und den Thread Stack size der VM auf das Maximum (2 Giga)...Hab gleich noch einen Fehler gesehen: Es sollte heissen:
    java -Xms2g -Xmx2g -Xss2g Threadtest


    Die Hotspot-Engine ist ein Teil der JVM. Sie kümmert sich z.T. um die Speicherverwaltung.


    Ein Vector nimmt nur die Referenz (Pointer) auf ein Objekt auf...Kommt aber aufs gleiche raus...



    Ach ja...Die Klasse Thread muss nicht importiert werden, da java.lang.* und java.object.* sowieso immer import werden....
     
  15. #14 Anakin77, 15.01.2004
    Zuletzt bearbeitet: 15.01.2004
    Anakin77

    Anakin77 Mitglied

    Dabei seit:
    07.01.2004
    Beiträge:
    28
    Zustimmungen:
    0
    Leute, Leute

    Meine Frage bezog sich nicht auf Programmiertechniken. Ich hatte diesen Thread auch ursprünglich nicht im Java-Forum. Irgendein Admin hat ihn scheinbar zu wenig gelesen und deshalb nach Java verschoben!

    Klar könnte ich nen Vector nehmen. Ich könnte auch hunderttausend Exceptions abfangen und ne schöne bunte Oberfläche basteln.

    Aber ich will doch nur testen, wie viele Threads erzeugt werden können.

    Warum also soll ich die Exception abfangen? Ob die JVM oder ich die Meldung ausgibt ist mir ziemlich egal!

    Ich habe nur das Problem, dass ich keinen 2.6er Kernel bei mir zum Fliegen bekommen habe, deshalb suche ich Leute die das Programm starten und nicht verbessern!
     
  16. #15 Anakin77, 15.01.2004
    Anakin77

    Anakin77 Mitglied

    Dabei seit:
    07.01.2004
    Beiträge:
    28
    Zustimmungen:
    0
    Nun, ich bin mir nicht sicher, wie es die JVM unter Linux machen. Aber die SUN-JVM unter Windows oder auch die von IBM für AIX hätten damit ein große Probleme.

    Wenn du die initial Heapsize (Xms2g) auf 2GB setzt, dann kannst du fast keine Threads mehr erzeugen!

    Erfahrungsgemäß kann ich mehr Threads laufen haben, wenn die Heapsize auf 1GB oder niedriger ist. Ich kenne das interne Speichermanagement nicht, aber ich vermute mal ganz stark, dass der Stack pro Thread bzw. Heap pro Thread nicht von diesem beim Start reservierten Speicher genommen wird.
     
Thema:

Brauche HIlfe von jemandem, der einen 2.6er Kernel laufen hat.

Die Seite wird geladen...

Brauche HIlfe von jemandem, der einen 2.6er Kernel laufen hat. - Ähnliche Themen

  1. Brauche Hilfe bei Lösunge einer Aufgabe

    Brauche Hilfe bei Lösunge einer Aufgabe: In der Dateil /etc/passwd sind zeilenweise alle User aufgelistet. Der Name ist dabei vom Zeilenanfang bis zum ersten Doppelpunkt. Erstellen Sie...
  2. Brauche hilfe bei einen Shell Script "-eq Parameter"

    Brauche hilfe bei einen Shell Script "-eq Parameter": Hallo miteinander, bin Neuling in shell Programmierung und brauche etwas Hilfe: und zwar möchte ich einige Zeilen aus einer Datei "user.db"...
  3. 1:1 NAT brauche Hilfe bei der Erstellung eines Shellscripts

    1:1 NAT brauche Hilfe bei der Erstellung eines Shellscripts: Hi, ich brauche Hilfe bei der Erstellung eines Shellskripts, was nach OpenVPN Neueinwahl die Datei /var/db/opt1_ip parst (in dieser Datei steht...
  4. Brauche hilfe von Profis mit opensuse 11.2

    Brauche hilfe von Profis mit opensuse 11.2: Irgend wie bekomme ich keine internet verbindung hin ob über kde manger oder manuell kann man es auch über der shell einrichten wäre nett wenn ich...
  5. Brauche dringend Hilfe nach System Rücksetzung

    Brauche dringend Hilfe nach System Rücksetzung: Hallo. Leider habe ich nicht viel Ahnung von Linux Programmen und habe nach einem Telefonat mit dem technischen Support von Hercules bei meinem...