2009-01-15 150 views
4

我想了解爲什麼Apache CXF在第一次初始化Web服務時就會跑開「做些什麼」。 「Something」可能是某種IO,我猜它試圖解析某種外部地址/模式/ DTD。在java應用程序中跟蹤IO?

所以我試圖找到某種鉤子,我可以監視所有的IO。無論是在虛擬機級別還是在操作系統級別(我可以在Linux和Windows上運行,但我不允許運行wireshark,理論上它有可能是文件IO)。

關於我如何追蹤發生了什麼的任何建議?

回答

2

。您可以使用filemon窗口,它會列出所有文件訪問,並允許您對其進行過濾,所以你只能看到這些過程的你感興趣的內容。

貌似更多的最近版本的Windows Process Monitor的是前進的道路。

4

一種方法,如果你真的想知道發生了什麼是在Apache進程上運行'strace'或'ltrace'。有一個簡短的介紹here。有趣的是strace應該阻止某個呼叫,即等待I/O,如果你的假設是正確的。

要檢查某個進程正在使用哪些文件(和網絡套接字),請查看'lsof'。例如,要檢查哪些文件是由一定的進程打開:

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

要檢查在一般的網絡連接,嘗試用「netstat」

2

除了與strace和Filemon的,其監視來自OS的應用程序級別,您可能還想給交互式分析器一個鏡頭。像Sun的免費VisualVM這樣的工具可以顯示各種方法被調用的頻率,以及生成和查看線程轉儲的簡單方法。這樣,你可以看到應用程序是否在你自己的代碼中旋轉,或者如果線程阻塞了等待一些從未完成的IO。

+1

我實際上是在使用jprofiler,並發現IO在特定的方法中發生,但仍然無法完全看到發生了什麼。 – krosenvold 2009-01-16 08:05:46

2

這是最有可能忙於解決WSDL,解析它,處理它,等....

其實,第一次,它也處理所有涉及裝載模式對於那些在Spring配置文件以及和驗證等等。

你也可以運行諸如wireshark之​​類的東西來跟蹤所有的網絡流量,看看它是否會出去獲取任何東西。

+0

我正在從資源加載wsdl。但看起來你是對的。添加一些類加載,只需要很多時間。 – krosenvold 2009-01-20 09:22:02

1

您可以使用InTrace在JVM級別跟蹤您的應用程序。這將允許您確定啓動期間正在執行的Java代碼。這會使用Java代理在裝入類時將檢測添加到類中,因此可以爲所有正在使用的類生成方法入口/出口調用。