1、JDK中的命令行工具
jps,可以列出当前机器上运行的虚拟机进程,因为是从操作系统的临时目录去获取的,所以有些信息可能不全
jstat,用于监视虚拟机各种运行状态的信息,可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具
jinfo,查看和修改虚拟机的参数
jmap,用于生成堆转储快照(一般称为 heapdump 或 dump 文件)。jmap 的作用并不仅仅是为了获取 dump 文件,它还可以查询 finalize 执行队列、Java 堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等
jhat,在服务器上生成堆转储文件分析
jstack,用于生成虚拟机当前时刻的线程快照
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因
2、其他常用的工具
JMX,可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用
Jconsole
visualvm
Arthas, Alibaba 开源的 Java 诊断工具,支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断
3、内存分配调优的案例
(1)对应用服务进行压力测试,模拟不同并发用户数下的服务的响应情况
(2)分析压测得到的GC频率、内存、吞吐量、延时等信息提出调优方案
(3)当GC频率过高时,可调整堆内存空间,减少GC频率
(4)当内存占据过大时,可适当增加内存
(5)当吞吐量过低时,可以增加带宽、使用缓存等方式提高吞吐量