我试图找出为什么Apache CXF在第一次初始化Web服务时正在逃避“某事”。 “Something”可能是某种IO,我猜它正在尝试解析某种外部地址/架构/ DTD。
所以我试图找到一种可以监视所有IO的钩子。在虚拟机级别或操作系统级别(我可以在Linux和Windows上运行,但我不允许运行wireshark,理论上可能存在文件IO)。
关于如何追踪正在发生的事情的任何建议?
答案 0 :(得分:4)
如果你真的想知道发生什么事情的一种方法是在apache进程上运行'strace'或'ltrace'。有一个简短的介绍here。有趣的是,strace应该在某个调用中阻塞,即如果你的假设是正确的,则等待i / o。
要检查某个进程正在使用哪些文件(和网络套接字),请查看“lsof”。例如,要检查某个进程打开了哪些文件:
lsof -p process_id # by PID
lsof -c httpd # by a process name
要检查网络连接,请尝试'netstat'
答案 1 :(得分:2)
在Windows上,您可以使用filemon,它会列出所有文件访问权限并允许您对其进行过滤,以便您只看到您感兴趣的过程。
看起来更新版本的Windows Process Monitor是前进之路。
答案 2 :(得分:2)
除了从操作系统级别监视应用程序的strace和filemon之外,您可能还想为交互式探查器提供一个镜头。像Sun的免费VisualVM这样的工具可以显示调用各种方法的频率,以及生成和查看线程转储的简便方法。这样,您可以看到应用程序是否在您自己的代码中旋转,或者线程是否阻塞等待一些永远不会完成的IO。
答案 3 :(得分:2)
最有可能忙于解析WSDL,解析它,处理它等等。
实际上,第一次,它还处理所有弹簧配置文件,包括为那些加载模式以及验证等等。
您还可以运行wireshark之类的东西来跟踪所有网络流量,看看它是否可以获取任何内容。
答案 4 :(得分:1)
您可以使用InTrace在JVM级别跟踪应用程序。这将允许您识别启动期间正在执行的Java代码。这使用Java代理在加载类时向类添加检测,因此可以为所有正在使用的类生成方法入口/出口调用。