PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Win 8 - / Java - Auslastung 75%/100%


Eggcake
2013-07-02, 14:41:57
Ich habe ein kleines Problem - und zwar geht es um die (gewollte) Auslastung von Java unter Windows 8, die plötzlich etwas merkwürdig ist.

Ich habe ein Programm geschrieben, welches multithreaded ist - es soll auf 4 Kernen laufen. Bis vor kurzem klappte dies auch noch ohne Probleme und die Auslastung des Java-Prozesses lag bei knapp 100%.
Seit kurzem habe ich einen Anstieg der Laufzeit bemerkt und mal in den Task-Manager geschaut. Merkwürdigerweise zeigte es mir nur noch eine Auslastung von ziemlich exakt 75% an - also als ob nur 3 Threads laufen würden:

http://abload.de/img/68esu3.png (http://abload.de/image.php?img=68esu3.png)

Schaute ich allerdings in die Prozesse, zeigt es mir 100% an:
http://abload.de/img/5insuw.png (http://abload.de/image.php?img=5insuw.png)


Dabei fühlt sich der PC jeweils auch so an, als ob er zu 100% ausgelastet wäre. Ich habe, als alles noch korrekt lief, ab und zu jeweils nur 3 Threads eingestellt, damit ich nebenbei noch arbeiten/surfen kann - dann läuft der PC eigentlich ziemlich flüssig. Das hingegen, fühlt sich definitiv nach 100% und nicht nach 75% Auslastung an (FF starten dauert ewig, Task Manager ebenso).


Ich bin ehrlichgesagt etwas verwirrt?! Weiss einer an was das liegen kann oder wo ich mit Fehlersuche beginnen soll? Wie gesagt, am Programm selber habe ich eigentlich nichts geändert, es meldet 4 Threads und ich finde es absolut merkwürdig, dass die Auslastung im Taskmanager bei genau 75%, also eigentlich 3 Threads liegt...

][immy
2013-07-02, 14:47:42
A) Eventuell hast du doch keine Vollauslastung sondern nur ~19%? je Thread
B) 4 Threads garantieren dir nicht das du auch alle 4 CPU-Cores belegst. Du kannst durch umpriorisierung genauso gut auf die anderen Cores verschoben worden sein, so das ein core an 2 threads arbeiten weil es grad wichtigeres zu tun gibt.

Gibt dem Prozess zum Test doch mal die höchste Priorität.

Eggcake
2013-07-02, 15:07:47
Das merkwürdige ist einfach, dass ich bis vor kurzem wirklich an die 100% Auslastung hatte.
Wenn ich die Priorität höher setze, krepiert mir fast der PC aber die Auslastung bleibt bei 70%.

Was bedeutet denn die Auslastung unter den "Details", welche ja eben bei 100% ist?

Edit: VisualVM zeigt mir auch 100% an. Als ob nur 3/4 der CPU Leistung zur Verfügung stehen würden und bei 75% das Maximum wäre.

Ectoplasma
2013-07-02, 15:44:41
[immy;9829008']
B) 4 Threads garantieren dir nicht das du auch alle 4 CPU-Cores belegst.

Eigentlich schon, es sei denn, man gibt expliziet nur bestimmte Cores vor, oder andere Threads haben eine höhere Prio. Das hast du indirekt zwar geschrieben aber es fehlt das Detail, dass die anderen Threads auch im Running State sein müssen. Und in diesem Fall wäre die CPU wieder zu 100% ausgelastet.

@TS, schonmal geprüft, ob die Threads sich durch Synchronisationspunkte nicht gegenseitig in die Quere kommen? Warten die zufällig auf eine gemeinsame Resource? Semaphore, Critical-Sections und Events sind zudem unter Windows nicht sonderlich schnell. Hier kann man auch unter "Lock-free multithreaded programming" nützliche Tippes finden.

Eggcake
2013-07-02, 16:34:18
Eigentlich nicht. Sie greifen zwar auf eine gemeinsame Quelle zu, allerdings agieren sie ansonsten autonom (d.h. keine gemeinsamen Variablen, die verändert werden/auf die geschrieben werden muss). Ich teste es gleich mal noch auf dem Laptop, und schaue da, wie die Auslastung aussieht.

Hat aber jemand eine Erklärung, warum bei "Details" die Auslastung auf 100% ist?

- 2 Threads: Im Task Manager 45%, unter "Details" ist der Prozess exakt auf 50%
- 3 Threads: Im Task Manager 60%, unter "Details" auf 75%
- 4 Threads: Im Task Manager 75%, unter "Details" 100%...