On Tue, 12 Jul 2022 22:39:36 GMT, Ioi Lam <ik...@openjdk.org> wrote:

>> Some Kubernetes setups share the /tmp directory across multiple containers. 
>> On rare occasions, the JVM may crash when it tries to write to 
>> `/tmp/hsperfdata_<user>/<pid>` when a process in a separate container 
>> decides to do the same thing (because they happen to have the same 
>> namespaced pid).
>> 
>> This patch avoids the crash by using `flock()` to allow only one of these 
>> processes to write to the file. All other competing processes that fail to 
>> grab the lock will give up the file and run with PerfMemory disabled. We 
>> will try to enable PerfMemory for the failed processes in a follow-up RFE: 
>> [JDK-8289883](https://bugs.openjdk.org/browse/JDK-8289883)
>> 
>> Thanks to Vitaly Davidovich and Nico Williams for coming up with the idea of 
>> using `flock()`.
>> 
>> I kept the use of `kill()` for stale file detection to be compatible with 
>> older JVMs.
>> 
>> I also took the opportunity to clean up the comments and remove dead code. 
>> The old code was using "shared memory resources" which sounds unclear and 
>> odd. I changed the terminology to say "shared memory file" instead.
>
> Ioi Lam has updated the pull request incrementally with two additional 
> commits since the last revision:
> 
>  - add errno to log
>  - added debug log and tweaked comment

test/hotspot/jtreg/containers/docker/ShareTmpDir.java line 124:

> 122:             // This should be the common case -- the first started 
> process in a container should
> 123:             // have pid==1.
> 124:             // One of the two contains must fail to create the hsperf 
> file.

`s/contains/containers/`

-------------

PR: https://git.openjdk.org/jdk/pull/9406

Reply via email to