SIGBUS on linux in perfMemory_init
Severin Gehwolf
sgehwolf at redhat.com
Thu May 5 10:05:38 UTC 2022
On Wed, 2022-05-04 at 12:13 -0700, Ioi Lam wrote:
> ====================================
>
> How about this:
>
> When a JVM starts up, it creates the hsperfdata with a UUID instead of
> PID. E.g.,
>
> /tmp/hsperfdata_user/0da29ace76f76f61
>
> Today, jps reads /proc/*/status to determine the NSpid, so we are doing
> a lot of processing already. Instead, we should read /proc/*/maps and
> scan for something with this pattern:
>
> 7ffb2536d000-7ffb25375000 rw-s ....
> /tmp/hsperfdata_user/0da29ace76f76f61
>
> If we can find this pattern, we know we have a JVM process that the
> current user can attach to.
>
> When attaching to this process, we will use this file instead
>
> /proc/$PID/root/tmp/.java_pid0da29ace76f76f61
>
> This should work with
>
> - shared /tmp across containers
> - nested containers
Wouldn't this break with the work-around Vitaly employed? I.e. using
-XX:+PerfDisableSharedMem
$ ps ax | grep java
10449 pts/4 Sl+ 0:00 ./build/linux-x86_64-normal-server-fastdebug/images/jdk/bin/java -XX:+PerfDisableSharedMem Hello
10744 pts/5 S+ 0:00 grep --color=auto java
$ grep hsperf /proc/10449/maps
$ jcmd 10449 VM.version
10449:
OpenJDK 64-Bit Server VM version 11.0.16-internal+0-adhoc.sgehwolf.jdk11u-dev
JDK 11.0.16
$ jcmd -l
10857 jdk.jcmd/sun.tools.jcmd.JCmd -l
Basically, by departing from using system identifiers, we need some
other way to discover the well known identifier.
Thanks,
Severin
More information about the hotspot-runtime-dev
mailing list