生产环境服务器变慢,诊断思路和性能评估谈谈
生产环境服务器变慢的原因很多,从整机,CPU,内存,磁盘,网络IO等方面查看,根据具体情况优化。
整机:top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。
我们知道判断一个系统的负载可以使用top,uptime等命令去查看,load average
它分别记录了一分钟、五分钟、以及十五分钟的系统平均负载
$ top
load average三个值 相加的和除以3再乘以100%,如果高于60%,说明系统负载大。
cpu:vmstat
vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。
$ vmstat -n 2 3
额外
查看所有cpu核信息
mpstat -P ALL 5 2
表示每5秒产生一个报告,总共产生2个。
每个进程使用CPU的用量分解信息
pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
pidstat使用-p
选项,我们可以查看特定进程的系统资源使用情况
使用-u
选项,pidstat将显示各活动进程的cpu使用统计,执行pidstat -u
与单独执行pidstat
的效果一样。
pidstat -u 1 -p 进程编号
每秒钟采样一次,打印出详细情况。
内存:free
怎么观察内存使用问题,free是很好用的一个命令
参数-m
以MB为单位显示内存使用情况。
$ free
total used free shared buff/cache available
Mem: 4000436 1192152 266780 53844 2541504 2468412
Swap: 4194300 524 4193776
$ free -g
total used free shared buff/cache available
Mem: 3 1 0 0 2 2
Swap: 3 0 3
$ free -m
total used free shared buff/cache available
Mem: 3906 1163 260 52 2482 2410
Swap: 4095 0 4095
经验值
- 应用程序可用内存/系统物理内存>70%内存充足
- 应用程序可用内存/系统物理内存<20%内存不足,需要增加内存
- 20%<应用程序可用内存/系统物理内存<70%内存基本够用
额外
pidstat使用-r
选项,pidstat将显示各活动进程的内存使用统计
pidstat -p 进程号 -r 采样间隔秒数
磁盘: df
$ df -h
文件系统 容量 已用 可用 已用% 挂载点
udev 1.9G 0 1.9G 0% /dev
tmpfs 391M 1.5M 390M 1% /run
/dev/sda1 28G 20G 7.1G 74% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 391M 20K 391M 1% /run/user/1000
可以看到,28G用了20G,已用74%
磁盘: IO
iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
iostat -xdk 2 3
参数 -d
表示,显示设备(磁盘)使用状态;-k
某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。3表示,取样3次。
额外
pidstat 使用-d
选项,我们可以查看进程IO的统计信息
pidstat -d 采样间隔秒数 -p 进程号
这里的程序是一个死循环打印程序,所以磁盘IO占用不大。
网络IO
ifstat工具是个网络接口监测工具,比较简单看网络流量
下载
http://gael.roualland.free.fr/ifstat/ (官网)
wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
编译安装
tar -zxvf ifstat-1.1.tar.gz
cd ifstat-1.1
./configure #默认会安装到/usr/local/bin/目录中
make
make install
注释:执行which ifstat
输出/usr/local/bin/ifstat
#ifstat
eth0 eth1
KB/s in KB/s out KB/s in KB/s out
0.07 0.20 0.00 0.00
0.07 0.15 0.58 0.00