Warum gibt es mehrere "Gesamtzeit, für die Anwendungsthreads gestoppt wurden" zwischen zwei kleineren GCs

9

Ich führe eine Java-Anwendung mit den folgenden Einstellungen aus:

  

-Xms1G -Xmx2G -Xdebug -Xloggc: /usr/local/resin/log/gc.log -XX: + PrintGCDetails -XX: PermSize = 150M -XX: + PrintGCTimeStamps -XX: + PrintTenuringDistribution -XX: + PrintGCApplicationStoppedTime -XX: + PrintGCApplicationConcurrentTime -XX: + PrintHeapAtGC -XX: + UseConcMarkSweepGC

Ich dachte, das Einschalten von -XX: + PrintGCApplicationStoppedTime gibt aus, wie lange die Anwendung bei jedem GC gestoppt wird, aber mehrere Zeilen von Protokollen, die angeben, wie lange die Anwendung zwischen zwei kleineren GCs wie der folgende Protokolle:

%Vor%

Warum gibt es mehrere aufeinanderfolgende Zeilen von "Gesamtzeit, für die die Anwendungsthreads gestoppt wurden" und "Anwendungszeit" zwischen zwei untergeordneten GCs. Worauf bezieht sich jede Zeile von ihnen? Ein GC, der nicht im Detail ausgegeben wird? oder sind sie nicht durch GC verursacht?

Wenn ich die Gesamtzeit erfahren möchte, für die meine Anwendung während GCs gestoppt wurde, sollte ich die Zeit in all diesen Protokollen zusammenfassen?

    
user868872 29.07.2011, 07:57
quelle

2 Antworten

4

Verwenden Sie -XX:+PrintSafepointStatistics , um die Ursache jedes Sicherheitspunkts zu ermitteln. Verknüpfen Sie Diese Antwort zeigt an, wo Sie eine vollständige Liste der möglichen Sicherheitsrisiken erhalten.

    
Matt 07.08.2011 08:02
quelle
1

Dieses Protokoll zeigt Ihnen alle Gründe, warum eine Anwendung gestoppt wurde, nicht nur für GCs. Eine Möglichkeit, diese zu reduzieren, besteht darin, das voreingestellte Sperren auszuschalten (nichts mit GCs zu tun);)

Versuchen Sie

%Vor%     
Peter Lawrey 29.07.2011 08:41
quelle

Tags und Links