生产环境服务器变慢,诊断思路和性能评估
整机:top
代码
1 | public class JavaDemo2 { |
top命令查看
1 | [root@192 ~]# top |
CPU:vmstat
1 | [root@192 ~]# vmstat -n 2 3 |
id:处于空闲的CPU百分比
wa:系统等待IO的CPU时间百分比
st:来自于一个虚拟机偷取的CPU时间百分比
查看额外的CPU信息
所有CPU核信息
1 | [root@192 ~]# mpstat -P ALL 2 |
每个进程使用CPU的用量分解信息
1 | [root@192 ~]# pidstat -u 1 -p 3790 |
内存:free
应用程序可用内存数
推荐使用free -m
1 | [root@192 ~]# free -g |
查看额外
1 | [root@192 ~]# pidstat -p 3823 -r 2 |
硬盘:df
查看磁盘剩余空间
1 | [root@192 ~]# df -h |
磁盘IO:iostat
1 | [root@192 ~]# iostat -xdk 2 3 |
查看额外
1 | [root@192 ~]# pidstat -d 2 -p 3485 |
网络IO:ifstat
默认本地没有,需要下载ifstat
安装ifstat
1 | [root@192 ifstat-1.1]# yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel gcc-c++ |
1 | [root@192 ifstat-1.1]# ifstat 1 |
生产环境出现CPU占用过高,分析思路和定位
1 | public class JavaDemo2 { |
先用top命令找出CPU占比最高的
1 | PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND |
ps -ef或者jps进一步定位
1 | [root@192 ifstat-1.1]# jps |
定位到具体线程或者代码
1 | [root@192 ifstat-1.1]# ps -mp 4294 -o THREAD,tid,time |
-m:显示所有的线程
-p: pid进程使用CPU的时间
-o:该参数后是用户自定义格式
线程ID转换为16进制格式(英文小写格式)
1 | [root@192 ifstat-1.1]# printf "%x\n" 4295 |
jstack 进程ID|grep tid(16进制线程ID小写英文) -A60
1 | [root@192 ifstat-1.1]# jstack 4294 | grep 10c7 -A60 |
参考