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

Yasumasa Suenaga yasuenag at gmail.com
Mon Jan 18 14:48:03 UTC 2016


I uploaded webrev:
   http://cr.openjdk.java.net/~ysuenaga/JDK-8147388/webrev.02/

This webrev can load java agent and native agent through JVMTI.agent_load dcmd.
Could you review again?


Thanks,

Yasumasa


On 2016/01/18 22:20, Dmitry Samersoff wrote:
> Yasumasa,
>
>> Can we use VLA (Variable Length Arrays) ?
>
> Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
> Target: x86_64-apple-darwin14.5.0
> Thread model: posix
>
> Compiles it just fine.
>
> -Dmitry
>
> On 2016-01-18 16:09, Yasumasa Suenaga wrote:
>> 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