1、系统性能监控
确定系统运行的整体状态,基本定位问题所在
1.1 uptime
系统时间 运行时间 例子中为7分钟 连接数 每一个终端算一个连接 1,5,15分钟内的系统平均负载 运行队列中的平均进程数
1.2 top
同uptime
1.3 vmstat
1.4 pidstat
细致观察进程 需要安装 sudo apt-get install sysstat 监控CPU 监控IO 监控内存
2、Java自带的工具
查看Java程序运行细节,进一步定位问题
2.1 jps
列出java进程,类似于ps命令 参数-q可以指定jps只输出进程ID ,不输出类的短名称 参数-m可以用于输出传递给Java进程(主函数)的参数 参数-l可以用于输出主函数的完整路径 参数-v可以显示传递给JVM的参数
2.2 jinfo
可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数 -flag <name>:打印指定JVM的参数值 -flag [+|-]<name>:设置指定JVM参数的布尔值 -flag <name>=<value>:设置指定JVM参数的值
2.3 jmap
2.4 Dump堆
2.5 jstack
打印线程dump -l 打印锁信息 -m 打印java和native的帧信息 -F 强制dump,当jstack没有响应时使用
2.6 JConsole
2.7 Visual VM
3、实战分析
3.1 示例1
运行一程序ThreadBlockMain,期望输出Hello,World ,结果在程序运行后,程序卡死,没有预期输出。
3.1 示例2
Java程序HoldCPUMain运行后,发现占用CPU很高,希望能找到原因。
步骤1:
步骤2:
步骤3:
3.3 示例:死锁
步骤1:
步骤2: