RFR: JDK-8147388: Add diagnostic commands to attach JVMTI agent.

Yasumasa Suenaga yasuenag at gmail.com
Mon Jan 18 13:09:13 UTC 2016


Hi Dmitry,

> 1. It might be better to have one jcmd to run both java and native java
> agent. If agent library name ends with ".jar" we can assume it's java agent.

Okay, I'll try it.

> if (_libpath.value() == NULL) {
>     error ...
> }

I will add it.
However, I note you that _libpath is given mandatory flag.
http://mail.openjdk.java.net/pipermail/serviceability-dev/2016-January/018661.html

> char options[option_len];

Can we use VLA (Variable Length Arrays) ?
I'm worried that several C++ compiler cannot compile this code.
http://clang.llvm.org/compatibility.html#vla


Thanks,

Yasumasa


On 2016/01/18 19:38, Dmitry Samersoff wrote:
> Yasumasa,
>
> 1. It might be better to have one jcmd to run both java and native java
> agent. If agent library name ends with ".jar" we can assume it's java agent.
>
> 2. Please get rid of malloc/free and check _libpath.value() for NULL at
> ll. 295 and below.
>
>
> if (_libpath.value() == NULL) {
>     error ...
> }
>
> if (_option.value() == NULL) {
>     JvmtiExport::load_agent_library("instrument",
>                  "false", _libpath.value(), output());
>    return;
> }
>
> size_t option_len = \
>     strlen(_libpath.value()) + strlen(_option.value()) + 1;
>
> char options[option_len];
>
> ....
>
> -Dmitry
>
>
> On 2016-01-15 16:33, Yasumasa Suenaga wrote:
>> Hi,
>>
>> I added permissions and tests in new webrev:
>>    http://cr.openjdk.java.net/~ysuenaga/JDK-8147388/webrev.01/
>>
>> Two tests (LoadAgentDcmdTest, LoadJavaAgentDcmdTest) work fine.
>>
>>
>> Thanks,
>>
>> Yasumasa
>>
>>
>> On 2016/01/15 17:20, Staffan Larsen wrote:
>>> This is a good improvement overall.
>>>
>>> The new diagnostic commands need to have proper permissions set:
>>>
>>>      static const JavaPermission permission() {
>>>         JavaPermission p = {"java.lang.management.ManagementPermission",
>>>                            “control", NULL};
>>>        return p;
>>>     }
>>>
>>> And as David said: tests! See hotspot/test/serviceability/dcmd/jvmti.
>>>
>>> Thanks,
>>> /Staffan
>>>
>>>> On 14 jan. 2016, at 15:00, Yasumasa Suenaga <yasuenag at gmail.com> wrote:
>>>>
>>>> Hi all,
>>>>
>>>> We can use Attach API to attach JVMTI agent to live process.
>>>> However, we have to write Java code for it.
>>>>
>>>> If we can attach JVMTI agents through jcmd, it is very useful.
>>>> So I want to add two new diagnostic commands:
>>>>
>>>> * JVMTI.agent_load: Load JVMTI native agent.
>>>> * JVMTI.javaagent_load: Load JVMTI java agent.
>>>>
>>>> I maintain two JVMTI agents - HeapStats [1] and JLivePatcher [2].
>>>> [1] is native agent, [2] is java agent.
>>>> They provide a program for attaching to live process.
>>>>
>>>> I guess that various JVMTI agents provide own attach mechanism like
>>>> them.
>>>> I think that we should provide general way to attach.
>>>>
>>>> I've uploaded webrev. Could you review it?
>>>>    http://cr.openjdk.java.net/~ysuenaga/JDK-8147388/webrev.00/
>>>>
>>>> I'm jdk9 committer, however I cannot access JPRT.
>>>> So I need a sponsor.
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Yasumasa
>>>>
>>>>
>>>> [1] http://icedtea.classpath.org/wiki/HeapStats
>>>> [2] https://github.com/YaSuenag/jlivepatcher  (in Japanese)
>>>
>
>


More information about the serviceability-dev mailing list