WLS 的异常高 CPU 占用率2

上一篇 / 下一篇  2008-12-16 23:34:12 / 个人分类:Weblogic

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP
Solaris51Testing软件测试网?1X7c9cC*VZ

uIJRjIV$|4p v0Java 进程中运行 prstat命令。重复几次这个操作,以便您能够看到一种模式。例如:prstat -L -p <PID> 1 151Testing软件测试网D:k7c%q^4ZmR
在 Java 进程中运行 pstack命令以获得从轻量型进程 (LWP) 到 PID(进程 ID)的映射。
Ofl\!~8`0示例:pstack 9499 并将输出结果重定向到一个文件。51Testing软件测试网 v6_$Bb*u m#K:dn
如果您使用 Solaris 中的常规线程库(即,在 LD_LIBRARY_PATH 中没有 /usr/lib/lwp),LWP 就不会直接映射到操作系统线程,因此您必须从进程中执行 pstack(所以检查看您是否正在使用替代线程库)。51Testing软件测试网"md"e3y~
经过一段时间后对服务器进行若干 Thread Dump,确保您执行正确的线程。
vVw8J-VA w0您可以通过在 Java 进程中执行 kill -3 <PID>来达到此目的。
v/RS,Z'|;I,a'b4w5m,l&?0将 LWP ID 映射到 Java 线程 ID。51Testing软件测试网8w)]%m9d'Y{X ?y4r8Y
例如,如果上述的 LWP 为“8”,它可以映射到 Java 线程“76”。然后将 76 换算为十六进制值 0x4c。
%q6Y)O9A*s$b0检查 Thread Dump,找到匹配“nid= <上述标识符/值>”的线程。51Testing软件测试网ER-B"O9[+O
在本示例中,您找到匹配“nid=0x4c”的线程,而该线程就是正在消耗 CPU 资源的那个线程。51Testing软件测试网d.K~0N\)HS(d
您将需要:
lq5y md#k0确定为什么在您的代码中会发生这个问题51Testing软件测试网v Pf9M+u j9E
51Testing软件测试网,`pF}k3mq)?*d
或者,如果堆栈的最顶端输出来自 WebLogic,请与 BEA 客户支持部门联系。
y2ZO+E1C.P#HNY$o0下面是 Solaris 系统中上述进程的一个示例:
~`(T ca8Y/z0在 Java 进程中运行 prstat 命令。
sm o:fx3u+R V+u051Testing软件测试网3|Ueto5Uh

$ prstat -L -p 9499 1 1
%n)adh|{m4K&c0PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/LWPID
N |,m$]K7h-O*d(h0?09499 usera 153M 100M sleep 58 0 0:00.22 0.6% java/8
aL4J'u"x09499 usera 153M 100M sleep 58 0 0:00.10 0.2% java/1051Testing软件测试网5{q.HAZ
9499 usera 153M 100M sleep 58 0 0:00.11 0.1% java/9
GLyZw S AN z09499 usera 153M 100M sleep 58 0 0:00.03 0.0% java/551Testing软件测试网NQZlmc%Yu
9499 usera 153M 100M sleep 58 0 0:01.01 0.0% java/1
8K.P8c?H2wko09499 usera 153M 100M sleep 58 0 0:00.00 0.0% java/12
5_+wHa@z*_R0eo09499 usera 153M 100M sleep 58 0 0:00.00 0.0% java/1151Testing软件测试网f-EP5lT6BE+L ^
9499 usera 153M 100M sleep 58 0 0:00.00 0.0% java/14
!u8iJSE1N3zv09499 usera 153M 100M sleep 58 0 0:00.00 0.0% java/1351Testing软件测试网i@I+r,S#\/T J{ E
9499 usera 153M 100M sleep 59 0 0:00.07 0.0% java/751Testing软件测试网'{A\'T-?%?h\3c
9499 usera 153M 100M sleep 59 0 0:00.00 0.0% java/6
x_-x|5?*ju09499 usera 153M 100M sleep 59 0 0:00.00 0.0% java/451Testing软件测试网b_%B2| m(k O0tK7|
9499 usera 153M 100M sleep 58 0 0:00.11 0.0% java/351Testing软件测试网$m%y\{/MEm
9499 usera 153M 100M sleep 58 0 0:00.00 0.0% java/2
BQ&I9Qs&]'M6D0
I1K/|8lciaC0运行 pstack 命令。
I M/\+iRjB!E;x0示例:pstack 9499 并将输出结果重定向到一个文件。
-hF&F&|1R(P_0如果您使用 Solaris 中的常规线程库(即,在 LD_LIBRARY_PATH 中没有 /usr/lib/lwp),LWP 就不会直接映射到操作系统线程,因此您必须从进程中执行 pstack(所以检查看您是否正在使用替代线程库)。51Testing软件测试网p UH ~"V G5YA0m

X I*Jpc7SQ+G9d mi0上述示例显示“java/8”进程在 prstat 的顶端。51Testing软件测试网rk)T)X){t4n

4K(i3X Y+fb#e2|M o-S0为“lwp# 8”检验 pstack输出结果。51Testing软件测试网0tLB3`xf(b
您会发现“lwp# 8”从 pstack 输出结果映射到“thread# 76”,如下所示。


lwp# 8 / thread# 76
ff29d190 poll (e2e81548, 0, bb8)51Testing软件测试网c }6ig P"]1a `
ff24d154 select (0, 0, 0, e2e81548, ff2bf1b4, e2e81548) + 348
_%Mt'R f,kI0ff36b134 select (0, bb8, 7fffffff, fe4c8000, 0, bb8) + 3451Testing软件测试网/{!ro.E9yb-s
fe0f62e4 __1cCosFsleep6FpnGThread_xl_i_ (0, bb8, fe4c8000, 1, 0, 1e2fd8) + 23451Testing软件测试网3~ ]?}yFU
fe23f050 JVM_Sleep (2, 0, bb8, fe4de978, fe4c8000, 1e2fd8) + 22c51Testing软件测试网#T+K,V)l%p/eo+M
0008f7ac ???????? (e2e818d4, bb8, 1e2fd8, 984a4, 0, 109a0)51Testing软件测试网|/`C/Te c%i9|4q
0008c914 ???????? (e2e8194c, 1, fe4d6a80, 98564, 8, e2e81868)
n6~]pc;\)j@:M%T0fe5324e8 __1cMStubRoutinesG_code1_ (e2e819d8, e2e81c10, a, f6cb5000, 4, e2e818f0) + 3ec51Testing软件测试网,{'q7A7]7l3K?-P#U
fe0cbe94 __1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_ (e2e81c08,fe4c8000, e2e81b54, 1e2fd8, 8e764, e2e81c10) +30851Testing软件测试网 t s,rO.D*^9V {.{
fe1f6dbc __1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandlee81c08, e2e81b54) + 150pnGThread__v_(f6cb64b8, e2e81b40, e2e81b44, fe4c8000, e2d8) + 60e_5pnGThread__v_ (e2e81c08, e2e81c04, e2e81c00,e2e81bf4, e2e81bec, 1e2f8000, e2e81d10, 1e, e) + 120FpnKJavaThread_pnGThread__v_ (f6817ff8, 1e2fd8, fe4c51Testing软件测试网pc+c u$RV3M _W"v
7fd70) + 3d8cKJavaThreadDrun6M_v_ (e2e02000, fe4d3e34, fe4c8000, 7fd70, 1e2fd8,51Testing软件测试网.I0} lU#b%g/`)y
fe213ec8 _start (fe4c8000, fe625d10, 0, 5, 1, fe401000) + 2051Testing软件测试网t~1D1Y_
ff36b728 _thread_start (1e2fd8, 0, 0, 0, 0, 0) + 40
O S9KfO6r0
~1~Qf ~*H L"ws%Z0通过在 Java 进程中执行以下命令对服务器进行 Thread Dump:
;TB AE[ ty0kill -3 <PID>。
1@ES[w0由于 lwp# 8 映射到 thread #76,您可以将 76 换算为十六进制值 4c。
0n#o]@N lr)M0该值映射到 JVM Thread Dump 中的 nid=0x4c:51Testing软件测试网 x iwWgo2f@7`

2p@q#w1L*W@0"Thread-6" prio=5 tid=0x1e2fd8 nid=0x4c waiting on monitorhttp://0xe2e81000..0xe2e819d851Testing软件测试网c5X |}2q Bo*MH
at java.lang.Thread.sleep(Native Method)51Testing软件测试网3|XN%Eb2R%l4Bb
at weblogic.management.deploy.GenericAppPoller.run(GenericAppPoller.java:139)51Testing软件测试网4U(o%w"\ j \f#?s;`kf @
51Testing软件测试网'pspIw(H
在此示例中,占用最多 CPU 资源的线程实际上正处于休眠状态。应用程序轮询程序在开发模式启动的服务器上运行。由于它每隔 30 秒运行一次,因此显然无法及时捕捉 Thread Dump 以了解此线程中的活动。51Testing软件测试网0[n;a(n?:N3mz4I+Z0J

2[ \ \&Qd)j+~Y$wN)Z0理想状态下,应当迅速并且连续完成全部三个步骤,以便尽可能及时地捕捉数据。这可以通过类似下面的一个简单的 shell 脚本来完成。51Testing软件测试网/xy!\,vNw&k
51Testing软件测试网'I(o^1uMA(zu:`
#
^9o`e/D*w0v7N0# Takes an argument (PID of the WLS process) and loops three times. This will append the prstat information to a file called dump_high_cpu.txt. The thread dump information will either be in file where stdout was redirected or printed on the screen.
v%k]k7z2O*h0#51Testing软件测试网+]\h/[X
51Testing软件测试网 s7DL3R]
for loopnum in 1 2 3
1p8K T^m$uS_i%L0do51Testing软件测试网[8_{w~"v
prstat -L -p $1 1 1 >> dump_high_cpu.txt
#Y] ydQ;{0pstack $1 >> dump_high_cpu.txt
L;|sR"e(J0kill -3 $1
ZFU-Zm G3d&iG0echo "prstat, pstack, and thread dump done. #" $loopnum
P-s1j7hD0sleep 151Testing软件测试网p&o,at/FX
echo "Done sleeping."51Testing软件测试网%g*T0W6l%D7O!d@-^
done51Testing软件测试网[ q1X'MyE5K Yi

,x1qg&F ZE0然后,您可以检查该线程以确定它正在执行的任务以及是否出现问题。51Testing软件测试网7MD$eJ!wfw
返回页首

TAG: Weblogic

 

评分:0

我来说两句

Open Toolbar