Serial 串行 它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程,所以不适合服务器环境
Parallel 并行 多个垃圾收集线程并行工作,此时用户线程时暂停的,适用于科学计算、大数据等弱交互场景。
CMS 并发 用户线程和垃圾收集线程同时执行(不一定是并行,可能是交替执行),不需要停顿用户线程,互联网公司多用它,使用堆响应时间有要求的场景。
GI G1垃圾回收器将堆内存分割成不同的区域然后并发对其进行垃圾回收
-------→| |-------→
-------→|------gc------→|-------→ 串行 Serial
-------→| |-------→
-------→|--gc--→|-------→
-------→|--gc--→|-------→ 并行 Parallel
-------→|--gc--→|-------→
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseSerialGC (DefNew+Tenured)
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParNewGC (ParNew+Tenured)//新生代gc收集加快,old代不变
=========================================================================================================
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParallelGC (PSYoungGen+ParOldGen)
相互激活
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParallelOldGC (PSYoungGen+ParOldGen)
==============================================================================================================
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags (PSYoungGen+ParOldGen) 不加默认UseParallelGC
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseConcMarkSweepGC (Par new generation+Concurcention)
CMS Initial Mark----→CMS-concurrent-mark-start-----CMS Final Remark------CMS-concurrent-sweep-start
产生垃圾碎片-XX:CMSFullGCsBeForeCompaction=n次 内存整理
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseG1GC G1
-XX:G1HeapRegionSize=2048 保证一块的最大内存块可以到32M
-XX:MaxGCPauseMillis=n 最大停顿时间
-XX:InitiatingHeapOccupancyPercent=n 堆占用多少时GC默认45%
-XX:ConcGCThreads=n 并发线程数
-XX:G1ReservePercent 空闲空间预留百分比默认10%
分布式集群思想
Serial+SerialOld DefNew
-XX:ParallelGCThreads=8 设置并行收集器的线程数,默认cpu核数
Parallel+SerialOld ParNew
||||||||||
ParNew+CMS
Parallel Scavenge+Parallel Old
G1
================================================================
undertow取代tomcat
clean-----package
java -server -Xms1024m -Xmx1024m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseG1GC -jar SpringBoot_jmdf.jar
java -jar SpringBoot_jmdf.jar
===========================================
top uptime load average 0.00, 0.00, 0.00 相加除以3诚意100%大于60% 查看整机使用情况
vmstat -n 2 3 ==========采样3次时间间隔为2s cpu
mpstat -P ALL 2 2s采样一次(查看cpu核信息)
pidstat -u 1 -p {pid} 查看某进程的cpu占用率(每个进程使用cpu的用量分解信息)
===========================================================================
free -m 查看内存情况 查看内存
pidstat -p {pid} -r 2 查看java进程消耗内存百分比
===========================================================================
df -h 查看硬盘
===========================================================================
查看磁盘I/O
iostat -xdk 2 3
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.20 1.34 0.71 0.24 22.60 6.32 60.92 0.01 14.73 4.70 0.45
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 4.98 0.50 2.99 3.98 31.84 20.57 0.04 12.71 12.29 4.28
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
磁盘块设备分布
rkB/S每秒读取数据量KB
wkB/s每秒写入数据量
svctm i/o请求的平均服务时间,单位毫秒
await i/o 请求的平均时间,单位毫秒,值越小,性能越好
util 疫苗中有百分之几的时间用于I/o操作。接近100%表示磁盘跑满,需要优化程序或者增加磁盘;
rkB/S、wkB/s根据系统应用不同会有不同的值,单有规律遵循:长期、超大数据读写,很定不正常,需要优化程序读写。
svctm的值与await的值很接近,表示没有i/o等待,性能很好。
如果await的值远远高于svctm的值,表示I/o队列等待太长,需要优化程序或者更换更快的磁盘。
pidstat -d 2 -p {pid} 某个线程的读写速率(2秒采样一次)
=============================================================
查看网络I/o,需要装
1、安装ifstat
wget http://distfiles.macports.org/ifstat/ifstat-1.1.tar.gz
tar xzvf ifstat-1.1.tar.gz
cd ifstat-1.1
./configure
make && make install
I/O
ifstat 1
========================================================================
案例
top
jps -l
ps -ef|grep java|grep -v grep
ps -mp {pid} -o THREAD,tid,time
jstack {pid} | grep {16进制的小写} -A60
=========================================================================
jps虚拟机进程状况工具
jinfo java配置信息工具
jmap内存映象工具
jstat统计信息监视工具
jstack堆栈异常跟踪工具
jvisualvm
jsconsole
===========================================================================
github
seckill in:name,readme
springboot stars:>=5000
springboot forks:>=500
springboot forks:2000..40000 stars:2000..80000
awesome redis
网址+#L{行号}-L{行号}
项目级别t 罗列文件
location:beijing language:java
GC垃圾回收器
最新推荐文章于 2023-10-11 12:03:39 发布