PS+PO调优实战:hotspot参数、调优参数

时间:2024-04-01 07:23:11

PS+PO调优实战:hotspot参数、调优参数

MethodArea (永久代): 存储class信息、方法信息、代码编译完的信息、字节码.

1.7 之前叫 perm Generation ,  必须设置大小,并且JVM启动之后没办法更改。存放字符串常量。

1.8叫 meta space,默认大小为物理内存。 字符串常量存放在堆中。

GC调优:尽量减少FGC(full GC)

JVM 参数:

-XX:+UseSerialGC = Serial New (DefNew) + Serial Old 可以一起指定,也可以单独指定

-XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old   1.7需要加上括号中的urrent,1.8不用

-XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】

-XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old

-XX:+UseG1GC = G1

HotSpot参数分类

标准:- 开头,所有的hotspot 支持

非标准:-X 开头,特定hotspot支持

不稳定:-XX开头,下个版本可能取消

参数查询

1. 区分概念:内存泄漏memory leak,内存溢出out of memory
2. java -XX:+PrintCommandLineFlags HelloGC
3. java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC  HelloGC
   PrintGCDetails PrintGCTimeStamps PrintGCCauses
4. java -XX:+UseConcMarkSweepGC -XX:+PrintCommandLineFlags HelloGC
5. java -XX:+PrintFlagsInitial 默认参数值
6. java -XX:+PrintFlagsFinal 最终参数值
7. java -XX:+PrintFlagsFinal | grep xxx 找到对应的参数
8. java -XX:+PrintFlagsFinal -version |grep GC

GC日志

PS+PO调优实战:hotspot参数、调优参数

 

PS+PO调优实战:hotspot参数、调优参数

调优前基础概念:

1.吞吐量: 用户代码时间 / (用户代码执行时间 + 垃圾回收时间)

2.响应时间: STW越短,响应时间越好

调优要求:追求吞吐量还是响应时间,或是在满足一定响应时间下,达到要求的吞吐量

吞吐量优先的,先选择垃圾回收器(PS + PO)。例如: 科学计算、数据挖掘

响应时间优先的,尽量选择 1.8 G1,其次 PN+CMS。 例如:网站、GUI、api

什么是调优:

1.根据需求进行JVM规划和预调优

2.优化运行JVM环境

3.解决JVM运行过程中出现的各种问题(OOM)

QPS(Query Per Second):服务器在一秒的时间内处理了多少个请求。QPS(TPS)= 并发数/平均响应时间

设定日志参数
   1. -Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause

cpu 100%: 使用top,查看占用cpu比较高的进程,使用top -Hp  进程ID ,查看对应的占用cpu较高的线程。如果是java应用,使用 jstack 导出该线程的堆栈。然后查看哪个方法(栈帧)消耗时间  jstack。

内存飙高: 导出堆内存 jmap,使用jhat 、jvisualvm、mat 等等 进行分析。

如何监控JVM: jstat、jvisualvm 等等