我想了解爲什麼Apache CXF在第一次初始化Web服務時就會跑開「做些什麼」。 「Something」可能是某種IO,我猜它試圖解析某種外部地址/模式/ DTD。在java應用程序中跟蹤IO?
所以我試圖找到某種鉤子,我可以監視所有的IO。無論是在虛擬機級別還是在操作系統級別(我可以在Linux和Windows上運行,但我不允許運行wireshark,理論上它有可能是文件IO)。
關於我如何追蹤發生了什麼的任何建議?
我想了解爲什麼Apache CXF在第一次初始化Web服務時就會跑開「做些什麼」。 「Something」可能是某種IO,我猜它試圖解析某種外部地址/模式/ DTD。在java應用程序中跟蹤IO?
所以我試圖找到某種鉤子,我可以監視所有的IO。無論是在虛擬機級別還是在操作系統級別(我可以在Linux和Windows上運行,但我不允許運行wireshark,理論上它有可能是文件IO)。
關於我如何追蹤發生了什麼的任何建議?
。您可以使用filemon窗口,它會列出所有文件訪問,並允許您對其進行過濾,所以你只能看到這些過程的你感興趣的內容。
貌似更多的最近版本的Windows Process Monitor的是前進的道路。
一種方法,如果你真的想知道發生了什麼是在Apache進程上運行'strace'或'ltrace'。有一個簡短的介紹here。有趣的是strace應該阻止某個呼叫,即等待I/O,如果你的假設是正確的。
要檢查某個進程正在使用哪些文件(和網絡套接字),請查看'lsof'。例如,要檢查哪些文件是由一定的進程打開:
lsof -p process_id # by PID
lsof -c httpd # by a process name
要檢查在一般的網絡連接,嘗試用「netstat」
除了與strace和Filemon的,其監視來自OS的應用程序級別,您可能還想給交互式分析器一個鏡頭。像Sun的免費VisualVM這樣的工具可以顯示各種方法被調用的頻率,以及生成和查看線程轉儲的簡單方法。這樣,你可以看到應用程序是否在你自己的代碼中旋轉,或者如果線程阻塞了等待一些從未完成的IO。
這是最有可能忙於解決WSDL,解析它,處理它,等....
其實,第一次,它也處理所有涉及裝載模式對於那些在Spring配置文件以及和驗證等等。
你也可以運行諸如wireshark之類的東西來跟蹤所有的網絡流量,看看它是否會出去獲取任何東西。
我正在從資源加載wsdl。但看起來你是對的。添加一些類加載,只需要很多時間。 – krosenvold 2009-01-20 09:22:02
您可以使用InTrace在JVM級別跟蹤您的應用程序。這將允許您確定啓動期間正在執行的Java代碼。這會使用Java代理在裝入類時將檢測添加到類中,因此可以爲所有正在使用的類生成方法入口/出口調用。
我實際上是在使用jprofiler,並發現IO在特定的方法中發生,但仍然無法完全看到發生了什麼。 – krosenvold 2009-01-16 08:05:46