A Bug about the JVM Attach mechanism
David Holmes
david.holmes at oracle.com
Thu Jun 20 04:12:51 UTC 2019
On 19/06/2019 2:10 pm, nijiaben wrote:
> Hi,
>
> > Can you provide a bug number for this?
>
> I'm sorry, I made you misunderstand what I meant.
> I mean, I knew this problem before, but I didn't submit it to the JDK
> Bug System.
Okay.
> > Once we have attached and created the attach thread we don't need to
> > perform that initialization handshake because the attach thread exists
> > and will process any subsequent commands.
>
> I know this mechanism, can we provide means of recovery to avoid
> unavailability caused by accidental deletion?
Sorry I'm still not clear how deletion causes any problem after the
attach thread has been started ??
David
-----
> Thanks,
>
> nijiaben @ PerfMa
>
> ------------------ Original ------------------
> *From: * "David Holmes"<david.holmes at oracle.com>;
> *Date: * Thu, Jun 20, 2019 11:36 AM
> *To: * "nijiaben"<nijiaben at perfma.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
> Hi,
>
> On 19/06/2019 2:26 am, nijiaben wrote:
> > Hi, All,
> >
> > There is a bug that has been discovered for a long time, but it has not
> > been fixed.
>
> Can you provide a bug number for this?
>
> > We usually use some shell scripts to clean up the /tmp directory.
> > When we have executed a similar jstack command based on the attach
> > mechanism,
> > it will generate a .java_pidXXX socket file in the /tmp directory.
> > Once this file is clean up, and then will not be attached anymore.
> >
> > The main reason is that once the Attach Listener thread is created,
> > the file of “/tmp/.java_pidXXX” will be created and the markup
> > initialization is complete.
> > If .java_pidXXX is cleaned up, it will not be created anymore and cannot
> > be attached.
>
> Once we have attached and created the attach thread we don't need to
> perform that initialization handshake because the attach thread exists
> and will process any subsequent commands.
>
> David
> -----
>
>
> >
> > bool AttachListener::is_init_trigger() {
> > if (init_at_startup() || is_initialized()) { // initialized at startup
> > or already initialized
> > return false;
> > }
> > char fn[PATH_MAX+1];
> > sprintf(fn, ".attach_pid%d", os::current_process_id());
> > int ret;
> > struct stat64 st;
> > RESTARTABLE(::stat64(fn, &st), ret);
> > if (ret == -1) {
> > snprintf(fn, sizeof(fn), "%s/.attach_pid%d",
> > os::get_temp_directory(), os::current_process_id());
> > RESTARTABLE(::stat64(fn, &st), ret);
> > }
> > if (ret == 0) {
> > if (st.st_uid == geteuid()) {
> > init(); // will create Attach Listener Thread
> > return true;
> > }
> > }
> > return false;
> > }
> >
> > This bug has a big impact on troubleshooting some problems.
> > Can it be fixed as soon as possible?
> >
> > Thanks,
> >
> > nijiaben @ PerfMa
> >
More information about the jdk8u-dev
mailing list