2010-05-12 90 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来看看你需要什么。