java 生产环境下性能监控

java 生产环境下性能监控

一、jvm 参数类型

1. 标准参数

  1. -help
  2. -server -client
  3. -version -showversion
  4. -cp -classpath

2. X 参数 非标准化参数

  1. -Xint : 解释执行
  2. -Xcomp: 第一次使用就编译成本地代码
  3. -Xmixed: 混合模式,jvm 自己决定是否编译成本地代码

3. XX 参数

  1. 非标准化参数
  2. 相对不稳定
  3. 主要用于JVM调优和DEBUG

4. XX参数分类

4.1 Boolean类型

格式:XX:[±]表示启用或者禁用name属性

比如:-XX:+UseConcMarkSweepGc

4.2 非Boolean类型

格式:XX:=表示name属性的值

比如:-XX:+UseGCPauseMillis=500 – 停顿时间

5. -Xmx -Xms

-Xmx 等价于 -XX:MaxHeapSize

-Xms 等价于 -XX:InitialHeapSize

二、 查看jvm运行时参数

1. 输出参数变量信息

java -XX:+PrintFlagsFinal -version > flags.txt

2. jps

jsp -l

3. jinfo

查看最大内存 jinfo -flag MaxHeapSize 23789

查看垃圾回收器 jinfo -flag UseConcMarkSweepGc 23789

三、jstat查看JVM统计信息

1. 类装载

jstat -class 23789

jstat -gc 23789

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJLDr04t-1665809218358)(E:\md\image\java优化\类加载.png)]

S0C第一个幸存区的大小
S1C第二个幸存区的大小
S0U第一个幸存区的使用大小
S1U第二个幸存区的使用大小
EC伊甸园区的大小
EU伊甸园区的使用大小
OC老年代大小
OU老年代使用大小
MC方法区大小
MU方法区使用大小
CCSC压缩类空间大小
CCSU压缩类空间使用大小
YGC年轻代垃圾回收次数
YGCT年轻代垃圾回收消耗时间
FGC老年代垃圾回收次数
FGCT老年代垃圾回收消耗时间
GCT垃圾回收消耗总时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRd92tNL-1665809218361)(E:\md\image\java优化\类加载结构图.png)]

2. 垃圾收集

jstat -gc 23789

3. JIT编译

jstat -compiler 23789

jstat -printcompilation 23789

四、jmap+MAT实战内存溢出

  1. 构建springboot 项目创建 接口 无限循环添加list 数据

五、如何导出内存印象文件

1. 内存溢出自动导出

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=./

-Xmx32m -Xmx32m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./

设置堆栈信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8VKpJ7YD-1665809218368)(E:\md\image\java优化\设置堆栈信息.png)]

发出请求

展示结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8qIUGKKS-1665809218370)(E:\md\image\java优化\发出请求.png)]

到处文件设置 运行 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./

展示结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-14qvyWI5-1665809218373)(E:\md\image\java优化\展示结果.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PbZh4I1E-1665809218374)(E:\md\image\java优化\结构图.png)]

2. 使用jmap命令手动导出

jmap -dump:format=b,file=heap.hprof 23789

jmap -heap 23789

jps查看pid

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hk35mivr-1665809218377)(E:\md\image\java优化\jps查看pid.png)]

不能生成文件的错我

37404: Unable to attach to 64-bit process
The -F option can be used when the target process is not responding

使用命令 jmap -heap pid

Error attaching to remote server: java.rmi.UnknownHostException: Unknown host: pid; nested exception is:
        java.net.UnknownHostException: pid
sun.jvm.hotspot.debugger.DebuggerException: java.rmi.UnknownHostException: Unknown host: pid; nested exception is:
        java.net.UnknownHostException: pid
        at sun.jvm.hotspot.RMIHelper.lookup(RMIHelper.java:115)
        at sun.jvm.hotspot.HotSpotAgent.connectRemoteDebugger(HotSpotAgent.java:517)
        at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:374)
        at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304)
        at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:183)
        at sun.jvm.hotspot.tools.Tool.start(Tool.java:196)
        at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
        at sun.jvm.hotspot.tools.HeapSummary.main(HeapSummary.java:49)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.tools.jmap.JMap.runTool(JMap.java:201)
        at sun.tools.jmap.JMap.main(JMap.java:130)
Caused by: java.rmi.UnknownHostException: Unknown host: pid; nested exception is:

六、MAT内存分析

资源下载地址

eclipse下载地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zhIVBsAi-1665809218379)(E:\md\image\java优化\mat01.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ke26elid-1665809218381)(E:\md\image\java优化\mat02.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JOmnQvGF-1665809218383)(E:\md\image\java优化\mat03.png)]

七、jstack实战死循环与死锁

jstack 23789 > 23789.txt

java线程状态

NEWthe thread has not yet started
WAITINGthe stread is execution int
RUNNABELthe stread is blocked waiting for a monitor loacl
TIMED-WAITINGthe thread is bloacked waiting for another to preform anaction for
BLOCKEDthe thread is bloacked waiting for a monitor lock
TERMINATEDthe thread has exited

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aAMHRK9D-1665809218385)(E:\md\image\java优化\jstack.png)]

八、 监控本地java进程 jvisualvm

1. 地址

C:\Program Files\Java\jdk1.8.0_92\bin

2. 页面样式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dW6emDhA-1665809218387)(E:\md\image\java优化\jvisualvm.png)]

3. 插件中心下载

下载地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qRoGppLD-1665809218389)(E:\md\image\java优化\插件中心下载.png)]

设置后安装

4. 监控远程tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6TvCTin-1665809218390)(E:\md\image\java优化\监控远程tomcat.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wWnKPsWK-1665809218392)(E:\md\image\java优化\监控远程tomcat1.png)]

添加jmx 链接

5. 入门指南

指南

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NkbtAfvr-1665809218394)(E:\md\image\java优化\入门指南.png)]

九 、btrace

1. 简介

Btrace 基于动态字节码修改技术 (Hotswap) 来实现运行时 java 程序的跟踪和替换。Btrace 的脚本是用纯 java 编写的,基于一套官方提供的 annotation,使跟踪逻辑实现起来异常简单。

2. 地址

地址

3. 使用

  1. 拦截方法
    1. 普通方法 @OnMethod(clazz=“”,method=“”)
    2. 构造函数 @OnMethod(clazz=“”,method=“”)
  2. 拦截时机
    1. Kind.ENTRY : 入口,默认值
    2. Kind.RETURN: 返回
    3. Kind.THROW:异常
    4. Kind.Line:行
  3. 拦截this、参数、返回值
    1. 简单类型:直接获取
    2. 复杂类型:反射,类名+属性名
  4. 其他

4. 说明

默认只能本地执行

生产环境下可以使用,但是被修改后的字节码不会被还原

十、tomcat性能监控

1. tomcat远程debug

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xKPzDJti-1665809218396)(E:\md\image\java优化\tomcat远程debug.png)]

2. tomcat-manager监控

  1. tomcat-user.xml

    <role rolename="tomcat"/>
    <role rolename="manager-status"/>
    <role rolename="manager-gui"/>
    <user name="admin" password="admin" roles="tomcat,manager-status,manager-gui"/>
    
  2. 在conf/Catalina/localhost/ 新增文件 manager.xml,内容如下

    <?xml version="1.0" encoding="UTF-8"?>
    <Context privileged="true" antiResourceLocking="false"
             docBase="${catalina.home}/webapps/manager">
      <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1" />//127.0.0.1为允许远程链接的IP
    </Context>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qJ0wuFQV-1665809218398)(E:\md\image\java优化\tomcat-manager监控.png)]

3. psi-probe 监控

1. 地址

参考地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rsdya6T6-1665809218400)(E:\md\image\java优化\psi-probe 监控.png)]

4. tomcat 优化

  1. 线程优化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iE8968XE-1665809218402)(E:\md\image\java优化\线程优化1.png)]

  1. 配置优化

    1. docs/config/context.html

      reloadable : false

    2. conf/server.xml

      protpocol=“org.apache.coyote.http/1.1”

  2. session优化

    如果是jsp,可以禁用Session

附加参考

1. 快速创建项目

1. 生成项目链接

spring.io

2.创建spring-web

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.4</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.maichen</groupId>
  <artifactId>monito_tuning</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>monito_tuning</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>1.8</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

3. 结构样式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wmV83pkS-1665809218405)(E:\md\image\java优化\结构样式.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值