|
2 | 2 | // Licensed under the MIT License.
|
3 | 3 | package com.microsoft.gctoolkit.parser;
|
4 | 4 |
|
| 5 | +import com.microsoft.gctoolkit.event.GCCause; |
5 | 6 | import com.microsoft.gctoolkit.event.generational.AbortablePreClean;
|
6 | 7 | import com.microsoft.gctoolkit.event.generational.CMSRemark;
|
7 | 8 | import com.microsoft.gctoolkit.event.generational.ConcurrentMark;
|
|
11 | 12 | import com.microsoft.gctoolkit.event.generational.ConcurrentSweep;
|
12 | 13 | import com.microsoft.gctoolkit.event.generational.FullGC;
|
13 | 14 | import com.microsoft.gctoolkit.event.generational.InitialMark;
|
| 15 | +import com.microsoft.gctoolkit.event.generational.PSFullGC; |
14 | 16 | import com.microsoft.gctoolkit.event.generational.PSYoungGen;
|
15 | 17 | import com.microsoft.gctoolkit.event.generational.ParNew;
|
| 18 | +import com.microsoft.gctoolkit.event.generational.SystemGC; |
| 19 | +import com.microsoft.gctoolkit.event.generational.YoungGC; |
16 | 20 | import com.microsoft.gctoolkit.event.jvm.JVMEvent;
|
17 | 21 | import com.microsoft.gctoolkit.event.jvm.SurvivorRecord;
|
18 | 22 | import com.microsoft.gctoolkit.jvm.Diarizer;
|
19 | 23 | import com.microsoft.gctoolkit.parser.jvm.PreUnifiedDiarizer;
|
| 24 | +import com.microsoft.gctoolkit.time.DateTimeStamp; |
| 25 | + |
20 | 26 | import org.junit.jupiter.api.Assertions;
|
21 | 27 | import org.junit.jupiter.api.Test;
|
22 | 28 |
|
@@ -213,7 +219,196 @@ public void parallelYoungGenTest() {
|
213 | 219 | assertEquals(7, jvmEvents.size());
|
214 | 220 | assertEquals(103.387, getParser().diary.getTimeOfFirstEvent().toSeconds());
|
215 | 221 | }
|
216 |
| - |
| 222 | + |
| 223 | + @Test |
| 224 | + // jlittle-ptc: Added to validate changes in https://github.com/microsoft/gctoolkit/issues/433 |
| 225 | + // Fails without changes, passes with changes. |
| 226 | + public void psYoungNoDetailsTest() { |
| 227 | + String[] lines = { |
| 228 | + "13.563: [GC (Allocation Failure) 886080K->31608K(1986432K), 0.0392109 secs]", |
| 229 | + }; |
| 230 | + |
| 231 | + List<JVMEvent> jvmEvents = feedParser(lines); |
| 232 | + assertEquals(1, jvmEvents.size()); |
| 233 | + |
| 234 | + assertTrue(jvmEvents.get(0) instanceof PSYoungGen); |
| 235 | + |
| 236 | + PSYoungGen evt = (PSYoungGen) jvmEvents.get(0); |
| 237 | + assertMemoryPoolValues(evt.getHeap(), 886080, 1986432, 31608, 1986432); |
| 238 | + } |
| 239 | + |
| 240 | + @Test |
| 241 | + void testGenerationalNoDetailsLines() { |
| 242 | + String[] lines = { |
| 243 | + // 0 - Normal GC |
| 244 | + "75.240: [GC 525312K->16552K(2013696K), 0.1105640 secs]", |
| 245 | + |
| 246 | + // 1 - Full GC |
| 247 | + "8357.379: [Full GC 1379524K->1236761K(2787392K), 43.3665438 secs]", |
| 248 | + |
| 249 | + // 2 - InitialMark |
| 250 | + "25293.283: [GC 2548071K(3028408K), 0.0743383 secs]" |
| 251 | + }; |
| 252 | + |
| 253 | + int expectedEventCount = 3; |
| 254 | + |
| 255 | + List<JVMEvent> jvmEvents = feedParser(lines); |
| 256 | + assertEquals(jvmEvents.size(), expectedEventCount); |
| 257 | + |
| 258 | + // 0 - YoungGC |
| 259 | + assertTrue(jvmEvents.get(0) instanceof YoungGC); |
| 260 | + YoungGC evt0 = ((YoungGC) jvmEvents.get(0)); |
| 261 | + assertEquals(evt0.getDateTimeStamp(), new DateTimeStamp(75.240)); |
| 262 | + assertMemoryPoolValues(evt0.getHeap(), 525312, 2013696, 16552, 2013696); |
| 263 | + assertDoubleEquals(evt0.getDuration(), 0.1105640); |
| 264 | + |
| 265 | + // 1 - FullGC |
| 266 | + assertTrue(jvmEvents.get(1) instanceof FullGC); |
| 267 | + FullGC evt1 = ((FullGC) jvmEvents.get(1)); |
| 268 | + assertEquals(evt1.getDateTimeStamp(), new DateTimeStamp(8357.379)); |
| 269 | + assertMemoryPoolValues(evt1.getHeap(), 1379524, 2787392, 1236761, 2787392); |
| 270 | + assertDoubleEquals(evt1.getDuration(), 43.3665438); |
| 271 | + |
| 272 | + // 2 - InitialMark |
| 273 | + assertTrue(jvmEvents.get(2) instanceof InitialMark); |
| 274 | + InitialMark evt2 = ((InitialMark) jvmEvents.get(2)); |
| 275 | + assertEquals(evt2.getDateTimeStamp(), new DateTimeStamp(25293.283)); |
| 276 | + assertMemoryPoolValues(evt2.getHeap(), 2548071, 3028408, 2548071, 3028408); |
| 277 | + assertDoubleEquals(evt2.getDuration(), 0.0743383); |
| 278 | + } |
| 279 | + |
| 280 | + @Test |
| 281 | + void testCMSGenerationalNoDetailsLines() { |
| 282 | + String[] lines = { |
| 283 | + "13.563: [GC (Allocation Failure) 886080K->31608K(1986432K), 0.0392109 secs]", |
| 284 | + |
| 285 | + "23.331: [Full GC (Metadata GC Threshold) 17386K->16928K(415232K), 0.0498462 secs]" |
| 286 | + // Currently Ignored |
| 287 | + //"10.254: [GC (CMS Initial Mark) 460775K(1986432K), 0.0346332 secs]", |
| 288 | + //"15.423: [GC (CMS Final Remark) 168951K(1986432K), 0.0388223 secs]" |
| 289 | + }; |
| 290 | + |
| 291 | + int expectedEventCount = 2; |
| 292 | + |
| 293 | + List<JVMEvent> jvmEvents = feedParser(lines); |
| 294 | + assertEquals(jvmEvents.size(), expectedEventCount); |
| 295 | + |
| 296 | + // 0 - PSYoungGen |
| 297 | + assertTrue(jvmEvents.get(0) instanceof PSYoungGen); |
| 298 | + PSYoungGen evt0 = ((PSYoungGen) jvmEvents.get(0)); |
| 299 | + assertEquals(evt0.getDateTimeStamp(), new DateTimeStamp(13.563)); |
| 300 | + assertMemoryPoolValues(evt0.getHeap(), 886080, 1986432, 31608, 1986432); |
| 301 | + assertDoubleEquals(evt0.getDuration(), 0.0392109); |
| 302 | + |
| 303 | + // 1 - PSFullGC |
| 304 | + assertTrue(jvmEvents.get(1) instanceof FullGC); |
| 305 | + FullGC evt1 = ((FullGC) jvmEvents.get(1)); |
| 306 | + assertEquals(evt1.getDateTimeStamp(), new DateTimeStamp(23.331)); |
| 307 | + assertMemoryPoolValues(evt1.getHeap(), 17386, 415232, 16928, 415232); |
| 308 | + assertDoubleEquals(evt1.getDuration(), 0.0498462); |
| 309 | + } |
| 310 | + |
| 311 | + @Test |
| 312 | + void testGenerationalDetailsLines() { |
| 313 | + String[] lines = { |
| 314 | + // 0 - PSFullGC |
| 315 | + "2021-12-17T13:34:54.484+0000: 11.445: [Full GC (Metadata GC Threshold) [PSYoungGen: 19070K->0K(475648K)] [ParOldGen: 0K->18752K(1086976K)] 19070K->18752K(1562624K), [Metaspace: 20797K->20797K(1069056K)], 0.3274726 secs] [Times: user=0.11 sys=0.20, real=0.33 secs] ", |
| 316 | + |
| 317 | + // 1 - PSYoungGen |
| 318 | + "2021-12-17T13:35:02.874+0000: 19.835: [GC (Metadata GC Threshold) [PSYoungGen: 189709K->8219K(475648K)] 208461K->26971K(1562624K), 0.1027594 secs] [Times: user=0.09 sys=0.10, real=0.10 secs] ", |
| 319 | + |
| 320 | + // 2 - PSYoungGen |
| 321 | + "2021-12-17T13:35:24.328+0000: 41.289: [GC (Allocation Failure) [PSYoungGen: 408064K->37889K(475648K)] 442767K->72593K(1562624K), 0.2413144 secs] [Times: user=0.00 sys=0.24, real=0.24 secs] ", |
| 322 | + |
| 323 | + // 3 - PSYoungGen |
| 324 | + "2021-12-17T13:36:02.418+0000: 79.379: [GC (System.gc()) [PSYoungGen: 169657K->10443K(423936K)] 329477K->179021K(1510912K), 0.1649078 secs] [Times: user=0.02 sys=0.11, real=0.16 secs] ", |
| 325 | + |
| 326 | + // 4 - SystemGC |
| 327 | + "2021-12-17T13:36:02.583+0000: 79.544: [Full GC (System.gc()) [PSYoungGen: 10443K->0K(423936K)] [ParOldGen: 168577K->168475K(1086976K)] 179021K->168475K(1510912K), [Metaspace: 119955K->118885K(1155072K)], 1.2929194 secs] [Times: user=0.98 sys=0.25, real=1.29 secs] ", |
| 328 | + |
| 329 | + // 5 - PSFullGC |
| 330 | + "2021-12-17T14:58:05.098+0000: 5002.059: [Full GC (Ergonomics) [PSYoungGen: 60759K->0K(414208K)] [ParOldGen: 974100K->1024865K(1086976K)] 1034860K->1024865K(1501184K), [Metaspace: 154915K->154915K(1187840K)], 0.7945447 secs] [Times: user=0.68 sys=0.06, real=0.79 secs] " |
| 331 | + }; |
| 332 | + |
| 333 | + int expectedEventCount = 6; |
| 334 | + |
| 335 | + List<JVMEvent> jvmEvents = feedParser(lines); |
| 336 | + assertEquals(jvmEvents.size(), expectedEventCount); |
| 337 | + |
| 338 | + // 0 - PSFullGC |
| 339 | + assertTrue(jvmEvents.get(0) instanceof PSFullGC); |
| 340 | + PSFullGC evt0 = ((PSFullGC) jvmEvents.get(0)); |
| 341 | + assertEquals(evt0.getDateTimeStamp(), new DateTimeStamp("2021-12-17T13:34:54.484+0000", 11.445)); |
| 342 | + assertEquals(evt0.getGCCause(), GCCause.METADATA_GENERATION_THRESHOLD); |
| 343 | + // Memory Pools |
| 344 | + assertMemoryPoolValues(evt0.getHeap(), 19070, 1562624, 18752, 1562624); |
| 345 | + assertMemoryPoolValues(evt0.getYoung(), 19070, 475648, 0, 475648); |
| 346 | + assertMemoryPoolValues(evt0.getTenured(), 0, 1086976, 18752, 1086976); |
| 347 | + assertMemoryPoolValues(evt0.getPermOrMetaspace(), 20797, 1069056, 20797, 1069056); |
| 348 | + assertDoubleEquals(evt0.getDuration(), 0.3274726); |
| 349 | + assertCPUSummaryValues(evt0.getCpuSummary(), 0.11, 0.20, 0.33); |
| 350 | + |
| 351 | + // 1 - PSYoungGen |
| 352 | + assertTrue(jvmEvents.get(1) instanceof PSYoungGen); |
| 353 | + PSYoungGen evt1 = ((PSYoungGen) jvmEvents.get(1)); |
| 354 | + assertEquals(evt1.getDateTimeStamp(), new DateTimeStamp("2021-12-17T13:35:02.874+0000", 19.835)); |
| 355 | + assertEquals(evt1.getGCCause(), GCCause.METADATA_GENERATION_THRESHOLD); |
| 356 | + // Memory Pools |
| 357 | + assertMemoryPoolValues(evt1.getHeap(), 208461, 1562624, 26971, 1562624); |
| 358 | + assertMemoryPoolValues(evt1.getYoung(), 189709, 475648, 8219, 475648); |
| 359 | + assertDoubleEquals(evt1.getDuration(), 0.1027594); |
| 360 | + assertCPUSummaryValues(evt1.getCpuSummary(), 0.09, 0.10, 0.10); |
| 361 | + |
| 362 | + // 2 - PSYoungGen |
| 363 | + assertTrue(jvmEvents.get(2) instanceof PSYoungGen); |
| 364 | + PSYoungGen evt2 = ((PSYoungGen) jvmEvents.get(2)); |
| 365 | + assertEquals(evt2.getDateTimeStamp(), new DateTimeStamp("2021-12-17T13:35:24.328+0000", 41.289)); |
| 366 | + assertEquals(evt2.getGCCause(), GCCause.ALLOCATION_FAILURE); |
| 367 | + // Memory Pools |
| 368 | + assertMemoryPoolValues(evt2.getHeap(), 442767, 1562624, 72593, 1562624); |
| 369 | + assertMemoryPoolValues(evt2.getYoung(), 408064, 475648, 37889, 475648); |
| 370 | + assertDoubleEquals(evt2.getDuration(), 0.2413144); |
| 371 | + assertCPUSummaryValues(evt2.getCpuSummary(), 0.0, 0.24, 0.24); |
| 372 | + |
| 373 | + // 3 - PSYoungGen (SystemGC) |
| 374 | + assertTrue(jvmEvents.get(3) instanceof PSYoungGen); |
| 375 | + PSYoungGen evt3 = ((PSYoungGen) jvmEvents.get(3)); |
| 376 | + assertEquals(evt3.getDateTimeStamp(), new DateTimeStamp("2021-12-17T13:36:02.418+0000", 79.379)); |
| 377 | + assertEquals(evt3.getGCCause(), GCCause.JAVA_LANG_SYSTEM); |
| 378 | + // Memory Pools |
| 379 | + assertMemoryPoolValues(evt3.getHeap(), 329477, 1510912, 179021, 1510912); |
| 380 | + assertMemoryPoolValues(evt3.getYoung(), 169657, 423936, 10443, 423936); |
| 381 | + assertDoubleEquals(evt3.getDuration(), 0.1649078); |
| 382 | + assertCPUSummaryValues(evt3.getCpuSummary(), 0.02, 0.11, 0.16); |
| 383 | + |
| 384 | + // 4 - PSFullGC (SystemGC) |
| 385 | + assertTrue(jvmEvents.get(4) instanceof SystemGC); |
| 386 | + SystemGC evt4 = ((SystemGC) jvmEvents.get(4)); |
| 387 | + assertEquals(evt4.getDateTimeStamp(), new DateTimeStamp("2021-12-17T13:36:02.583+0000", 79.544)); |
| 388 | + assertEquals(evt4.getGCCause(), GCCause.JAVA_LANG_SYSTEM); |
| 389 | + // Memory Pools |
| 390 | + assertMemoryPoolValues(evt4.getHeap(), 179021, 1510912, 168475, 1510912); |
| 391 | + assertMemoryPoolValues(evt4.getYoung(), 10443, 423936, 0, 423936); |
| 392 | + assertMemoryPoolValues(evt4.getTenured(), 168577, 1086976, 168475, 1086976); |
| 393 | + assertMemoryPoolValues(evt4.getPermOrMetaspace(), 119955, 1155072, 118885, 1155072); |
| 394 | + assertDoubleEquals(evt4.getDuration(), 1.2929194); |
| 395 | + assertCPUSummaryValues(evt4.getCpuSummary(), 0.98, 0.25, 1.29); |
| 396 | + |
| 397 | + // 5 - PSFullGC (Ergonomics) |
| 398 | + assertTrue(jvmEvents.get(5) instanceof PSFullGC); |
| 399 | + PSFullGC evt5 = ((PSFullGC) jvmEvents.get(5)); |
| 400 | + assertEquals(evt5.getDateTimeStamp(), new DateTimeStamp("2021-12-17T14:58:05.098+0000", 5002.059)); |
| 401 | + assertEquals(evt5.getGCCause(), GCCause.ADAPTIVE_SIZE_POLICY); |
| 402 | + // Memory Pools |
| 403 | + assertMemoryPoolValues(evt5.getHeap(), 1034860, 1501184, 1024865, 1501184); |
| 404 | + assertMemoryPoolValues(evt5.getYoung(), 60759, 414208, 0, 414208); |
| 405 | + assertMemoryPoolValues(evt5.getTenured(), 974100, 1086976, 1024865, 1086976); |
| 406 | + assertMemoryPoolValues(evt5.getPermOrMetaspace(), 154915, 1187840, 154915, 1187840); |
| 407 | + assertDoubleEquals(evt5.getDuration(), 0.7945447); |
| 408 | + assertCPUSummaryValues(evt5.getCpuSummary(), 0.68, 0.06, 0.79); |
| 409 | + } |
| 410 | + |
| 411 | + |
217 | 412 | @Override
|
218 | 413 | protected Diarizer diarizer() {
|
219 | 414 | return new PreUnifiedDiarizer();
|
|
0 commit comments