A Bug about the JVM Attach mechanism

Chris Plummer chris.plummer at oracle.com
Fri Jun 21 20:31:19 UTC 2019


On 6/21/19 12:14 PM, Peter Levart wrote:
> On 6/21/19 8:38 PM, Chris Plummer wrote:
>> On 6/21/19 8:57 AM, David Holmes wrote:
>>> Hi Peter,
>>>
>>> On 21/06/2019 7:55 am, Peter Levart wrote:
>>>> As far as I know, cron jobs that cleanup /tmp typically remove 
>>>> files that have not been modified for a while.
>>>>
>>>> On Fedora for example, there is a systemd timer that triggers once 
>>>> per day and executes systemd-tmpfiles which manages volatile and 
>>>> temporary files and directories. The configuration for /tmp is the 
>>>> following:
>>>>
>>>> # Clear tmp directories separately, to make them easier to override
>>>> q /tmp 1777 root root 10d
>>>> q /var/tmp 1777 root root 30d
>>>>
>>>> The age field (10 days for /tmp) has the following meaning:
>>>>
>>>>         The age of a file system entry is determined from its last 
>>>> modification timestamp (mtime), its last access timestamp (atime), 
>>>> and (except for directories) its last status change
>>>>         timestamp (ctime). Any of these three (or two) values will 
>>>> prevent cleanup if it is more recent than the current time minus 
>>>> the age field.
>>>>
>>>> So the solution could be for attach thread (if it is already 
>>>> started) to update mtime or ctime of the .java_pid<pid> socket file 
>>>> periodically so cleanup job would leave it alone.
>>>>
>>>> What do you think?
>>>
>>> I'm not keen on having the attach listener thread periodically 
>>> wakeup just to do this. Can we not change permissions to protect the 
>>> file form external deletion and ensure the VM cleans it up itself?
>> I think the JVM has a mechanism for cleaning up stale java_pid files 
>> on startup (deleting those for which there is currently no java 
>> process running). We need to make sure that changing permissions does 
>> not break that.
>>
>> Rather than  having the JVM update mtime on the file, perhaps the 
>> onus should be on the sys admin that is running scripts to clean up 
>> these files in the first place. The scripts could first update mtime 
>> on an java_pid files for which there is a java process still running.
>
> Problem is that those scripts are usually already set-up by default.
>
> OTOH it is relatively easy to create exceptions for files with a 
> particular pattern. If /tmp/.java_pid* files are already managed by 
> java launcher at every execution, then they need not be managed by a 
> cron job. So there exists a workaround. It would only be more 
> convenient if it was not needed.
I'm starting to second guess my thinking that there is any such 
.java_pid removal support. I thought I saw it once, but can't find it 
now. All I can find is that AttachListener::vm_start() will remove any 
stale .java_pid file in place for the current pid. And judging by the 
large collection of .java_pid files on my linux dev box, I doubt there 
is any removal.

What I might have been remembering is perfdata file removal. In 
/tmp/hsperfdata_<uid>/ I'm only seeing perfdata files for existing java 
processes.

Chris
>
> Regards, Peter
>
>>
>> Chris
>>>
>>> David
>>>
>>>> Regards, Peter
>>>>
>>>>
>>>> On 6/20/19 10:49 PM, David Holmes wrote:
>>>>> Sorry it took me a while to understand the specifics of the 
>>>>> problem. :)
>>>>>
>>>>> David
>>>>>
>>>>> On 20/06/2019 3:37 am, nijiaben wrote:
>>>>>> Yes Alan, I mean this
>>>>>> ------------------ Original ------------------
>>>>>> *From: * "Alan Bateman"<Alan.Bateman at oracle.com>;
>>>>>> *Date: * Thu, Jun 20, 2019 02:54 PM
>>>>>> *To: * "nijiaben"<nijiaben at perfma.com>; "David 
>>>>>> Holmes"<david.holmes at oracle.com>; 
>>>>>> "serviceability-dev"<serviceability-dev at openjdk.java.net>; 
>>>>>> "jdk8u-dev"<jdk8u-dev at openjdk.java.net>; 
>>>>>> "hotspot-runtime-dev"<hotspot-runtime-dev at openjdk.java.net>;
>>>>>> *Subject: * Re: A Bug about the JVM Attach mechanism
>>>>>> On 20/06/2019 05:10, nijiaben wrote:
>>>>>>  > :
>>>>>>  > I know this mechanism, can we provide means of recovery to 
>>>>>> avoid unavailability caused by accidental deletion?
>>>>>>  >
>>>>>> Are you concerned about tmpreaper or cron jobs that periodically 
>>>>>> cleanup
>>>>>> /tmp? There may indeed be an issue for applications that run for 
>>>>>> weeks
>>>>>> or months. If someone is using jmap, jcmd or other tools using the
>>>>>> attach API then it will trigger the attach listener to start. 
>>>>>> When they
>>>>>> come back in a few weeks then the .java_pid<pid> file may have been
>>>>>> removed so they cannot attach. Is this what what you are pointing 
>>>>>> out?
>>>>>>
>>>>>> -Alan
>>>>
>>
>>
>




More information about the jdk8u-dev mailing list