JVM调优
Jmap
Jmap -histo pid
当服务器内存占用飙高,可以使用Jmap查看Java应用内存信息,实例个数以及占用内存大小。
/**
* 测试代码
*/
public class HeapTest {
private static List<Company> list = new ArrayList<>();
public static void main(String[] args) {
while (true){
list.add(new Company());
}
}
}
class Company{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
[root@master ~]# jmap -histo 260613
num #instances #bytes class name
----------------------------------------------
1: 70091071 1121457136 com.jvm.Company
2: 513 280390104 [Ljava.lang.Object;
3: 882 84064 [C
4: 471 54216 java.lang.Class
5: 9 25040 [B
6: 869 20856 java.lang.String
7: 256 4096 java.lang.Integer
8: 91 3640 java.lang.ref.SoftReference
9: 109 3488 java.util.Hashtable$Entry
10: 89 3000 [I
11: 7 2632 java.lang.Thread
12: 58 2024 [Ljava.lang.String;
13: 38 1824 sun.util.locale.LocaleObjectCache$CacheEntry
14: 51 1632 java.util.concurrent.ConcurrentHashMap$Node
15: 19 1216 java.net.URL
16: 2 1064 [Ljava.lang.invoke.MethodHandle;
17: 1 1040 [Ljava.lang.Integer;
18: 26 1040 java.io.ObjectStreamField
jmap -histo:live pid #查看当前存活的实例
当发生内存溢出时,可以根据GC日志找到问题代码。
[root@master ext]# java -XX:+PrintGCDetails com.jvm.HeapTest
[GC (Allocation Failure) [PSYoungGen: 31232K->5116K(36352K)] 31232K->21036K(119808K), 0.0260969 secs] [Times: user=0.07 sys=0.01, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 36348K->5104K(67584K)] 52268K->40435K(151040K), 0.0301175 secs] [Times: user=0.08 sys=0.01, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 55880K->5104K(67584K)] 91211K->107276K(170496K), 0.1080058 secs] [Times: user=0.15 sys=0.08, real=0.11 secs]
[Full GC (Ergonomics) [PSYoungGen: 5104K->0K(67584K)] [ParOldGen: 102172K->80415K(205312K)] 107276K->80415K(272896K), [Metaspace: 2959K->2959K(1056768K)], 0.9571864 secs] [Times: user=2.76 sys=0.07, real=0.96 secs]
[GC (Allocation Failure) [PSYoungGen: 62464K->5120K(100864K)] 178934K->154966K(306176K), 0.1663656 secs] [Times: user=0.58 sys=0.02, real=0.17 secs]
[Full GC (Ergonomics) [PSYoungGen: 5120K->0K(100864K)] [ParOldGen: 149846K->138855K(305664K)] 154966K->138855K(406528K), [Metaspace: 2959K->2959K(1056768K)], 1.2778122 secs] [Times: user=4.28 sys=0.01, real=1.27 secs]
[GC (Allocation Failure) [PSYoungGen: 95744K->5120K(130048K)] 288682K->288874K(435712K), 0.2113250 secs] [Times: user=0.77 sys=0.05, real=0.22 secs]
[Full GC (Ergonomics) [PSYoungGen: 5120K->0K(130048K)] [ParOldGen