- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Mac OS X 上,我可以通过运行找到运行 Java 程序的 HotSpot 探针:
cody.mello@ashur ~ (1) % sudo dtrace -ln 'hotspot*:::'
Password:
Invalid connection: com.apple.coresymbolicationd
ID PROVIDER MODULE FUNCTION NAME
165084 hotspot46 libjvm.dylib _ZN13instanceKlass15initialize_implE19instanceKlassHandleP6Thread [instanceKlass::initialize_impl(instanceKlassHandle, Thread*)] class-initialization-clinit
165085 hotspot46 libjvm.dylib _ZN13instanceKlass15initialize_implE19instanceKlassHandleP6Thread [instanceKlass::initialize_impl(instanceKlassHandle, Thread*)] class-initialization-concurrent
165086 hotspot46 libjvm.dylib _ZN13instanceKlass15initialize_implE19instanceKlassHandleP6Thread [instanceKlass::initialize_impl(instanceKlassHandle, Thread*)] class-initialization-end
165087 hotspot46 libjvm.dylib _ZN13instanceKlass15initialize_implE19instanceKlassHandleP6Thread [instanceKlass::initialize_impl(instanceKlassHandle, Thread*)] class-initialization-erroneous
165088 hotspot46 libjvm.dylib _ZN13instanceKlass15initialize_implE19instanceKlassHandleP6Thread [instanceKlass::initialize_impl(instanceKlassHandle, Thread*)] class-initialization-error
165089 hotspot46 libjvm.dylib _ZN13instanceKlass15initialize_implE19instanceKlassHandleP6Thread [instanceKlass::initialize_impl(instanceKlassHandle, Thread*)] class-initialization-recursive
...
但是如果我创建一个简单的 Java 程序并在 SmartOS 上运行它:
cody@101901c9-6d66-ea32-fe42-f1fbebd4bf99 ~ % cat Loop.java
class Loop {
public static void main(String[] args) throws InterruptedException {
while (true) {
Thread.sleep(5000);
}
}
}
cody@101901c9-6d66-ea32-fe42-f1fbebd4bf99 ~ % javac Loop.java
cody@101901c9-6d66-ea32-fe42-f1fbebd4bf99 ~ % java Loop
我找不到任何探测器:
cody@101901c9-6d66-ea32-fe42-f1fbebd4bf99 ~ (255) % pfexec dtrace -ln 'hotspot*:::'
ID PROVIDER MODULE FUNCTION NAME
dtrace: failed to match hotspot*:::: No probe matches description
我需要做什么特别的事情才能看到它们吗?
最佳答案
这里的问题是,在 SmartOS(和其他 illumos 变体——以及它们专有的 Solaris 同类产品)上,JVM 中的 DTrace 模块是延迟加载(也就是说,DOF 是用编译的-x 延迟加载
)。因此,在明确启用之前不会加载 DTrace 探测器。有两种方法可以解决这个问题。第一个是您可以告诉 DTrace 本身启用有问题的特定探测器,强制目标进程加载其探测器。这需要(至少)目标进程的 ID;在问题中提供的示例中说明这一点,它类似于:
% pfexec dtrace -ln 'hotspot*$target:::' -p `pgrep -fn "java Loop"`
这将获取 hotspot
(和 hotspot_jni
)USDT 探测,但它仍然使 jstack()
操作难以在充满毫无防备的 Java 进程的机器。 (也就是说,当你想在已知进程上使用 USDT 探测时,这会起作用,而不是当你想使用 ustack 帮助程序分析所有 Java 进程时。)如果这是你关心的问题,在 illumos 变体(SmartOS, OmniOS 等),您可以使用专为该任务设计的审计库有效地撤消 DTrace 探测器(和堆栈助手)的延迟加载。此库 -- /usr/lib/dtrace/libdtrace_forceload.so
及其 64 位变体 /usr/lib/dtrace/64/libdtrace_forceload.so
-- 将有效地强制在进程启动时加载 DTrace 探测器,为您提供 USDT 探测器和所有此类进程的 jstack()
操作。要为 32 位 JVM 执行此操作,请使用 LD_AUDIT_32
环境变量集启动 java
:
export LD_AUDIT_32=/usr/lib/dtrace/libdtrace_forceload.so
对于 64 位 JVM:
export LD_AUDIT_64=/usr/lib/dtrace/64/libdtrace_forceload.so
关于java - 如何在 SmartOS 上使用 HotSpot DTrace 探测器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166805/
如何使用 dtrace 访问函数的局部变量? 例如,在下面的代码片段中,我想使用 dtrace 了解变量 x 的值。 void foo(int a){ int x=some_fun(a);
我有一个 DTrace 探针捕获对函数的调用,该函数的参数之一是 CFStringRef。这是保存指向 unicode 字符串的指针的私有(private)结构。但 CFStringRef 本身并不是
DTrace令人印象深刻的强大的跟踪系统,最初来自 Solaris,但它被移植到 FreeBSD 和 Mac OSX。 DTrace 使用称为 D 的高级语言,与 AWK 或 C 不同。下面是一个示例
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
抱歉,标题很复杂,但这是我脚本的 dtrace 输出,我认为这将有助于解释我正在谈论的内容: 16384 1 38048
假设我的应用代码如下所示: #include int global_var; void change_var(){ global_var++; } int main(void){
我编写了一个 DTrace 脚本,用于测量在我的 C 程序中的一个函数内花费的时间。程序本身运行,输出一些数据然后退出。 问题是它完成了让我快速获取进程 ID 并启动 DTrace 的方法。 目前我的
dtrace 是否可用于多线程应用程序,我可以分析单个内核吗?如果是这样,有人会给我举个例子吗? 最佳答案 DTrace 非常适合锁分析,因为它能够根据需要动态检测锁事件。以下命令和提供程序可用于锁分
我有一台 2009 年中的 MacBook Pro 和一台新的 2012 MacBook Pro,我正在学习 DTrace(一个非常棒的工具)。当我在新的 2012 MBP 上计算聚合时,聚合不会打印
当我要求提供工具来分析 Rails 应用程序时,有人 pointed at DTrace .由于我在 MacOSX 工作站上工作并在 OpenSolaris 上进行部署,因此这是一种有效的方法。但我对
这个问题几乎概括了一切。 “dtrace 'print an associative array'” 在 Google 上只有一次点击,类似的搜索同样毫无用处。 编辑: 如果我使用聚合,我不知道我仍然
如果重要的话,我使用的是 Mac OS X,但我相信这适用于所有操作系统。如果每个操作系统的答案不同,我也会有兴趣了解这一点。 假设我打开一个终端窗口,启用几个探测器,并开始使用 DTrace 收集数
我在网上搜索可以帮助我进行流水线分析的东西。我在 http://www.webservertalk.com/message897404.html 上搜索并找到了一些东西 这个问题有两个部分;查找特定类
我正在使用 dtrace 打印代码中的所有 objc_msgSend。到目前为止,我可以看到选择器的名称,但无法获得正确的类名。 这是我的 dtrace 脚本: #!/usr/sbin/dtrace
我引入了一个环境选项,它会在启动时暂停我的进程,这样我就可以附加 dtrace(通过 XCode Instruments)并开始分析。然后我必须在进程上按 enter 键才能开始运行。我想知道我的进程
我在 dhcpagent 命令和测试中做了一些更改,它有点失败。现在我知道在 dhcpagent 退出之前到底调用了哪个函数。我想跟踪从 dhcpagent 到那个特定函数的控制让我们说 foo()。
我正在尝试测试 this script from oracle to get active NFS clients在 Ubuntu 10.04 上,但我无法让它运行。 为了实现这一点,我首先在 the
代码 dtrace -n 'syscall::read:entry /execname != "dtrace"/ { @reads[execname, fds[arg0].fi_pathname] =
我正在我的 restify.js 应用程序中跟踪 DTrace 探测器(重新确定它是 node.js 中提供 dtrace 支持的 http 服务器)。我正在使用 restify 文档中的示例 dtr
如何使用dtrace查看下面简单程序的调用堆栈、返回值和参数 /** Trival code **/ #include int foo (int *a, int *b) { *a
我是一名优秀的程序员,十分优秀!