Thread Native ID Access
mandy chung
mandy.chung at oracle.com
Thu Feb 22 01:13:03 UTC 2018
JDK 5 did very minimal for monitoring of native OS resources due to its
scope and also its platform-dependent nature. I don't have a good advice
how and where to expose them via Java SE API without further
investigation. A couple of things come to mind: - Should native threads
be exposed in Process API? - jdk.management module defines JDK extension
to java.lang.management API that might be a good place to list VM
threads. - other than VM threads and Java to native OS threads mapping,
any other items on your list for monitoring? Mandy [1]
http://download.java.net/java/jdk10/docs/api/jdk.management-summary.html
On 2/21/18 3:46 PM, Jeremy Manson wrote:
> Agreed that it is platform-dependent. That said, so is PID, and you > can now get that from java.lang.Process. And also, there is very >
little available in SIGQUIT thread dumps that you can't get >
programmatically, and this is one of the big ticket things (we also >
have a patch to export the list of VM threads; maybe that would be >
useful to expose somewhere). > > Although the nid is useful for
troubleshooting, it's more often used > for ongoing VM monitoring,
because you often want to map from Java > Thread to some native
resource, and the only way to do it is via > native thread id. For
examples of this sort of thing, on Linux, look > in
/proc/<pid>/task/<nid>. There's a lot of useful information in > there,
but how to map it to Java threads is non-obvious. > > At Google, we
added an interface to export the information, but I > would rather
relieve ourselves of the (relatively minor) technical > debt and
contribute to the community. > > I'm generally a little skeptical that
adding to a JDK-specific > diagnostic tool is the right solution. At
Google, at least, it can > be very, very difficult to apply those tools
at scale / integrate > them into existing monitoring tooling. When the
JDK has > functionality that is only available via one of these
commands, we > usually end up having to figure out what the command is
doing and > reimplement it. So, for example, we ended up with our own
parser for > hsperfdata. We end up relying on undocumented interfaces
that can go > away at the next JDK revision, and that's not good. > > I
have no problem with some other, documented interface for it that >
doesn't go through Thread/ThreadInfo, but we (at least) will end up >
needing something that isn't tied to a particular tool. > > As far as
the interaction of a feature like this with Fibers (or > other alternate
threading approaches, like Green threads): I wouldn't > be worried about
that. A fiber executes on an os thread. The only > thing that might
happen is that the os thread might change over time, > or that multiple
fibers might multiplex on the same os thread. If > you are worried about
the value changing, all you have to do is not > to cache it in the
Thread object. You wouldn't want to do that > anyway, because it would
be a waste of space for something that's > only needed occasionally. > >
Is there another way of doing the right thing here? > > Jeremy > > > >
On Wed, Feb 21, 2018 at 3:04 PM, mandy chung <mandy.chung at oracle.com >
<mailto:mandy.chung at oracle.com>> wrote: > > I'm not comfortable for
ThreadInfo to expose the implementation > details. What should we
specify w.r.t. Java Thread mapping to native > thread which is platform
dependent. Also how does it relate to the > future fibers [1]? > >
Another alternative is for JDK specific diagnostic tools to do that >
mapping for you for example jcmd, rather than exposing it in the API. >
I assume is that this is more about troubleshooting than on-going VM >
monitoring. > > Mandy [1] http://openjdk.java.net/projects/loom/ >
<http://openjdk.java.net/projects/loom/> > > > On 2/21/18 2:40 PM,
Jeremy Manson wrote: >> Hey folks, >> >> I mentioned earlier in the
thread about the ThreadInfo.from() bug >> that I found this because I
was looking at fixing JDK-8154176, >> which proposes introducing native
thread ids to Thread and >> ThreadInfo. >> >>
https://bugs.openjdk.java.net/browse/JDK-8154176 >>
<https://bugs.openjdk.java.net/browse/JDK-8154176> >> >> I have a
prototype for it. I have a couple of questions, though: >> >> 0) Does
anyone object to this being done or my doing it? I see >> that it
already has an owner. >> >> 1) Should the ID be a long? The Hotspot
thread dump prints it out >> as 0x%x, which is an unsigned hexadecimal
integer. The type hiding >> behind it is platform-dependent, though: a
pid_t on Linux, an >> unsigned long on Windows, a thread_t on Solaris. I
could make it a >> String instead... >> >> Jeremy > >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20180221/89be9ef9/attachment-0001.html>
More information about the serviceability-dev
mailing list