DTrace Java API的脚本长度限制?

时间:2016-01-26 12:35:28

标签: java dtrace

我有一个Java程序,它使用Java DTrace API(Java DTrace API)在Solaris Sparc 10上构建和执行dtrace脚本。该脚本使用pid提供程序将探针放在所有函数的入口点上在一组库中,像这样(实际上有超过100个库,所以脚本很长):

pid1234:liba::entry,pid1234:libb::entry,pid1234:libc::entry {printf("%s", probemod);}

我的代码如下:

_consumer = new LocalConsumer();
_consumer.open(); 
// set the zdefs option to allow scripts with no probes
_consumer.setOption(org.opensolaris.os.dtrace.Option.zdefs);            
_consumer.compile(_dtraceScript); // where _dtraceScript is a string as described above

编译调用失败:

invalid probe specifier pid1234:liba::entry,pid1234:libb::entry...[truncated]

我已经完整地复制并粘贴了脚本并使用以下命令在命令行执行:

dtrace -n '...my script...'

...它运行正常,所以我知道我的脚本在语法上没有任何错误。

所以,两个问题/问题:

  1. 为什么编译失败?由于脚本在命令行上运行,但不是通过Java运行,我是否遇到了Java DTrace API的一些限制,比如脚本长度?或者JVM的内存不足,因为我试图启用这么多的探测器?
  2. 由于异常消息被截断(因为我的脚本太长),如何才能看到通常出现在异常消息末尾的dtrace错误?
  3. 任何建议都赞赏!

0 个答案:

没有答案