我是jstat工具的新手。因此,我做了如下示例。
./jstat -gcutil -t 4001 5000 Timestamp S0 S1 E O P YGC YGCT FGC FGCT GCT 565088.4 0.00 0.89 75.86 40.59 84.80 405 3.822 4 0.549 4.371 565093.4 0.00 0.89 77.81 40.59 84.80 405 3.822 4 0.549 4.371 565098.4 0.00 0.89 77.81 40.59 84.80 405 3.822 4 0.549 4.371 565103.5 0.00 0.89 77.85 40.59 84.80 405 3.822 4 0.549 4.371 565108.5 0.00 0.89 77.85 40.59 84.80 405 3.822 4 0.549 4.371 565113.4 0.00 0.89 77.85 40.59 84.80 405 3.822 4 0.549 4.371 jstat -gc output S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 704.0 704.0 0.4 0.0 6080.0 4013.8 14928.0 6335.2 21248.0 18019.6 436 3.957 4 0.549 4.506 704.0 704.0 0.4 0.0 6080.0 4016.6 14928.0 6335.2 21248.0 18019.6 436 3.957 4 0.549 4.506 704.0 704.0 0.4 0.0 6080.0 4135.4 14928.0 6335.2 21248.0 18019.6 436 3.957 4 0.549 4.506 704.0 704.0 0.4 0.0 6080.0 4135.4 14928.0 6335.2 21248.0 18019.6 436 3.957 4 0.549 4.506 704.0 704.0 0.4 0.0 6080.0 4135.4 14928.0 6335.2 21248.0 18019.6 436 3.957 4 0.549 4.506 704.0 704.0 0.4 0.0 6080.0 4135.4 14928.0 6335.2 21248.0 18019.6 436 3.957 4 0.549 4.506
结果表明什么?哪些列需要注意可能的内存问题,例如内存泄漏等。
请参阅文档:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
基本上,一行是一个时间点。这些列显示了有关JVM内存区域(Survivor,Eden等)的数据,如果不了解JVM的工作原理就无法理解它们。
这是JVM对象生成工作原理的摘录 :
Eden是创建新对象的地方。当伊甸园已满时,将small GC运行a:如果一个对象没有对其的引用,它将被删除,否则它将生存,并移至该Survivor空间(一次仅使用一个幸存者空间,所有对象来自其他空间复制到此处)。
Eden
small GC
Survivor
如果对象在一定数量的来回复制中幸存下来,则将其移至Old空间。如果旧空间已满,Full GC则会运行a,这会影响JVM中的所有对象,因此操作会繁重得多。
Old
Full GC
另外,还有存储Permanent“元数据”(类描述符,字段,方法,…描述符)的空间。
Permanent