top命令可以实时动态地查看系统的整体运行情况
假装有图。自己虚拟机上打一下。
对每一项进行解释:
1.16:08:49 当前时间
2.up 10 min 当前系统已经运行10min
3.1 user 当前1个用户登录
4.load average: 0.37, 0.50, 0.29 平均负载的含义可以看这篇博客 load average的含义,总之,越高的话负载越重
第二行是对进程的描述
5.281 total 总共有281个进程
6.1 running 正在运行1个进程
7.280 sleeping 280个进程正在睡眠
8.0 stopped 停止的进程数0个
9.0 zombie 冻结的进程个数0
第三行是对CPU使用情况的描述
-
6.7 us 用户空间占比 6.7%
-
2.9 sy 内核空间占比2.9%
12.0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比0
- 88.2 id 空闲CPU百分比
14.2.2 wa等待输入输出的CPU时间百分比
第四行是对内存使用的描述
分别是:
物理内存总量
空闲内存总量
使用内存总量
用作内核缓存的内存亮
第五行是对交换区使用的描述
通过top命令,可以了解到哪一个线程可能是有问题的。找到有问题的线程后,通过jstack命令,将其堆栈信息打印出来。
sudo jstack -F PID
jmap 的使用
sudo -u tomcat jmap -dump:live,format=b,file=pid_3744.hprof 3744 输出存活的对象到二进制文件中 dump可以分析对象的大小情况
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-heap 这个只能看内存情况
sudo sz pid_3744.hprof 这个可以快速发送到本地
java -Xmx800m -jar C:\Users\qiwen.wei\Desktop\ha456.jar 启动工具
然后使用工具分析就可以了 ,我使用的分析工具是 Mat