引言: 在JVM的实际应用中,一般无法通过图形化的界面来进行JVM的观察和问题确定,一般都需要通过命令来进行,这里碰到的问题是无法连接上java进程....
1. 问题的提出
JDK 1.7, Java Web应用
2. 问题的提出
在尝试使用jmap进行探查的过程中,执行如下命令:
>> jmap 8765 [8765是我们通常使用的java应用进程号】
[xxx@xxx ~]$ jmap -heap 9683
Attaching to process ID 9683, please wait...
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process
3. 问题分析
正常来说,服务器上是使用标准的JDK基础包,无特殊设置,jmap是JVM自带的命令,无法连接上process,因为什么原因?
正常来说,肯定是可以的。
Java进程肯定存在的,没有消失。
难道是OS的权限屏蔽, 忽然意识到,我当前使用的是普通用户,而这个java进程是由root用户来启动的。
4. 问题解决
>> sudo su -
切换到root用户,重新执行jmap pid, 即可正常访问命令输出的内容了。
[xxxx@xxxx ~]# jmap heap 9683
Attaching to core 9683 from executable heap, please wait...
Error attaching to core file: Can't attach to the core file
[root@gyl-test-t5 ~]# jmap -heap 9683
Attaching to process ID 9683, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.71-b01
using thread-local object allocation.
Parallel GC with 23 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 1258291200 (1200.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 268435456 (256.0MB)
MaxPermSize = 536870912 (512.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 310378496 (296.0MB)
used = 258040456 (246.08655548095703MB)
free = 52338040 (49.91344451904297MB)
83.13734982464764% used
From Space:
capacity = 45613056 (43.5MB)
used = 26470024 (25.24378204345703MB)
free = 19143032 (18.25621795654297MB)
58.03168285852191% used
To Space:
capacity = 46137344 (44.0MB)
used = 0 (0.0MB)
free = 46137344 (44.0MB)
0.0% used
PS Old Generation
capacity = 320339968 (305.5MB)
used = 259420512 (247.40267944335938MB)
free = 60919456 (58.097320556640625MB)
80.98287379488032% used
PS Perm Generation
capacity = 268435456 (256.0MB)
used = 96727704 (92.2467269897461MB)
free = 171707752 (163.7532730102539MB)
36.03387773036957% used