Hi, All,
There is a bug that has been discovered for a long time, but it has not been
fixed.
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.
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