2010-05-12 50 views
2

我打算在生產weblogic(10)實例上使用jmap jdk1.5工具進行堆轉儲。Weblogic,JVM和EAR

實際上有3個EAR(也許更多,不知道我沒有訪問權限)部署在這個weblogic實例上。

有人告訴我「weblogic爲每個EAR創建一個JVM」 有人可以證實這一點嗎?

與jmap我需要jvm pid作爲參數做堆轉儲... 因爲我有3個EAR我想我有3個PID,所以我想知道如何知道哪個PID對應於哪個EAR JVM?

回答

7

不是 - 每個Weblogic服務器(或任何Java進程)都在它自己的JVM中運行,並帶有自己的PID。所以你所有的EAR都會出現在同一個堆轉儲中。

如果你在同一臺機器上運行多個WebLogic Server實例,每次都會有一個獨立的PID和一個單獨的進程

4

由於@josek說,你必須每WebLogic Server的一個JVM,因此,如果您所有的EARs在同一個WebLogic服務器下,只有一個pid可以轉儲。但是你可能仍然有多個服務器 - 可能是一個管理服務器和一個託管服務器,或許還有其他不相關的實例 - 所以如果你只是做一些像ps -ef | grep java(我假設這是在Unix上?),你可以看到很多pid,甚至如果你可以將它過濾到你的WebLogic的JDK_HOME。

確定哪個pid屬於特定服務器的一種方法是轉到<domains>/servers/<your server>/tmp目錄,並在那裏運行fuser -f <your server>.lok。這將列出與該服務器相關的所有進程的pid,其中之一將是JVM java進程。 (可能是其他公司的JDBC等)的一種方法找到剛纔java程序(!我敢肯定有人會指出另一種更好的方法)是一樣的東西:

cd <domains>/servers/<your server>/tmp 
ps -p "`fuser -f <your server>.lok 2>/dev/null`" | grep java 

如果每個EAR是在其自己的服務器,我想你必須看看config.xml來看看你需要什麼。