一、CPU使用率:
可分为两类:
用户态时间:CPU执行应用代码所占时间的百分比。
系统态时间:CPU执行内核代码所占的时间百分比。
性能调优的目的: 在尽可能端的时间内让CPU使用率尽可能高。(该如何理解?)
Linux上的命令:vmstat 1
二、JVM常用调优工具:
1、 jmap -- histo <PID> > c:\histo. txt : 生成指定PID的java 程序的对象统计信息 ,并放入指定文件。
文件内容大致如下:
num: 按所占容量从大到小排序。instance - 实例数量。 bytes - 类实例所占容量总数, class name : 类名程
num #instances #bytes class name
----------------------------------------------
1: 375719 174118552 [C
2: 74122 143278216 [I
3: 55963 69552600 [B
4: 103253 16450040 <constMethodKlass>
5: 103253 14053848 <methodKlass>
6: 367739 11767648 java.lang.String
7: 9018 11477544 <constantPoolKlass>
8: 144054 8778104 <symbolKlass>
9: 7711 7211448 <constantPoolCacheKlass>
10: 124234 6957104 org.springframework.asm.Item
11: 9018 6848624 <instanceKlassKlass>
12: 117874 6756776 [Ljava.lang.Object;
13: 56198 6743760 java.net.SocksSocketImpl
14: 267804 6427296 org.springframework.asm.Edge
15: 99960 6397440 org.springframework.asm.Label
16: 64001 5632088 java.lang.reflect.Method
17: 7690 4664408 <methodDataKlass>
18: 123465 3950880 java.util.HashMap$Entry
19: 95100 3804000 java.util.concurrent.ConcurrentHashMap$Segment
20: 237026 3792416 java.lang.Object
21: 34890 3430304 [Ljava.util.HashMap$Entry;
22: 29204 3270848 org.aspectj.weaver.ResolvedMemberImpl
23: 97300 3113600 java.util.concurrent.locks.ReentrantLock$NonfairSync
24: 62009 2976432 org.apache.tomcat.util.buf.ByteChunk
2、jmap -heap: 显示堆详细信息: 如堆内存的配置,各个区域的大小。
文件内容如下:
using thread-local object allocation.
Parallel GC with 43 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 4294967296 (4096.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 268435456 (256.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 1300103168 (1239.875MB)
used = 939054160 (895.5518341064453MB)
free = 361049008 (344.3231658935547MB)
72.22920327504347% used
From Space:
capacity = 64946176 (61.9375MB)
used = 37112896 (35.39361572265625MB)
free = 27833280 (26.54388427734375MB)
57.14408189328961% used
To Space:
capacity = 62783488 (59.875MB)
used = 0 (0.0MB)
free = 62783488 (59.875MB)
0.0% used
PS Old Generation
capacity = 2863333376 (2730.6875MB)
used = 946639600 (902.7858734130859MB)
free = 1916693776 (1827.901626586914MB)
33.06075387290146% used
PS Perm Generation
capacity = 144179200 (137.5MB)
used = 78843592 (75.19110870361328MB)
free = 65335608 (62.30889129638672MB)
54.68444269353693% used
3、jmap -dump, 生成Java堆转储快照。
4、jstat - 虚拟机统计信息监视工具,用于监视虚拟机个性运行状态信息。
生成的文件格式如下:
S0 S1 E O P YGC YGCT FGC FGCT GCT
54.24 0.00 64.89 44.88 54.68 2638 106.742 6 15.380 122.122
54.24 0.00 65.39 44.88 54.68 2638 106.742 6 15.380 122.122
54.24 0.00 65.41 44.88 54.68 2638 106.742 6 15.380 122.122
54.24 0.00 65.43 44.88 54.68 2638 106.742 6 15.380 122.122
54.24 0.00 65.45 44.88 54.68 2638 106.742 6 15.380 122.122
问题: S0,S1,Eden, Old,Permanent 区分设置多大比例比较合适?
5、jstack - Java 堆栈跟踪工具,用于生成虚拟机当前时刻的线程快照,treaddump 或 javacore文件。线程快照就是当前
虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、
死循环、请求外部资源导致的长时间等待等都是导致线程线程长时间停顿的原因。