赞
踩
最近,想查看一个Java程序当前运行状态的需求,搜索了一些相关的工具、方法。
性能监控的起点往往并不是JDK提供的工具,而是操作系统自带的一些监控工具。比如 top 命令查看实时的运行情况,包括CPU、内存等占用的情况。
如果想看某一个具体进程的详细的线程的情况的话,可以使用 top -Hp procId 具体查看线程的情况,有关top命令可以参考这两篇文章的介绍:
How to Use the Linux top Command (and Understand Its Output)
How to Use the top Command in Linux
vmstat 命令可以报告有关内核线程、虚拟内存、磁盘等的统计信息,使用 “vmstat 1” 会每隔一秒钟打印出这些统计信息,输出结果中第一列 r 表示当前系统正在运行或等待运行的线程数,cs 列表示上下文切换的数量,us、sy、id 分别表示CPU执行用户代码、操作系统代码、空闲时间的百分比,因此,一般这三列的数值加起来等于100。
pidstat 命令用于监控单个任务的执行情况。同样可以指定具体的进程id,或者默认展示活跃的任务统计信息。有关该命令的详细介绍可以参考官方手册
当然,学习命令的使用,最好的方式,还是查看对应的官方手册
JDK自身带了以下工具:
- jcmd 它用来打印Java进程所涉及的基本类、线程和VM信息。它适用于脚本,可以像这 样执行:
jcmd process_id command optional_arguments
jcmd help 可以列出所有的命令。jcmd help 可以给出特定命令的语法。- jconsole 提供JVM活动的图形化视图,包括线程的使用、类的使用和GC活动。
- jhat 读取内存堆转储,并有助于分析。这是事后使用的工具。
- jmap 提供堆转储和其他JVM内存使用的信息。可以适用于脚本,但堆转储必须在事后分析工具中使用。
- jinfo 查看JVM的系统属性,可以动态设置一些系统属性。可适用于脚本。
- jstack 转储Java进程的栈信息。可适用于脚本。
- jstat 提供GC和类装载活动的信息。可适用于脚本。
- jvisualvm 监视JVM的GUI工具,可用来剖析运行的应用,分析JVM堆转储(事后活动,虽然jvisualvm 也可以实时抓取程序的堆转储)。
(引用自《Java性能权威指南》)
可以通过 jstack 命令导出 ThreadDump 文件,这个文件具体列出了程序当前每一个线程的状态,当然如果运行的线程很多的话,直接查看文件的方式是不容易定位发现其中的问题的。这就有了一系列的分析工具,可以针对这个文件进行分析、并以图形化的方式展示出来,这样的结果查看起来就方便多了,具体的工具列表以及基本的分析方法步骤可以查看这片文章:How to Analyze Java Thread Dumps,文章中给出了一系列的分析工具,包括在线的以及单独的应用程序,注意在线工具中,FastThread 虽然功能强大,但会把文件上传到云端,这意味着你的文件有泄露的风险。
本篇文章初步总结Java应用程序监控相关的一些工具,要想了解我们的程序目前的运行状况、详情,对监控工具的熟悉是不可或缺的,这里仅初步总计了最近用到的一个简单的命令,对其他的一些命令,我们也有必要提前了解下其作用,在后面再碰到相关的问题场景时,能够想到可以通过这些命令获取相关的信息也是很有必要的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。