欢迎关注公众号 OpenCoder,来和我做朋友吧~
经过前面对于虚拟机内存分配与回收技术各方面的介绍, 相信大家已经建立了一个比较系统、 完整的理论基础。 理论总是作为指导实践的工具, 把这些知识应用到实际工作中才是我们的最终目的。 接下来的内容, 我们将从实践的角度去认识虚拟机内存管理的世界。
给一个系统定位问题的时候, 知识、 经验是关键基础, 数据是依据, 工具是运用知识处理数据的手段。 这里说的数据包括但不限于异常堆栈、 虚拟机运行日志、 垃圾收集器日志、 线程快照(threaddump/javacore文件) 、 堆转储快照(heapdump/hprof文件) 等。 恰当地使用虚拟机故障处理、分析的工具可以提升我们分析数据、 定位并解决问题的效率, 但我们在学习工具前, 也应当意识到工具永远都是知识技能的一层包装, 没有什么工具是“秘密武器”, 拥有了就能“包治百病”。
jps: 虚拟机进程状况工具
jps全称:JVM Process Status Tool ,可以列出正在运行的虚拟机进程, 并显示虚拟机执行主类( Main Class, main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID( LVMID, Local Virtual Machine Identifier)
虽然功能比较单一, 但它绝对是使用频率最高的JDK命令行工具, 因为其他的JDK工具大多需要输入它查询到的LVMID来确定要监控的是哪一个虚拟机进程。 对于本地虚拟机进程来说, LVMID与操作系统的进程ID( PID, Process Identifier) 是一致的, 使用Windows的任务管理器或者UNIX的ps命令也可以查询到虚拟机进程的LVMID, 但如果同时启动了多个虚拟机进程, 无法根据进程名称定位时, 那就必须依赖jps命令显示主类的功能才能区分了。
JPS命令格式:
jps [option] [hostid]
option参数有如下:
我们常用的就是 -l 快速显示出我们想要查看的系统运行进程所在的id,后续配合我们的jstat工具使用
比如我们有如下代码:
package demo6;
public class