JDK-8328478 : compiler\codecache\CheckCodeCacheInfo.java failed with `main' threw exception: java.lang.RuntimeException: 'nmethod blobs per compilation level [...] missing from stdout'
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 21-pool-oracle,23
  • Priority: P4
  • Status: Open
  • Resolution: Unresolved
  • OS: generic
  • Submitted: 2024-03-19
  • Updated: 2024-03-22
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 23
23Unresolved
Related Reports
Relates :  
Description
Can be reproduced in mainline intermittently (about 50%) with the following flags:
-XX:+UseSerialGC -Xlog:all=trace

result:
FailedExecution failed: `main' threw exception: java.lang.RuntimeException: 'nmethod blobs per compilation level:\nnone:\n #\d+ live = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\nsimple:\n #\d+ live = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\nlimited profile:\n #\d+ live = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\nfull profile:\n #\d+ live = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\nfull optimization:\n #\d+ live = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\nNon-nmethod blobs:\n #\d+ runtime = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\n #\d+ uncommon trap = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\n #\d+ deoptimization = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\n #\d+ adapter = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\n #\d+ buffer blob = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\n #\d+ other = \d+K( \(hdr \d+K \d+%, loc \d+K \d+%, code \d+K \d+%, stub \d+K \d+%, \[oops \d+K \d+%, metadata \d+K \d+%, data \d+K \d+%, pcs \d+K \d+%\]\))?\n' missing from stdout
Comments
Test was changed to accept more VM flags in JDK-8314837. Running with -Xlog:all=trace, there might be a higher chance that the regular expression matching fails due to interspersed output: nmethod blobs per compilation level: [...] Non-nmethod blobs: #64 runtime = 44K (hdr 7K 15%, loc 1K 4%, code 34K 77%, stub 0K 0%, [oops 0K 0%, metadata 0K 0%, data 0K 0%, pcs 0K 0%]) #1 uncommon trap = 0K (hdr 0K 18%, loc 0K 3%, code 0K 76%, stub 0K 0%, [oops 0K 0%, metadata 0K 0%, data 0K 0%, pcs 0K 0%]) #1 deoptimization = 2K (hdr 0K 4%, loc 0K 1%, code 2K 92%, stub 0K 0%, [oops 0K 0%, metadata 0K 0%, data 0K 0%, pcs 0K 0%]) #569 adapter = 509K (hdr 62K 12%, loc 52K 10%, code 388K 76%, stub 0K 0%, [oops 0K 0%, metadata 0K 0%, data 0K 0%, pcs 0K 0%]) [1.122s][debug][nmt ] Removed uncommitted region 'Thread Stack' (0x00007f8b4dfce000, 16384) Succeeded #13 buffer blob = 891K (hdr 1K 0%, loc 0K 0%, code 889K 99%, stub 0K 0%, [oops 0K 0%, metadata 0K 0%, data 0K 0%, pcs 0K 0%]) #4 other = 4K (hdr 0K 8%, loc 0K 1%, code 4K 88%, stub 0K 0%, [oops 0K 0%, metadata 0K 0%, data 0K 0%, pcs 0K 0%]) Note the nmt debug output being included in this segment of the log. The test JVM runs in Verbose mode, and appears to also print deoptimization information to the log, that could make the regular expression matching fail.
22-03-2024

On 21, the test fails since JDK-8286104 with no additional flags raised. It is possible that this issue is fixed after JDK-8293069 in 22. If we want to allow the test to run with additional flags raised, such as -Xlog:all=trace, then one possibility is limiting the ProcessBuilder: - pb = ProcessTools.createTestJavaProcessBuilder("-XX:+PrintCodeCache", - "-XX:+Verbose", - "-version"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder("-XX:+PrintCodeCache", + "-XX:+Verbose", + "-version"); I am not sure if it is worth doing.
22-03-2024