Linux 命令行工具
1.top 命令
实时显示系统中各个进程的资源占用状况。
top 命令的输出可以分为两个部分: 前半部分是系统统计信息, 后半部分是进程信息。
在统计信息中:
第1行是任务队列信息,它的结果等同于uptime命令。从左到右依次表示: 系统当前时间、系统运行时间、当前登录用户数。 load average表示系统的平均负载,即任务队列的平均长度,这三个值分别表示1分钟、5分钟、15分钟到现在的平均值。
第2行是进程统计信息,分别有正在运行的进程数、睡眠进程数、停止的进程数、僵尸进程数。
第3行是CPU统计信息, us 表示用户空间CPU占有率、sy表示内核空间CPU占有率、ni表示用户进程空间改变优先级的进程CPU的占有率、id表示空闲CPU占有率、wa表示等待输入输出的CPU时间百分比、hi表示硬件中断请求、si表示软件中断请求; 在Mem行中, 从左到右,依次表示物理内存总量、已使用的物理内存、空闲物理内存、内核缓冲使用量。 Swap行依次表示交换区总量、空闲交换区大小、缓冲交换区大小。
top 命令的第2部分是进程信息区,显示了系统内各个进程的资源使用情况。
PID : 进程id
PPID: 父进程id
RUSER: Real user name
UID: 进程所有者的用户id
USER: 进程所有者的用户名
GROUP: 进程所有者的组名
TTY: 启动进程的终端名。 不是从终端启动的进程则显示为 ?
PR: 优先级
NI: nice值,负值表示高优先级,正值表示低优先级
P: 最后使用的CPU, 仅在多CPU环境下有意义
%CPU: 上次更新到现在的CPU时间占有百分比
TIME: 进程使用的CPU时间总计,单位秒
TIME+: 进程使用的CPU时间总计, 单位 1/100秒
%MEM: 进程使用的物理内存百分比
VIRT: 进程使用的虚拟内存总量, 单位KB
SWAP: 进程使用的虚拟内存中被换出的大小
RES: 进程使用的、未被换出的物理内存大小
CODE: 可执行代码占用的物理内存大小
DATA: 可执行代码以外的部分占有的物理内存大小
SHR: 共享内存大小
nFLT: 页面错误次数
nDRT: 最后一次写入到现在, 被修改过的页面数
S: 进程状态。D 表示不可中断的睡眠状态; R表示运行; S表示睡眠; T表示跟踪/停止; Z表示僵尸进程
COMMAND: 命令名/命令行
WCHAN: 若该进程正在睡眠,则显示睡眠中的系统函数名。
Flags: 任务标志。
在top 命令中, 按下f键, 可以进行列的选择, 使用o 键可以更改列的显示顺序。此外。 top 命令还有一些实用的交互指令
h : 显示帮助信息
k: 终止一个进程
q: 退出程序
c: 切换显示命令名称和完整命令行
M: 根据驻留内存大小进行排序
P: 根据CPU使用百分比大小进行排序
T: 根据时间/累计时间进行排序
数值1: 显示所有CPU负载情况
2. sar 命令
sar 命令也是linux 系统中重要的性能监测工具之一, 它可以周期性地对内存和CPU使用情况进行采样
sar [options1] [<interval> [<count>]]
interval: 采样周期
count: 采样数量
-A :所有报告的总和
-u: CPU利用率
-d: 硬盘使用报告
-b: I/O 的情况
-q: 查看队列长度
-r: 内存使用统计信息
-n: 网络信息统计
-o: 采样结果输出到文件
3. vmstat
它可以统计CPU 内存使用情况、swap使用情况等信息。
和sar 类似, vmstat 也可以指定采样周期和采样次数
4. iostat 命令
提供详尽的I/O 信息。
5. pidstat 工具
一个功能强大的性能监测工具, 它也是Sysstat 的组件之一。 可以到
http://www.icewalkers.com/Linux/Software/59040/Sysstat.html
下载。 下载后安装即可。
pidstat 的强大之处在于, 它不仅可以监视进程的性能情况, 也可以监视线程的性能情况。
要监控程序的CPU使用率, 可以先使用jps 命令找到PID.然后使用pidstat命令输出程序的CPU使用情况。
pidstat 的参数-p 用于指定进程ID, -u 表示对CPU使用率的监控。
使用pidstat 可以
-- CPU 使用率监控
-- I/O 使用监控
-- 内存监控
Windows 工具
1. 任务管理器
2. perfmon 性能监控工具
在命令行中使用 perfmon 命令。
3. Process Explorer
到
https://technet.microsoft.com/en-us/sysinternals/bb896653
下载。
Process Explorer 不仅显示了系统内所有的进程, 还进一步显示了进程 见的父子关系。
4. pslist 命令行
可以到:
https://technet.microsoft.com/en-us/sysinternals/bb896682
下载。
基本用法:
pslist [-d][-m][-x][-t][-s [n] [-r n] [name|pid]
-d 显示线程详细信息
-m 显示内存详细信息
-x: 心事进程、内存和线程信息
-t: 显示进程间父子关系
-s[n]: 进入监控模式。 n 指定程序运行时间, 使用ESC键退出。
-r n 指定监控模式下的刷新时间,单位为秒
name: 指定监控的进程名称
-e: 使用精确匹配
pid: 指定进程ID
JDK 命令行工具
工具在JDK安装目录的bin 目录中
这些exe 可执行文件只是 Java程序的一层包装, 真正实现是在tools.jar中
以jps 工具为例, 执行这个exe 和使用命令行
java -classpath %Java_HOME%/lib/tools.jar sun.tools.jps.Jps 命令是等价的。
1. jps 命令
类似于Linux下的ps, 但它只用于列出Java的进程。直接运行jps不加任何参数, 可以列出Java程序的进程ID以及Main函数等名称。
-q 指定jps 只输出进程ID
-m 用于输出传递给Java进程的参数
-l 用于输出主函数的完整路径
-v 可以显示传递给JVM的参数
2. jstat
可以用于观察Java应用程序运行时信息的工具。可以通过它,查看堆信息的详细情况, 基本使用语法为:
jstat -<option> [-t] [-h<lines>]<vmid>[<interval> [count]]
-class: 显示ClassLoader的相关信息
-compiler: 显示JIT编译的相关信息
-GC: 显示与GC相关的堆信息
-gccapacity: 显示各个代的容量及使用情况
-gccause: 显示垃圾收集相关信息, 同时显示最后一次或当前正在发生的垃圾收集的诱发原因
-gcnew: 显示新生代信息
-gcnewcapacity: 显示新生代大小与使用情况
-gcold: 显示老年代和永久代的信息
-gcoldcapacity: 显示永久代的大小
-gcutil: 显示垃圾收集信息
-printcompilation: 输出JIT编译的方法信息
-g 参数可以在输出信息前加上一个Timestamp列,显示程序的运行时间
-h 参数可以在周期性数据输出时,输出多少行数据后,跟着输出一个表头信息
interval 参数用于指定输出统计数据的周期,单位为毫秒
count 用于指定一共输出多少次数据
3. jinfo 命令
用来查看正在运行的Java 应用程序的扩展参数,甚至支持在运行时修改部分参数, 基本语法为:
jinfo <option><pid>
-flag<name>: 打印指定JVM的参数值
-flag [+|-]<name>: 设置指定JVM参数的布尔值
-flag <name>=<value>: 设置指定JVM参数的值
4. jmap 命令
可以生成Java应用程序的堆快照和对象的统计信息
例如
jmap -histo 2972 >c:\s.txt
5. jhat 命令
用于分析Java 应用程序的堆快照内容。
6. jstack 命令
用于导出Java应用程序的线程堆栈:
jstack [-l] <pid>
-l: 用于打印锁的附加信息
7. jstatd
在以上工具中, 一些监控工具也支持对远程计算机的监控(jps,jstat). 为了启用远程监控,则需要配合使用jstatd工具。
8. hprof 工具
hprof 不是独立的监控工具,它只是一个Java agent工具,它可以用于监控Java应用程序在运行时的CPU信息和堆信息。
JConsole 工具
JConsole 工具是JDK自带的图形化性能监控工具。 可以查看Java应用程序的运行概况, 监控堆信息、永久区使用情况、类加载情况等。
1. JConsole连接Java程序 JConsole 程序在 %JAVA_HOME%/bin 目录下。 启动后, 可以连接本地进程也可以连接远端进程。
连接本地进程就不用多介绍了。 如果连接的是远程的进程。 则需要在远程Java应用程序启动时, 加上如下参数:
-Djava.rmi.server.hostname=127.0.0.1-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname 用于指定运行Java应用程序的计算机IP地址, -Dcom.sun.management.jmxremote.port 用于指定通过JMX管理该进程的端口号。
2. Java 程序概况 以上四张折线图显示了堆内存的使用情况、系统线程数量、加载类的数量以及CPU 的使用率
3. 使用插件 除了基本功能外, JConsole 还支持插件扩展. 在JDK的安装目录下, 就有一个自带的JConsole插件, 它位于 %JAVA_HOME%\demo\management\JTop 下。 可以使用如下命令让JConsole 加载插件并启动
jconsole -pluginpath %JAVA_HOME%/demo/management/JTop/JTop.jar
JTop 插件按照CPU 占用时间排序, 将占用CPU时间最长的线程显示在表格顶端。 器的哦 2.
Visual VM 多合一工具
Visual VM是一个功能强大的多合一故障诊断和性能监控的可视化工具, 它集成了多种性能统计工具的功能, 使用Visual VM可以代替jstat,jmap,jhat,jstack 甚至JConsle. 在JDK 6 Update 7 以后, Visual VM 便作为JDK的一部分发布, 它完全免费。 作为独立的软件安装, 也可以在http://visualvm.java.net 下载。 Visual VM也可以安装一些插件:
可以通过离线下载插件文件 *.nbm, 然后在Plugin 对话框的Downloaded 页面下, 添加已下载的插件。
1. Visual VM 支持多种方式连接应用程序, 最常用的就是本地连接。只要本地计算机内有Java应用程序正在执行, 在Visual VM的Local 节点下, 就会出现这些应用。
双击应用程序或者右键打开, 就能够监控应用程序运行。由于Visual VM 本身也是Java应用程序, 因此, 自身也在列表内。