5

我试图找出为什么 Apache CXF 在第一次初始化 Web 服务时会做“某事”。“某事”可能是某种 IO,我猜它正在尝试解析某种外部地址/模式/DTD。

所以我试图找到某种可以监控所有 IO 的钩子。在虚拟机级别或操作系统级别(我可以在 linux 和 windows 上运行,但我不允许运行 wireshark,理论上它可能是文件 IO)。

关于如何追踪正在发生的事情的任何建议?

4

5 回答 5

4

如果您真的想知道发生了什么,一种方法是在 apache 进程上运行“strace”或“ltrace”。这里有一个简短的介绍。有趣的是 strace 应该阻止某个调用,即如果您的假设正确,则等待 i/o。

要检查某个进程正在使用哪些文件(和网络套接字),请查看“lsof”。例如,要检查某个进程打开了哪些文件:

lsof -p process_id  # by PID
lsof -c httpd       # by a process name

要检查一般的网络连接,请尝试“netstat”

于 2009-01-15T09:06:05.990 回答
2

除了从操作系统级别监视应用程序的 strace 和 filemon 之外,您可能还想试一试交互式分析器。像 Sun 的免费VisualVM这样的工具可以显示各种方法的调用频率,以及生成和查看线程转储的简单方法。这样,您可以查看应用程序是否在您自己的代码中旋转,或者线程是否正在阻塞等待一些永远不会完成的 IO。

于 2009-01-15T19:44:13.627 回答
2

它很可能正忙于解析 WSDL、解析它、处理它等等......

实际上,第一次,它还处理所有涉及加载模式和验证等的 spring 配置文件。

你也可以运行类似wireshark的东西来跟踪所有的网络流量,看看它是否会得到任何东西。

于 2009-01-19T21:56:29.040 回答
2

在 Windows 上,您可以使用filemon,它会列出所有文件访问并允许您过滤它们,以便您只看到您感兴趣的进程。

看起来对于更新版本的 windows Process Monitor是前进的方向。

于 2009-01-15T08:53:26.683 回答
1

您可以使用InTrace在 JVM 级别跟踪您的应用程序。这将允许您识别在启动期间正在执行的 Java 代码。这使用 Java 代理在加载类时将检测添加到类,因此可以为所有正在使用的类生成方法进入/退出调用。

于 2011-06-19T22:15:35.890 回答