Protocol version of Attach API
David Holmes
david.holmes at oracle.com
Wed Feb 27 05:43:30 UTC 2019
Hi Yasumasa,
On 27/02/2019 1:05 pm, Yasumasa Suenaga wrote:
> Hi Lin,
>
> My proposal is a just idea, so you need to tweak it.
>
> AttachListener receives raw command.
> For example, jcmd is `jcmd\0<arg strings>`. Please see
> HotSpotVirtualMachine and extended classes.
>
> In case of jcmd, I guess AttachListener will receive message
> `<version>\0jcmd\0<args>\0\0\0` (I did not check it well).
> So I guess we can add '\0' when `str_count` does not reach to maximum.
I don't see how this approach can work. You have to know how many
arguments are coming in the "packet", but that information is not
available in the current Linux implementation.Without it you can't know
when to stop calling read().
The protocol would need to be changed to send the "packet" size, but
that's not compatible with older JDKs.
Otherwise I think we have no choice but to use a non-blocking read ...
though I'm still unsure if you can know for certain that you've reached
the end of the "packet" ...
Thanks,
David
>
> Thanks,
>
> Yasumasa
>
>
> On 2019/02/27 11:50, zanglin5 at jd.com wrote:
>> Dear Yasumasa,
>> The fix you mentioned seems not work as expected.
>> I have done an experiment that use jdk1.8's "jcmd <pid> help" to
>> attach to latest jdk.
>> it seem the whole "jcmd <pid> help" buffer is not
>> read completely at one time. in my case it is "jcmd", "<pid>",
>> "help", and then block at while().
>> After applied your change, it seems only the "jcmd" is processed,
>> the "<pid>", "help" is replaced by '\0'.
>>
>> BRs,
>> Lin
>>
More information about the serviceability-dev
mailing list