生产环境服务器变慢
查看整机情况
- 使用
top
命令查看CPU占用率、内存占用率以及第一行的load average
load average
后的三个数字分别记录了一分钟、五分钟、以及十五分钟的系统平均负载- 还可以使用
uptime
命令,是系统性能命令的精简版
查看 CPU 情况
- 使用
vmstat -n 2 3
代表每2秒采样一次,一共采样3次 procs
中r代表运行和等待CPU时间片的进程数,整个系统的运行队列不应超过总核数的2倍,否则代表系统压力过大- b 代表等待资源如磁盘I/O,网络 I/O的进程数cpu中
- us 代表用户进程消耗CPU时间百分比,如果长期大于50%要优化程序
- sy 代表内核进程消耗CPU时间百分比us + sy参考值为80%,如果和大于80%,可能存在CPU不足
- 使用
mpstat -P ALL 2
查看所有CPU核信息 - 使用
pidstat -u 1 -p pid
查看每个进程使用CPU的用量分解信息
查看内存信息
- 使用
free -m
来查看内存情况,单位为mb,应用程序可用内存/系统物理内存 应该在20%~70% - 使用
pidstat -p pid -r
采样间隔秒数
查看硬盘信息
- 使用
df -h
查看磁盘IO - 使用
iostat -xdk 2 3
- rkB/s 每秒读取数据量
- wkB/s 每秒写入数据量
- svctm I/O请求的平均服务时间,单位为ms
- util 一秒有百分之多少的时间用于I/O操作
- 使用
pidstat -d采样间隔秒 -p pid
查看网络IO
- 使用
ifstat
采样间隔秒
CPU 占用过高的分析
- 使用
top
命令找出CPU占比最高的进程 ps -ef
或者jps
进一步定位该进程信息定位到具体线程或代码- 使用
ps -mp pid -o THREAD,tid,time
- -m 显示所有线程
- -p pid进程使用cpu的时间
- -o 后是用户自定义格式将需要的线程id转换为16进制(英文小写格式)
jstack 进程id | grep tid -A60