zoukankan      html  css  js  c++  java
  • 02 jmap+MAT(内存溢出)、jstack(线程、死循环、死锁)

    jmap+MAT

    详情参考jmap 官方文档

    内存溢出演示:
    最终代码:monitor_tuning
    为快速产生内存溢出,右击 Run As>Run Configurations, Arguments 标签VM arguments 中填入
    -Xmx32M -Xms32M

    –XX:MetaspaceSize=32M –XX:MaxMetaspaceSize=32M(同时在 pom.xml 中加入 asm 的依赖)

    访问 http://localhost:8080/nonheap

    内存溢出自动导出

    -XX:+HeapDumpOnOutOfMemoryError
    -XX:HeapDumpPath=./
    右击 Run As>Run Configurations, Arguments 标签VM arguments 中填入
    -Xmx32M -Xms32M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./
    可以看到自动在当前目录中生成了一个java_pid660.hprof文件
    另一种导出溢出也更推荐的方式是jmap
    option: -heap, -clstats, -dump:<dump-options>, -F
    jmap -dump:format=b,file=heap.hprof <pid>
     
    JAVA生产环境性能监控与调优

    MAT下载地址:http://www.eclipse.org/mat/

    找开上述导出的内存溢出文件即可进行分析,如下图的溢出源头分析:

    JAVA生产环境性能监控与调优

    jstack

    详情参考 jstack 官方文档

    jstack <pid>

    可查看其中包含java.lang.Thread.State: WAITING (parking),JAVA 线程包含的状态有:

    NEW:线程尚未启动

    RUNNABLE:线程正在 JVM 中执行

    BLOCKED:线程在等待监控锁(monitor lock)

    WAITING:线程在等待另一个线程进行特定操作(时间不确定)

    TIMED_WAITING:线程等待另一个线程进行限时操作

    TERMINATED:线程已退出

    JAVA生产环境性能监控与调优

    monitor_tuning中新增CpuController.java

    mvn clean package -Dmaven.test.skip

    mvn 打包提速参考 CSDN

    此时会生成一个monitor_tuning-0.0.1-SNAPSHOT.jar的 jar包,为避免本地的 CPU 消耗过多导致死机,建议上传上传到虚拟机进行测试

    nohup java -jar monitor_tuning-0.0.1-SNAPSHOT.jar &

    访问 http://xx.xx.xx.xx:12345/loop(端口12345在application.properties文件中定义)

    top -p <pid> -H可以查看线程及 CPU 消耗情况

    JAVA生产环境性能监控与调优

    使用 jstack <pid>可以导出追踪文件,文件中 PID 在 jstack 中显示的对应 nid 为十六进制(命令行可执行 printf ‘%x’ <pid>可以进行转化,如1640对应的十六进制为668)

  • 相关阅读:
    pymysql
    flask WTForms
    线程安全问题
    flask学习2
    @functools.wraps(func)
    Solidity开发神器Remix
    Web3j实现智能合约
    基于Ubuntu Docker环境下进行以太坊实践
    以太坊RLP机制分析
    以太坊网络服务分析
  • 原文地址:https://www.cnblogs.com/hg-super-man/p/12839715.html
Copyright © 2011-2022 走看看