HotSpot Serviceability Agent for BSD
Swamy Venkataramanappa
Swamy.Venkataramanappa at Sun.COM
Wed Feb 4 14:22:26 PST 2009
Hi Greg and Brain,
Thanks for porting the Serviceability Agent for BSD. I briefly looked
at the patch code and it looks
good. Regarding issue #1. I suspect the problem is in the detach code:
+// detach all pids of a ps_prochandle
+static void detach_all_pids(struct ps_prochandle* ph) {
+ thread_info* thr = ph->threads;
+ while (thr) {
+ ptrace_detach(thr->lwp_id);
+ thr = thr->next;
+ }
+}
On linux we need to call ptrace(DETACH) for all the threads. This not
required for other unix
OS. It depends on how threads are implemented in the OS. I guess for BSD
you just need to
call ptrace(DETACH) for process id once.
I am currently maintaining the Serviceability agent code at Sun. If you
need any help let me
know.
Thanks,
Swamy
Brian Gardner wrote:
> Great Greg,
> I'll check out #1 for you later in the week after I release another
> version of my openjdk6 patch. :)
>
> Brian
>
> Greg Lewis wrote:
>
>> I've been toying with the idea of porting the HotSpot Serviceability Agent
>> (http://openjdk.java.net/groups/hotspot/docs/Serviceability.html) to BSD
>> for a while now.
>>
>> Brian Gardner's work on getting jmap -dump and jmap -histo to work for
>> FreeBSD's jdk16 port catalysed this. A work in progress patch is
>> available at http://www.eyesbeyond.com/freebsddom/java/saproc.diff
>> This allows me to use the other jmap options (-finalizerinfo, -heap,
>> -permstat) and allows jinfo to work. It should also get jsadebugd
>> to work, but I haven't tried that yet.
>>
>> The patch is for OpenJDK7 and includes changes based in part on
>> Brian's work (so jmap -dump and jmap -histo work as well).
>>
>> There are some serious caveats so far though.
>>
>> 1. The Java process being attached to appears to be killed after the
>> attachment completes. So I can, for example, run 'jmap -permstat <pid>'
>> and get the expected output, but then <pid> dies. I haven't looked
>> into this yet, but its obviously a big problem :).
>>
>> 2. It works on FreeBSD 7.x only since it uses the undocumented
>> kinfo_getvmmap function to look up information about the shared
>> libraries that the process has open. I suspect we can do something
>> with libkvm for OpenBSD and NetBSD. Anyone know how to do this on
>> Mac OS X? On Linux (which is what I ported against) this is done
>> by looking at /proc/<pid>/maps. Better suggestions?
>>
>> 3. It includes the hsearch_r source from GNU libc since BSD doesn't have
>> this. I don't think this is a problem license wise, but in case it is
>> I think we can come up with something similar that is available on
>> BSD. I just grabbed it 'cos it was simpler at the time to keep things
>> as close to the Linux version as was reasonable.
>>
>> For me this moves us towards closing one of our only feature gaps (as I
>> see it). But it definitely needs some more review and fixing, so all
>> comments, patches, etc. appreciated.
>>
>>
>>
>
>
More information about the bsd-port-dev
mailing list