CPU nicht ausgelastet

Status
Nicht offen für weitere Antworten.

CK

Aktives Mitglied
Hallo mein System ist ein:
XP Pro SP2Core 2 Duo E6850 3 GB RAM.
Java 1.5.

Jetzt habe ich eine Anwendung die relativ komplexe Operationen auf DOM-Bämen macht.
Um die Geschwindigkeit zu steigern werden mehrere Files in Threads bearbeitet.
Sagen wir mal acht. Um dies sicher zu stellen benutze ich einen Thread Executor.

Code:
threadExecutor = Executors.newFixedThreadPool(8);

Nun zu meinen Problem:
Da ich ja soviel Leistung wie möglich rausholen will, wäre es ja sinnvoll wenn die CPU voll ausgelastet
ist. Dies ist aber nicht der Fall. Auslastung liegt immer so bei 50-60%.
Durch ein Profiling weis ich das die Thread nicht geblockt sind und auch keine Sleeps sich
innerhalb dieser Threads befindet.
Bin da recht überfragt warum das Programm nicht die gesamte CPU-Last anzieht.

Bitte um euere Hilfe.
 

Capasso

Bekanntes Mitglied
Hast du mal beobachtet wie sich das verhält wenn du mehr oder weniger Threads machst.

Evtl. liegt es am Plattenzugriff, sofern du du oft von Festplatte liest oder darauf schreibst
 

CK

Aktives Mitglied
Hab die Anzahl der Threads auf 4 gesetzt . Das halbiert ja dann die Plattenzugriffe. Hat aber leider auch nix geändert. Also scheint die Anzahl der Threads nix auszumachen.
Haste vielleicht noch ne Andere Idee?
 

didjitalist

Bekanntes Mitglied
als erstes solltest du aber deinen profiler mal darauf ansetzen, womit tatsächlich die meiste zeit verbracht wird. womöglich hilft es schon, wenn die dateien erstmal alle sequentiell vollständig eingelesen werden und nur das reine parsing in threads ausgelagert wird.
 

FArt

Top Contributor
Die CPU ist zu 50%-60% voll ausgelastet... ist das über beide Kerne die gemittelte Auslastung?

Vermutung: die Threads laufen alle auf dem gleichen Kern und lasten diesen voll aus.
Ob das auch anders geht, hängt sicher von der Runtime und dem Betriebssystem ab.
 
S

SlaterB

Gast
erstelle dir doch vergleichsweise ein Programm, welches in 8 Threads nur CPU-Aufgaben erledigt,
wie dauerhaft sinnlos Schleifen zu durchlaufen und mathematische Operationen durchzuführen
 

CK

Aktives Mitglied
Hab mal eben sowas getestet:
Code:
 public static void main(String[] args)
    {
        Executor exec = Executors.newFixedThreadPool(8);

        for (int i = 0; i < 8; i++)
        {
            // sinnloser Thread
            Thread t = new Thread(new Runnable()
            {
                public void run()
                {
                    while (1 == 1)
                    {
                        int ergebniss = 1000 * 1000 * 1000;
                        Math.pow(1000, ergebniss);
                    }
                }
            });

            exec.execute(t);
        }

    }
Dabei geht die CPU sofort auf 100%.
Bis langsam echt überfragt was das sein kann.
 

FArt

Top Contributor
Das bestätigt die Theorie, dass das Bottleneck nicht in der CPU Auslastung zu suchen ist.

Da hilft nur ein Monitoring Tool und/oder ein Profiler, Kontrolle aller Ressourcen (IO, Netzwerk, ...) und die Kontrolle der Synchronisation. Evtl. müssen die Threads zu oft aufeinander warten.
 

CK

Aktives Mitglied
Danke für die Antwort. Wie ich schon zu Anfang geschrieben hatte habe ich mit einem Profiler alle Threads untersucht, aber die sind wärend der gesamten Laufzeit auf Running, kein Waiting, kein Blocking.

Zu den Ressourcen:
Die Files liegen alle im selben Verzeichniss, sind aber für jeden Thread ein anderes File.
Die Threads loggen alle ins selbe File.
Netzwerkverbindung wird nicht genutzt.
 
J

jago

Gast
CK hat gesagt.:
Danke für die Antwort. Wie ich schon zu Anfang geschrieben hatte habe ich mit einem Profiler alle Threads untersucht, aber die sind wärend der gesamten Laufzeit auf Running, kein Waiting, kein Blocking.

Zu den Ressourcen:
Die Files liegen alle im selben Verzeichniss, sind aber für jeden Thread ein anderes File.
Die Threads loggen alle ins selbe File.
Netzwerkverbindung wird nicht genutzt.

Ganz wilder guess - ist es vielleicht ein Problem mit beschraenktem Ram? Wenn nicht genug Ram da ist laeuft GC praktisch pausenlos - und das GC haelt alle Threads an abwohl es wohl der Profiler nicht anzeigt.

Klingt unwahrscheinlich - vor allem weil es wohl auch eine OutOfMemException gegeben haetter - aber versuch doch einfach mal -Xmx512M

Gruss,
jago
 

FArt

Top Contributor
jago hat gesagt.:
CK hat gesagt.:
Danke für die Antwort. Wie ich schon zu Anfang geschrieben hatte habe ich mit einem Profiler alle Threads untersucht, aber die sind wärend der gesamten Laufzeit auf Running, kein Waiting, kein Blocking.

Zu den Ressourcen:
Die Files liegen alle im selben Verzeichniss, sind aber für jeden Thread ein anderes File.
Die Threads loggen alle ins selbe File.
Netzwerkverbindung wird nicht genutzt.

Ganz wilder guess - ist es vielleicht ein Problem mit beschraenktem Ram? Wenn nicht genug Ram da ist laeuft GC praktisch pausenlos - und das GC haelt alle Threads an abwohl es wohl der Profiler nicht anzeigt.

Klingt unwahrscheinlich - vor allem weil es wohl auch eine OutOfMemException gegeben haetter - aber versuch doch einfach mal -Xmx512M

Gruss,
jago

Klingt nicht so unwahrscheinlich. Allerdings hat ja ein Profiling keine Auffälligkeiten ergeben (die Zeiten des GC jeder Generation kann man ja auch schön ansehen). Allerdings glaube ich persönlich diesem Profiling nicht...
 
G

Gast

Gast
>> Die Threads loggen alle ins selbe File.

Lass das Logging doch mal weg.
 

Ark

Top Contributor
Festplatten sind laaaaaaangsam ... und lassen die CPU warten. ;) Vielleicht ist es günstiger, immer nur eine Datei nach der anderen abzuarbeiten!? Wenn man versucht, mehrere Dateien gleichzeitig anzusprechen, könnte es wohl passieren, dass sich der R/W-Kopf der Platte jedes Mal neu positionieren muss; man ahmt quasi stark fragmentierte Dateien nach.

Möglicherweise täusche ich mich gerade, aber so würde ich mir jetzt das Phänomen erklären.

Ark
 
S

SlaterB

Gast
weiter ausgemalt:
nur ein Thread sollte (im Voraus) Dateien einlesen, wegschreiben und vielleicht ab und zu (nicht bei jedem Eintrag) Log schreiben,
je nach Auftrag von anderen Threads,

die anderen bearbeiten nur die vorhandenen Daten,
wenn sie damit schneller sind als der Einlesethread neue heranschaffen und Ergebnisse wegschreiben kann,
dann ist das ok, dann ist eben die CPU schneller als die Festplatte und darf sich dafür auch die ein oder andere Pause gönnen
 

CK

Aktives Mitglied
Vermute auch stark das es an den Platten liegt, aber immer nur eine Datei abzuarbeiten wäre noch viel langsamer. Hatte es mal ausprobiert. Bei den Operationen die ich durchführe dauert es mit mehreren thread bei 400 Files ca. 20 Minuten und mit einem ca. 2 Std.
Naja werde ich wohl mit der Einbusung leben müssen. Trotzdem Danke.
 

FArt

Top Contributor
CK hat gesagt.:
Vermute auch stark das es an den Platten liegt, aber immer nur eine Datei abzuarbeiten wäre noch viel langsamer. Hatte es mal ausprobiert. Bei den Operationen die ich durchführe dauert es mit mehreren thread bei 400 Files ca. 20 Minuten und mit einem ca. 2 Std.
Naja werde ich wohl mit der Einbusung leben müssen. Trotzdem Danke.

Wenn du nur Vermutungen anstellst, wirst du durch Zufall eine Verbesserung herbeiführen oder tatsächlich damit leben müssen. Wenn du aber mal dein System (und nicht nur die Applikation mit einem Profiler) monitorst, kannst du zumindest sagen wo das Bottleneck ist... eventuell dann auch überlegen wie man es abstellen kann.

Zur Analyse unter Linux kommt man mit 'top' schon sehr weit. Unter Windows hilft "Process Explorer" als TaskManager-Ersatz schon sehr.
 
T

tuxedo

Gast
Ich versteh das Problem nicht. Ein anständiger Profiler sagt einem genau wo wieviel Zeit verbraten wurde. So lässt das das Problem nahezu auf die Millisekunde genau bestimmern.

Und ich würde fast meine Hand dafür ins Feuer legen dass es am Logging bzw. dem Plattenzugriff hapert.

Wenn viel geloggt wird: Bist du dir sicher dass du nicht massenweise String-Konkatenation verwendest? Ist so ein typischer "Fehler" beim loggen. Loggen an sich kostet auch einiges an Zeit. Und wenn du's abschaltest (via Config) und den Fehler mit der Konkatenation begangen hast, bremst es natürlich trotzdem.

- Alex
 
S

SlaterB

Gast
String-Konkatenation dürfte auch die CPU auslasten oder?
falsche Richtung ;)
 
T

tuxedo

Gast
ach ja, schei**e ... Genau falsch herum gedacht ... *mist* Ist halt noch zu früh am morgen ;-)

Naja, nichts desto trotz: Ein Profiler sagt einem extrem genau wo das Bottleneck zu suchen ist.

- Alex
 

FArt

Top Contributor
Ob Plattenauslastung an sich das Problem ist, sieht man beim Monitoring, indem man sich die I/O Paramter (R/W/O) ansieht, ist die Lösung. Dann gilt es nur noch herauszufinden, wer den Traffic verursacht, denn das Problem muss nicht durch die eigene Applikation allein verursacht werden.

Beispiel: Logging in Files kann natürlich den IO entsprechend erhöhen. Wenn das aber im Regelfall unkritisch ist, parallel dazu aber anderweitig IO-Aktivitäten stattfinden, ist an sich nicht das Logging schuld.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
H HashMap in HashMap, klappt nicht, Verständnisproblem Allgemeine Java-Themen 2
kodela ArrayList wird nicht komplett gespeichert Allgemeine Java-Themen 3
kodela HelpSet wird nicht gefunden Allgemeine Java-Themen 8
D Compiler-Fehler Compilierung in VM nicht erfolgreich Allgemeine Java-Themen 10
G WSDL-Aufruf funktioniert nicht mehr nach Umstieg auf Maven Allgemeine Java-Themen 4
H KNN Erkennt Zahl Nicht Allgemeine Java-Themen 7
W ICEpdf PDF-Dateien werden mit Java 21 nicht nicht mehr vollständig dargestellt Allgemeine Java-Themen 3
Zrebna Berechnung der Zeit funktioniert nicht wie erwartet: Date, GregorianCalendar Allgemeine Java-Themen 16
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
kodela Textfeld nicht rechteckig Allgemeine Java-Themen 10
G Doppelklick auf Javaprogramm klapt nicht Allgemeine Java-Themen 1
W Timer terminiert nicht Allgemeine Java-Themen 5
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
W Überflüssige Deklaration vermeiden...war da nicht mal was? Allgemeine Java-Themen 3
N lwjgl kann textureSampler nicht finden Allgemeine Java-Themen 4
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
T .Jar kann man nicht ausführen Allgemeine Java-Themen 18
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
N Regex schlägt nicht an Allgemeine Java-Themen 10
Y Wieso krieg ich die Unit Tests nicht hin Allgemeine Java-Themen 55
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
OnDemand ApacheCommon FTP Client zuckt nicht Allgemeine Java-Themen 3
T JavaPoet - (noch) nicht existente Typen Allgemeine Java-Themen 2
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
OnDemand MemoryLeak nicht zu finden Allgemeine Java-Themen 26
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
OnDemand Ram Freigabe erfolgt nicht nach Prozessende Allgemeine Java-Themen 18
OnDemand XML desializing Attribute bringt nicht erwartetes Ergebnis Allgemeine Java-Themen 16
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
stormyark TikTakToe funktioniert nicht Allgemeine Java-Themen 10
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
Tiago1234 Hauptklasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 38
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
I "Neues" Lizenzmodell Oracle - JRE nicht mehr zur Redistribution freigegeben? Allgemeine Java-Themen 16
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
A code wird nicht ausgeführt Allgemeine Java-Themen 3
Blender3D Alte Beiträge nicht mehr vorhanden Allgemeine Java-Themen 6
M Warum hat Java dieses und jenes nicht... Allgemeine Java-Themen 8
W Bilder werden in App mit Jar-Datei nicht angezeigt Allgemeine Java-Themen 15
Micha43 Applet *.jar läuft nicht auf dem Mac Allgemeine Java-Themen 8
M Warum bekommen ich den Result nicht ? Allgemeine Java-Themen 17
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
HerrBolte Seltsamer Fehler nur in der Windows- und nicht in der Java-Console O_O Allgemeine Java-Themen 16
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
P Karate API Test läuft nicht durch . initializationError Allgemeine Java-Themen 21
N nicht static und auch nicht new Allgemeine Java-Themen 3
Z macOS java konnte nicht entfernt werden xpc verbindungsfehler Allgemeine Java-Themen 4
T Schaltfläche wird nicht gefunden Allgemeine Java-Themen 4
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
N Gierigen Regex in nicht-gierigen umwandeln Allgemeine Java-Themen 4
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
AleXusher Hauptklasse startlösung konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 1
G @PostConstruct Annotation nicht mehr gültig ? Allgemeine Java-Themen 7
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
izoards log4j2 will nicht.... Allgemeine Java-Themen 15
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
I serialVersionUID - explizit vergeben oder nicht? Allgemeine Java-Themen 6
MiMa Vorhandenes das nicht existiert?? Allgemeine Java-Themen 7
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
O Jar lässt sich auf bestimmten Pc nicht starten Allgemeine Java-Themen 18
T Fremde Typen mockt man nicht? Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
B neuroph hält beim XOR lernen nicht an Allgemeine Java-Themen 13
kodela JDialog zeigt Text nicht an Allgemeine Java-Themen 5
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
D Twitch API mit HttpURLConnection läuft nicht? Allgemeine Java-Themen 0
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
R Threads Clip loop loopt nicht Allgemeine Java-Themen 2
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
OnDemand JMS Messages nicht abgeholt Allgemeine Java-Themen 0
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
A Mp3 Player funktioniert nicht Allgemeine Java-Themen 0
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
M Console geht nicht auf (Windows 10) Allgemeine Java-Themen 3
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
W Javac nicht bei Installation installiert Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben