- 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/
谁能告诉我如何列出系统中当前事件的 systemtap 探测器? 我想可能有来自“/proc”的一些信息。 最佳答案 sysfs 有一个事件探测器的注册表: cat /sys/kernel/debug
希望了解 kubenetes 使用 3 种类型的探测器(启动、就绪和运行)检查 pod 的顺序。 如何正确理解或设计这 3 个探头以用于正常应用?如果启动探测器有错误条目,发生冲突或破坏应用程序的可能
我正在运行一个经常“崩溃”的电子商务网站。通常,我会看到大量打开的 session (正常情况下为 600-900,崩溃时为 5000-20000)。我想确定这些 session 的来源。 我正在尝试
在 Mac OS X 上,我可以通过运行找到运行 Java 程序的 HotSpot 探针: cody.mello@ashur ~ (1) % sudo dtrace -ln 'hotspot*:::'
我是一名优秀的程序员,十分优秀!