当前位置: 首页 > news >正文

jvm调优-内存泄漏导致cpu飙升

jvm调优-内存泄漏导致cpu飙升

    • 运行一个样例代码
    • 问题现象
    • 定位步骤
    • 离线分析方法
    • 第三方工具arthas
    • dashboard命令查看arthas的相关内存信息
    • jad反编译线上类

运行一个样例代码

java -Xms200M -Xmx200M -XX:+PrintGC com.xxx.xxx

在这里插入图片描述

问题现象

通过gc日志和top命令可看到,程序在频繁ygc,并且每次回收的内存越来越少;cpu和系统内存也在逐步上升。
在这里插入图片描述

定位步骤

1.使用top或者jps命令查看服务器运行java进程状况,找到pid
2.使用jinfo pid查看该进程运行的参数信息
jinfo
3.使用jstat -gc pid 500命令,每500ms打印一次pid进程的内存使用情况
jstat

2.使用top -Hp 2043 查看2043进程里面的线程信息,也可以使用jdk自带的命令jstack 2043|more查看。
top -Hp 2043
jstack 2043
3.使用jmap -histo pid|head -20 命令查看堆内对象占用内存情况
在这里插入图片描述
在这里可以看到cardInfo对象一直在生成,且不能被回收,接下来在代码中查找哪里使用了cardInfo对象。

离线分析方法

1.使用jmap -dump:format=b,file=xxx.hprof pid命令导出二进制堆栈文件,该命令不建议在生产环境使用,因为该命令会造成堆暂停生成快照,影响业务进行,可以使用参数-XX:+HeapDumpOnOutOfMemoryError参数进行线上oom参数打印
jmap -dump
2.使用图形化工具分析导出的堆栈文件,例如MAT,jvisualvm,推荐jvisualvm,在自带的jdk路径下

第三方工具arthas

在阿里官网搜索该工具,下载下来后,linux环境使用./as.sh启动,或者使用java -jar arthas-boot.jar进行启动
在这里插入图片描述
里面的[1]:2359是环境上的java进程,直接敲1回车,进行监测

dashboard命令查看arthas的相关内存信息

dashboard

jad反编译线上类

挂上arthas之后,jad 类名,直接反编译出来该类内容

相关文章:

  • MySQL 基础学习总结(一)
  • 【操作系统】I/O 管理(一)—— I/O 管理概述
  • 使用对比学习处理大规模多模态单细胞数据
  • JAVA基础——day07
  • 【JavaWeb】一篇文章掌握Servlet
  • APP开发的方式
  • 【面试题】这道 JS 经典面试题不要背!今天帮你彻底搞懂它
  • 神经网络(深度学习)----MLPClassifier库的初尝试
  • MindSpore Serving模型部署,如何提升吞吐量,降低推理时延
  • TCP/IP协议专栏——静态路由互导 详解——网络入门和工程维护必看
  • 你知道嵌入式开发主要做什么吗?
  • 树莓派电脑虚拟机3设备连接
  • 【软件测试】男生vs女生,谁更加适合?没有你发现不了的bug......
  • csv文件的读取和写入
  • mongoose之bulkWrite
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【css3】浏览器内核及其兼容性
  • 【EOS】Cleos基础
  • 2017 年终总结 —— 在路上
  • Babel配置的不完全指南
  • CentOS 7 修改主机名
  • emacs初体验
  • js面向对象
  • nginx 负载服务器优化
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • React-flux杂记
  • SAP云平台里Global Account和Sub Account的关系
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue 重置组件到初始状态
  • windows-nginx-https-本地配置
  • 程序员最讨厌的9句话,你可有补充?
  • 初识 webpack
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 简单数学运算程序(不定期更新)
  • 来,膜拜下android roadmap,强大的执行力
  • 前端面试之CSS3新特性
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 深度学习中的信息论知识详解
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 我的zsh配置, 2019最新方案
  • 新书推荐|Windows黑客编程技术详解
  • 怎样选择前端框架
  • 自动记录MySQL慢查询快照脚本
  • Java性能优化之JVM GC(垃圾回收机制)
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 通过调用文摘列表API获取文摘
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #android不同版本废弃api,新api。
  • #NOIP 2014# day.2 T2 寻找道路
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件