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   打印出前几条占用情况

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

PS+PO调优实战:hotspot参数、调优参数_第1张图片

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  查看线程运行情况

PS+PO调优实战:hotspot参数、调优参数_第2张图片


"Thread-2" #17 prio=5 os_prio=0 tid=0x000000001aac7800 nid=0x1dc8 runnable [0x000000001bb5e000]
   java.lang.Thread.State: RUNNABLE
        at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        - locked <0x00000000d7f9af98> (a java.net.DualStackPlainSocketImpl)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
        - locked <0x00000000d7f9b118> (a sun.net.www.http.HttpClient)
        at sun.net.www.http.HttpClient.(HttpClient.java:242)
        at sun.net.www.http.HttpClient.New(HttpClient.java:339)
        at sun.net.www.http.HttpClient.New(HttpClient.java:357)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966)
        at com.dandan.ThreadConn.run(ThreadConn.java:27)
        at java.lang.Thread.run(Thread.java:748)

倒数第二行可以看到目前是哪个类,哪行。以及可以看到整体的实在一个connect 中。

jstat -class pid   查看class占用数量

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

PS+PO调优实战:hotspot参数、调优参数_第3张图片

jstat -gc pid   查看gc 使用情况

PS+PO调优实战:hotspot参数、调优参数_第4张图片

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

 

jps   将类和 pid对应起来   

jps -l  打印出类的路径

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

PS+PO调优实战:hotspot参数、调优参数_第5张图片

 

你可能感兴趣的:(jvm调优,jvm,调优,堆)