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 + PO】

-XX:+UseParallelOldGC = ParNew + 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日志

调优前基础概念:

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 等等 进行分析。

jmap -heap pid 查看堆内存使用情况,

jmap -histo:live pid | head   打印出前几条占用情况

打印类的实例数量、占用的内存、类的名称

https://www.cnblogs.com/cjsblog/p/9561375.html

jmap -dump:live,format=b,file=myheap.dump pid  导出堆内存到文件

如何监控JVM: jstat、jvisualvm 等等

cmd

tasklist | findstr /s /i "java"   查看java使用cup的情况

linux 

top  找出使用cpu最高的pid

jstack  pid  查看线程运行情况

jstat -class pid   查看class占用数量

Loaded:加载class的数量   Bytes:所占用空间大小   Unloaded:未加载数量   Bytes:未加载占用空间   Time:时间

jstat -gc pid   查看gc 使用情况

jstat  更多命令  https://www.cnblogs.com/sxdcgaq8080/p/11089841.html

jps   将类和 pid对应起来   

jps -l  打印出类的路径

jps -v  打印出对虚拟机设置的参数

猜你喜欢

转载自blog.csdn.net/dandanforgetlove/article/details/106121358