Skip to content

Fix JFR ModuleRequire and ModuleExport events - #22204

Merged
tajila merged 1 commit into
eclipse-openj9:masterfrom
thallium:jfr-gc-event
Jul 29, 2025
Merged

Fix JFR ModuleRequire and ModuleExport events#22204
tajila merged 1 commit into
eclipse-openj9:masterfrom
thallium:jfr-gc-event

Conversation

@thallium

@thallium thallium commented Jul 9, 2025

Copy link
Copy Markdown
Contributor

These two events are sampled events so we cannot use hooks. Instead, we iterate through classloaders and find reads and exports.

@thallium

thallium commented Jul 9, 2025

Copy link
Copy Markdown
Contributor Author

@tajila can you please review?

Comment thread runtime/vm/JFRConstantPoolTypes.hpp Outdated
Comment thread runtime/vm/JFRConstantPoolTypes.hpp
@tajila

tajila commented Jul 14, 2025

Copy link
Copy Markdown
Contributor

jenkins test sanity.functional xlinux jdk17

@tajila

tajila commented Jul 15, 2025

Copy link
Copy Markdown
Contributor

@thallium

13:44:24  Test result: PASSED
13:44:24  
13:44:24  Testing: runWorkload 2 - approx 2mins
13:44:24  Test start time: 2025/07/14 17:44:21 Coordinated Universal Time
13:44:24  Running command: "/home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/jdkbinary/j2sdk-image/bin/java"   -XX:StartFlightRecording --add-exports java.base/com.ibm.oti.vm=ALL-UNNAMED -cp /home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/aqa-tests/TKG/../../jvmtest/functional/cmdLineTests/jfr/jfr.jar org.openj9.test.WorkLoad 200 20000 200
13:44:24  Time spent starting: 4 milliseconds
13:47:02  Time spent executing: 160672 milliseconds
13:47:02  Test result: PASSED
13:47:02  
13:47:02  Testing: VM API Test - approx 2mins
13:47:02  Test start time: 2025/07/14 17:47:01 Coordinated Universal Time
13:47:02  Running command: "/home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/jdkbinary/j2sdk-image/bin/java"   --add-exports java.base/com.ibm.oti.vm=ALL-UNNAMED -cp /home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/aqa-tests/TKG/../../jvmtest/functional/cmdLineTests/jfr/jfr.jar org.openj9.test.VMAPITest
13:47:02  Time spent starting: 3 milliseconds
14:37:11  ***[TEST INFO 2025/07/14 18:37:01] ProcessKiller detected a timeout after 3000000 milliseconds!***
14:37:11  INFO: Cannot find '/usr/bin/gdb' using 'gdb' from the path.
14:37:11  ***[TEST INFO 2025/07/14 18:37:01] executing gdb -batch -x /tmp/debugger4369076396304733927.txt /home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/jdkbinary/j2sdk-image/bin/java 1486752***
14:37:11  java.io.IOException: Cannot run program "gdb": error=2, No such file or directory
14:37:11  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143)
14:37:11  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
14:37:11  	at java.base/java.lang.Runtime.exec(Runtime.java:594)
14:37:11  	at java.base/java.lang.Runtime.exec(Runtime.java:453)
14:37:11  	at Test$ProcessKiller.captureCoreForProcess(Test.java:697)
14:37:11  	at Test$ProcessKiller.captureCoreForProcess(Test.java:646)
14:37:11  	at Test$ProcessKiller.run(Test.java:596)
14:37:11  Caused by: java.io.IOException: error=2, No such file or directory
14:37:11  	at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:314)
14:37:11  	at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:244)
14:37:11  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110)
14:37:11  	... 6 more
14:37:11  ***[TEST INFO 2025/07/14 18:37:01] executing kill -ABRT 1486752***
14:37:11  ***[TEST INFO 2025/07/14 18:37:01] kill -ABRT signal sent***
14:42:02  ***[TEST INFO 2025/07/14 18:42:02] ABRT timed out***
14:42:02  ***[TEST INFO 2025/07/14 18:42:02] executing kill -9 1486752***
14:42:02  ***[TEST INFO 2025/07/14 18:42:02] kill -9 signal sent***
14:42:02  ***[TEST INFO 2025/07/14 18:42:02] ProcessKiller destroy test process after timeout***
14:42:02  Output from test:
14:42:02   [OUT] 0 / 200 complete.
14:42:02  Time spent executing: 3300223 milliseconds
14:42:02  Test result: FAILED
14:42:02  Output from test:
14:42:02  
14:42:02  Testing: VM API Test aggressive start and stop - approx 2mins
14:42:02  Test start time: 2025/07/14 18:42:02 Coordinated Universal Time
14:42:02  Running command: "/home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/jdkbinary/j2sdk-image/bin/java"   --add-exports java.base/com.ibm.oti.vm=ALL-UNNAMED -cp /home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/aqa-tests/TKG/../../jvmtest/functional/cmdLineTests/jfr/jfr.jar org.openj9.test.VMAPITest 1
14:42:02  Time spent starting: 5 milliseconds
15:32:11  ***[TEST INFO 2025/07/14 19:32:02] ProcessKiller detected a timeout after 3000000 milliseconds!***
15:32:11  INFO: Cannot find '/usr/bin/gdb' using 'gdb' from the path.
15:32:11  ***[TEST INFO 2025/07/14 19:32:02] executing gdb -batch -x /tmp/debugger2029911529568439282.txt /home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/jdkbinary/j2sdk-image/bin/java 1489350***
15:32:11  java.io.IOException: Cannot run program "gdb": error=2, No such file or directory
15:32:11  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143)
15:32:11  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
15:32:11  	at java.base/java.lang.Runtime.exec(Runtime.java:594)
15:32:11  	at java.base/java.lang.Runtime.exec(Runtime.java:453)
15:32:11  	at Test$ProcessKiller.captureCoreForProcess(Test.java:697)
15:32:11  	at Test$ProcessKiller.captureCoreForProcess(Test.java:646)
15:32:11  	at Test$ProcessKiller.run(Test.java:596)
15:32:11  Caused by: java.io.IOException: error=2, No such file or directory
15:32:11  	at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:314)
15:32:11  	at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:244)
15:32:11  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110)
15:32:11  	... 6 more
15:32:11  ***[TEST INFO 2025/07/14 19:32:02] executing kill -ABRT 1489350***
15:32:11  ***[TEST INFO 2025/07/14 19:32:02] kill -ABRT signal sent***
15:37:02  ***[TEST INFO 2025/07/14 19:37:02] ABRT timed out***
15:37:02  ***[TEST INFO 2025/07/14 19:37:02] executing kill -9 1489350***
15:37:02  ***[TEST INFO 2025/07/14 19:37:02] kill -9 signal sent***
15:37:02  ***[TEST INFO 2025/07/14 19:37:02] ProcessKiller destroy test process after timeout***
15:37:02  Output from test:
15:37:02   [OUT] 0 / 200 complete.
15:37:02  Time spent executing: 3300100 milliseconds
15:37:02  Test result: FAILED
15:37:02  Output from test:
15:37:02  
15:37:02  Testing: VM API Test2 - approx 2mins
15:37:02  Test start time: 2025/07/14 19:37:02 Coordinated Universal Time
15:37:02  Running command: "/home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/jdkbinary/j2sdk-image/bin/java"   --add-exports java.base/com.ibm.oti.vm=ALL-UNNAMED -cp /home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/aqa-tests/TKG/../../jvmtest/functional/cmdLineTests/jfr/jfr.jar org.openj9.test.VMAPITest2
15:37:02  Time spent starting: 2 milliseconds
16:27:11  ***[TEST INFO 2025/07/14 20:27:02] ProcessKiller detected a timeout after 3000000 milliseconds!***
16:27:11  INFO: Cannot find '/usr/bin/gdb' using 'gdb' from the path.
16:27:11  ***[TEST INFO 2025/07/14 20:27:02] executing gdb -batch -x /tmp/debugger18209469531356351245.txt /home/jenkins/workspace/Test_openjdk17_j9_sanity.functional_x86-64_linux_Personal_testList_1/jdkbinary/j2sdk-image/bin/java 1491908***
16:27:11  java.io.IOException: Cannot run program "gdb": error=2, No such file or directory
16:27:11  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143)
16:27:11  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
16:27:11  	at java.base/java.lang.Runtime.exec(Runtime.java:594)
16:27:11  	at java.base/java.lang.Runtime.exec(Runtime.java:453)
16:27:11  	at Test$ProcessKiller.captureCoreForProcess(Test.java:697)
16:27:11  	at Test$ProcessKiller.captureCoreForProcess(Test.java:646)
16:27:11  	at Test$ProcessKiller.run(Test.java:596)
16:27:11  Caused by: java.io.IOException: error=2, No such file or directory
16:27:11  	at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:314)
16:27:11  	at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:244)
16:27:11  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110)
16:27:11  	... 6 more
16:27:11  ***[TEST INFO 2025/07/14 20:27:02] executing kill -ABRT 1491908***
16:27:11  ***[TEST INFO 2025/07/14 20:27:02] kill -ABRT signal sent***
16:32:02  ***[TEST INFO 2025/07/14 20:32:02] ABRT timed out***
16:32:02  ***[TEST INFO 2025/07/14 20:32:02] executing kill -9 1491908***
16:32:02  ***[TEST INFO 2025/07/14 20:32:02] kill -9 signal sent***
16:32:02  ***[TEST INFO 2025/07/14 20:32:02] ProcessKiller destroy test process after timeout***
16:32:02  Output from test:
16:32:02   [OUT] 0 / 200 complete.
16:32:02  Time spent executing: 3300124 milliseconds
16:32:02  Test result: FAILED
16:32:02  Output from test:
16:32:02  

@thallium

Copy link
Copy Markdown
Contributor Author

@tajila how is the failure related? The output suggests gdb was not found. I couldn't think how this PR could cause that.

@tajila

tajila commented Jul 15, 2025

Copy link
Copy Markdown
Contributor

I think there was a hang, did it pass locally for you?

@thallium

Copy link
Copy Markdown
Contributor Author

Sorry I didn't realize that was a JFR test. I'm looking into it now.

@tajila

tajila commented Jul 16, 2025

Copy link
Copy Markdown
Contributor

jenkins test sanity.functional xlinux jdk17

@thallium

Copy link
Copy Markdown
Contributor Author

@tajila sorry, the hang is still there, I'll let you know when it's gone.

@thallium
thallium force-pushed the jfr-gc-event branch 2 times, most recently from b38f2e5 to d855598 Compare July 16, 2025 20:51
@thallium

Copy link
Copy Markdown
Contributor Author

Missed to call allClassLoadersEndDo, the hang is gone now. Can you launch the test again please? @tajila

Comment thread runtime/vm/JFRConstantPoolTypes.hpp Outdated
void loadModuleRequireAndModuleExportEvents()
{
#ifdef J9VM_THR_PREEMPTIVE
omrthread_monitor_enter(_vm->classLoaderBlocksMutex);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you dont need to acquire this lock, allClassLoadersStartDo does that for you

Comment thread runtime/vm/JFRConstantPoolTypes.hpp Outdated
{
#ifdef J9VM_THR_PREEMPTIVE
omrthread_monitor_enter(_vm->classLoaderBlocksMutex);
omrthread_monitor_enter(_vm->classLoaderModuleAndLocationMutex);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be acquired after allClassLoadersStartDo

These two events are sampled events so we cannot use hooks. Instead, we
iterate through classloaders and find reads and exports.

Signed-off-by: Gengchen Tuo <gengchen.tuo@ibm.com>
@tajila

tajila commented Jul 18, 2025

Copy link
Copy Markdown
Contributor

jenkins test sanity.functional xlinux jdk17

@tajila

tajila commented Jul 18, 2025

Copy link
Copy Markdown
Contributor

jenkins test sanity.functional alinux64 jdk21

@tajila
tajila merged commit 0ce30f4 into eclipse-openj9:master Jul 29, 2025
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants