目录
- 一、业务背景
- 二、Jdk-Bin目录
- 三、命令行工具
- 1、jps命令
- 2、jinfo命令
- 3、jstat命令
- 4、jstack命令
- 5、jmap命令
- 四、可视化工具
- 1、jconsole
- 2、visualvm
- 五、参考源码
内存溢出 , 妥妥的名场面;一、业务背景对于分布式架构中的文件服务来说 , 由于涉及大量的IO流操作 , 很容易引发JVM的相关异常 , 尤其是内存溢出的问题;
文章插图
在最近的一次版本迭代中 , 真实的业务处理场景和上述几乎一致 , 由于在文件服务中添加批量处理的动作 , 直接唤醒了隐藏许久的BUG , 就是最常见的内存溢出;
问题的起因:在word文档完成内容识别后 , 转换为pdf文件 , 然后进行页面分割转为一组图片 , 在这个复杂并且超长的流程中存在一个数组容器未销毁;
解决的方式:分析JVM的dump文件 , 定位OOM问题引发的根本原因 , 结合文件服务的异常日志分析 , 添加资源的释放动作 , 从而解决问题;
二、Jdk-Bin目录对于相当一部分新手来说 , 看到JVM的问题都是Bug不知所起一脸懵的 , 其实这种心态大可不必 , 从职场几年的开发经验上看 , JVM的问题大致分为两种:
- 开发轻松解决:可以升级内存资源或者调整分配 , 又或者对程序优化 , 完成相关资源的管理和释放 , 这是最常用的手段;
- 轻松解决开发:由于经验不足 , 程序出现重大BUG导致JVM异常 , 进而引起系列的连锁反应 , 这种不会绝地反弹 , 只有一地鸡毛;
在jdk的bin目录中 , 有很多自带工具可以用于对JVM的分析;
文章插图
上述是基于jdk1.8的目录 , 里面有很多开发经常用到命令 , 下面围绕一个微服务的启动和运行 , 来看看基于JDK中自带JVM工具的用法;
三、命令行工具1、jps命令jps:虚拟机进程状态工具 , 该命令在Java环境部署和服务启动查看时经常用到 , 首先在本地启动一个facade门面微服务 , 然后在命令行中执行查询;
jps
:命令默认输出的是进程ID和应用主类的名称;-l
:输出进程ID和应用主类的完整路径;-v
:输出向jvm传递的参数 , 此处展示为idea中显式配置的VM-options参数 , 其他内容自行查看即可;-m
:输出向main方法传递的参数 , 服务启动前可以在idea的Program-arguments配置;
$ jps1281 FacadeApp$ jps -l1281 com.explore.facade.FacadeApp$ jps -v1281 FacadeApp -Xms128m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m$ jps -m1281 FacadeApp hello,main-method
2、jinfo命令jinfo:在命令后面带pid进程号 , 可以输出指定进程的配置信息 , 在应用启动时通常不会指定过多的配置参数 , 就可以使用该命令查询很多参数的默认值;该命令还可以在运行时动态调整部分参数 , 只是很少被使用;
经验总结扩展阅读
- 2023年9月29日粉刷墙壁好吗 2023年9月29日粉刷墙壁行吗
- 2023年9月29日封顶行吗 2023年9月29日封顶好不好
- 2023年9月29日适合盖房子吗 2023年9月29日盖房子好不好
- 2023年9月29日装修开工行吗 2023年9月29日装修开工好不好
- 2023年9月29日安放磉石好不好 2023年9月29日安放磉石好吗
- 2023年2月4日拆墙行吗 2023年2月4日拆墙好不好
- 2023年2月4日建造轮船吉日一览表 2023年2月4日建造轮船黄道吉日
- 2023年2月4日封顶吉日一览表 2023年2月4日封顶行吗
- 2023年2月4日修理仓库行吗 2023年2月4日适合修理仓库吗
- 2023年2月4日粉刷墙壁行吗 2023年2月4日适合粉刷墙壁吗