我打算在生产 weblogic (10) 实例上使用 jmap jdk1.5 工具进行堆转储。
实际上在这个 weblogic 实例上部署了 3 个 EAR(也许更多,真的不知道我没有访问权限)。
有人告诉我“weblogic 为每个 EAR 创建一个 JVM”有人可以证实这一点吗?
使用 jmap 我需要 jvm pid 作为参数来进行堆转储......因为我有 3 个 EAR 我想我有 3 个 pid 所以我想知道如何知道哪个 pid 对应于哪个 EAR JVM?
我打算在生产 weblogic (10) 实例上使用 jmap jdk1.5 工具进行堆转储。
实际上在这个 weblogic 实例上部署了 3 个 EAR(也许更多,真的不知道我没有访问权限)。
有人告诉我“weblogic 为每个 EAR 创建一个 JVM”有人可以证实这一点吗?
使用 jmap 我需要 jvm pid 作为参数来进行堆转储......因为我有 3 个 EAR 我想我有 3 个 pid 所以我想知道如何知道哪个 pid 对应于哪个 EAR JVM?
不——每个 Weblogic 服务器(或任何 Java 进程)都在其自己的 JVM 中运行,并具有自己的 PID。因此,您所有的 EAR 都将出现在同一个堆转储中。
如果您在同一台机器上运行多个 Weblogic 服务器实例,每个实例将有一个单独的 PID 和一个单独的进程
正如@josek 所说,每个 WebLogic 服务器将有一个 JVM,因此如果所有 EAR 都在同一个 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 以了解您需要哪个。