环境:
Red Hat Enterprise Linux AS release 4 (Nahant)
weblogic10.3
在查看关于本地OOM问题的support pattern时,有一点是定期记录虚拟内存大小,从启动应用程序时起直到 JVM 用完本地内存。这样将有助于了解此进程是否确实达到该操作系统的大小限值。
在 Unix 或 Linux 环境下,对于一个给定 PID,可以使用以下命令来查找虚拟内存大小 -ps -p <PID> -o vsz。
在 Linux 环境下,单个 JVM 实例内的每个 java 线程都显示为一个独立的进程。如果我们获得根 java 进程的 PID,那么这就足够了。可以使用 ps 命令的 .forest 选项来找到根 java 进程。例如,ps lU <user> –forest 将提供一个由指定用户启动的所有进程的 ASCII 树图。您可以从该树图中找到根 java。
针对以上内容做了下实验操作:
1、
[bea@mylinux ~]$ ps -p 3136 -o vsz
VSZ
274352
[bea@mylinux ~]$ ps lU bea –forest
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 501 3056 3055 15 0 6216 1392 wait S pts/1 0:00 -bash
0 501 3234 3056 16 0 3700 728 – R+ pts/1 0:00 \_ ps lU bea –forest
4 501 2915 2914 15 0 5884 1424 wait S pts/0 0:00 -bash
0 501 3099 2915 17 0 4196 1108 wait S+ pts/0 0:00 \_ /bin/sh ./startWebLogic.sh
0 501 3136 3099 18 0 274352 239372 – Sl+ pts/0 0:00 \_ /home/bea/bea103/jrockit_160_05/bin/java -jrockit -Xms128m -Xmx128m -Xverify:none -da -Dplatform.home=/h
[bea@mylinux ~]$
联合top命令又做了下测试:
启动了一个java进程。
[bea@mylinux ~]$ ps -ef|grep java
bea 3155 3118 0 20:07 pts/2 00:00:00 /home/bea/bea103/jrockit_160_05/bin/java -jrockit -Xms128m -Xmx128m -Xverify:none -da -Dplatform.home=/home/bea/bea103/wlserver_10.3 -Dwls.home=/home/bea/bea103/wlserver_10.3/server -Dweblogic.home=/home/bea/bea103/wlserver_10.3/server -Dweblogic.management.discover=true -Djava.rmi.server.hostname=192.168.0.54 -Xmanagement -Xmanagement:autodiscovery=true,ssl=false,authenticate=false,port=7091 -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole=Dweblogic.Name=AdminServer -Djava.security.policy=/home/bea/bea103/wlserver_10.3/server/lib/weblogic.policy weblogic.Server
[bea@mylinux ~]$ ps lU bea –forest
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 501 3249 3248 15 0 6044 1396 wait S pts/3 0:00 -bash
0 501 3278 3249 16 0 3228 732 – R+ pts/3 0:00 \_ ps lU bea –forest
4 501 3187 3186 15 0 4352 1396 wait S pts/1 0:00 -bash
0 501 3213 3187 17 0 2092 936 select S+ pts/1 0:00 \_ top
4 501 3008 3007 15 0 5120 1428 wait S pts/2 0:00 -bash
0 501 3117 3008 16 0 4580 968 wait S+ pts/2 0:00 \_ /bin/sh ./startWebLogic.sh
0 501 3118 3117 23 0 5608 1104 wait S+ pts/2 0:00 \_ /bin/sh /home/bea/bea103/user_projects/domains/base_domain/bin/startWebLogic.sh
0 501 3155 3118 23 0 274316 239464 – Sl+ pts/2 0:00 \_ /home/bea/bea103/jrockit_160_05/bin/java -jrockit -Xms128m -Xmx128m -Xverify:none -da -Dplatform.hom
可以看到,现在VSZ的值是274316
[bea@mylinux ~]$ top
Tasks: 63 total, 2 running, 61 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0% us, 0.4% sy, 0.0% ni, 99.6% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 515708k total, 392596k used, 123112k free, 28408k buffers
Swap: 1052248k total, 0k used, 1052248k free, 89400k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3281 bea 16 0 2352 940 760 R 0.3 0.2 0:00.85 top
3008 bea 15 0 5120 1428 1196 S 0.0 0.3 0:00.06 bash
3117 bea 16 0 4580 968 856 S 0.0 0.2 0:00.00 startWebLogic.s
3118 bea 23 0 5608 1104 908 S 0.0 0.2 0:00.01 startWebLogic.s
3155 bea 23 0 267m 233m 1560 S 0.0 46.4 0:00.01 java
3187 bea 16 0 4352 1400 1172 S 0.0 0.3 0:00.02 bash
3249 bea 16 0 6044 1396 1172 S 0.0 0.3 0:00.01 bash
可以看到VIRT值是267M等于273408KB,和VSZ的值是274316几乎一样
说明这个VIRT也能来看进程的虚拟内存大小。
VIRT解释:
VIRT — Virtual Image (kb)
The total amount of virtual memory used by the task. It includes all code, data and shared libraries plus pages that have been swapped out.
VIRT = SWAP + RES.
2、
[bea@myliux ~]$ top -Hp 3286 -d 1 -n 1
top – 16:26:51 up 5 min, 3 users, load average: 0.14, 0.17, 0.08
Tasks: 26 total, 0 running, 26 sleeping, 0 stopped, 0 zombie
Cpu(s): 6.2%us, 9.9%sy, 0.1%ni, 70.6%id, 12.2%wa, 0.1%hi, 1.0%si, 0.0%st
Mem: 775044k total, 499560k used, 275484k free, 31376k buffers
Swap: 1048568k total, 0k used, 1048568k free, 236944k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3286 bea 19 0 640m 182m 19m S 0.0 24.1 0:00.02 java
3287 bea 16 0 640m 182m 19m S 0.0 24.1 0:06.65 java
3288 bea 15 0 640m 182m 19m S 0.0 24.1 0:01.03 java
3289 bea 18 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3290 bea 18 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3291 bea 25 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3292 bea 15 0 640m 182m 19m S 0.0 24.1 0:02.45 java
3293 bea 21 0 640m 182m 19m S 0.0 24.1 0:02.79 java
3294 bea 25 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3295 bea 15 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3323 bea 19 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3340 bea 15 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3351 bea 15 0 640m 182m 19m S 0.0 24.1 0:10.94 java
3352 bea 15 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3353 bea 15 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3355 bea 17 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3356 bea 15 0 640m 182m 19m S 0.0 24.1 0:01.09 java
3357 bea 15 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3358 bea 17 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3360 bea 15 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3362 bea 16 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3363 bea 16 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3415 bea 18 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3418 bea 16 0 640m 182m 19m S 0.0 24.1 0:00.00 java
3419 bea 16 0 640m 182m 19m S 0.0 24.1 0:00.01 java
3420 bea 16 0 640m 182m 19m S 0.0 24.1 0:00.00 java
[bea@myliux ~]$ ps -p 3287 -o vsz
VSZ
[bea@myliux ~]$ ps -p 3286 -o vsz
VSZ
655776
[bea@myliux ~]$ ps -p 3290 -o vsz
VSZ
[bea@myliux ~]$
[bea@myliux ~]$ ps lU 3286 –forest
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
[bea@myliux ~]$ ps lU bea –forest
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 500 3391 3390 15 0 4536 1400 wait S pts/2 0:00 -bash
0 500 3436 3391 17 0 4224 840 - R+ pts/2 0:00 \_ ps lU bea –forest
4 500 3220 3219 15 0 4536 1416 wait S pts/0 0:00 -bash
0 500 3249 3220 17 0 4484 1012 wait S+ pts/0 0:00 \_ /bin/sh ./startWebLogic.sh
0 500 3250 3249 18 0 4488 1132 wait S+ pts/0 0:00 \_ /bin/sh /home/bea/bea103/user_projects/domains/base_domain/bin/startWebLogic.sh
0 500 3286 3250 19 0 656748 186536 stext Sl+ pts/0 0:25 \_ /home/bea/bea103/jdk160_05/bin/java -server -Xms384M -Xmx384M -XX:PermSize=128m -XX:MaxPermSize=128m -da -Dpla
说明针对线程的pid查不出虚拟内存