它是jconsole本身导致锯齿形图案.
要查看的效果jconsole
或者jvisualvm
你可以写一个简单的Java程序只有一个主循环.例如
public static void main(String[] args) {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
只用一点堆就可以执行它java -Xmx20m ...
.这将有助于您更好地查看堆利用率,因为jstat
我将使用的工具以百分比形式打印利用率.
现在打开一个命令行窗口并执行jstat
.您将需要java进程的PID并可以使用它找到它jps -l
.
jstat -gcutil <PID>
Run Code Online (Sandbox Code Playgroud)
它会打印出这样的东西
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 0,00 69,34 0,00 14,48 17,19 0 0,000 0 0,000 0,000
Run Code Online (Sandbox Code Playgroud)
专注于伊甸园空间E
.该值是空间当前容量的百分比.有关详细信息,请查看jstat.
如果您反复执行该命令,您将看到伊甸园空间利用率不会增长.它保持在例如69,34
.我在Windows上使用类似linux的命令来以特定间隔重新运行命令.见watch.bat
现在打开 jconsole
jconsole <PID>
Run Code Online (Sandbox Code Playgroud)
并jstat
一次又一次地执行命令.您将看到伊甸园空间不断增长,直到达到最大值并且它被垃圾收集.
这是我输出jstat --gcutil <PID>
的间隔为1秒.专注于伊甸园空间E
.
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 0,00 67,42 0,00 14,48 17,19 0 0,000 0 0,000 0,000
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 0,00 67,42 0,00 14,48 17,19 0 0,000 0 0,000 0,000
# jconsole connected
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 81,64 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 84,66 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 89,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 91,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 93,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 95,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 96,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 98,71 7,57 92,26 84,87 1 0,001 0 0,000 0,001
# Garbage collected
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
100,00 0,00 1,13 14,06 94,75 89,26 2 0,003 0 0,000 0,003
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
100,00 0,00 3,00 14,06 94,75 89,26 2 0,003 0 0,000 0,003
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
100,00 0,00 5,75 14,06 94,75 89,26 2 0,003 0 0,000 0,003
Run Code Online (Sandbox Code Playgroud)
正如你所看到的......在连接到进程的jconsole之后,eden空间会逐渐增长并生长,直到它被垃圾收集.这导致锯齿形图案.这是一张快照jvisualvm
.
当您对tomcat进程执行相同操作时,您将发现类似的行为.唯一不同的是,即使没有连接jconsole,伊甸园空间也会略微增长.但这种轻微的增长并不是你所看到的锯齿形图案的原因.
这是jstat
我的tomcat 的输出.
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,33 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,33 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,43 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,43 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,43 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
Run Code Online (Sandbox Code Playgroud)
此输出持续36秒,直到您可以看到小内存更改.从70,43
到70,53
.
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,43 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,53 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,53 4,81 96,85 90,10 5 0,037 0 0,000 0,037
Run Code Online (Sandbox Code Playgroud)
因此,这个小小的改变是tomcat的后台进程唯一负责的事情.
PS:您还可以使用Memory Analyzer并不时获取堆转储,您会看到byte[]
由于RMI网络流量,阵列使用的内存量会增加.
归档时间: |
|
查看次数: |
814 次 |
最近记录: |