性能测试过程中最重要的一个部分是资源监控,有针对性的采集测试数据,才能做出更合理的结果分析,有利于查找系统瓶颈从而进行有效的性能优化。就Linux系统而言,性能测试过程中需要监控的系统指标主要包含:CPU、内存、磁盘和网络。通过学习网上各路大神的分享,总结记录了以下几个Linux系统资源监控相关的命令。
服务器CPU监控
查看服务器CPU配置
1、查看物理cpu个数,sort 每行按assic码排序后展示,uniq 忽略重复行
cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l
2、查看每个物理CPU中的core个数
cat /proc/cpuinfo |grep "cpu cores"|wc -l
3、查看逻辑CPU个数
cat /proc/cpuinfo |grep "processor"|wc -l
查看服务器CPU使用情况
查看CPU使用情况的常用命令如下:
1、 top
top #按1查看每个逻辑cpu的情况,再按1返回
top -d 2 -n 5 -b # -d每隔2s打印,-n循环打印5次,-b以批处理模式逐一显示结果
2、 vmstat
vmstat 2 5 #每隔2s打印,打印5次,-t则显示时间
输出项说明:
- us: 在指定时间间隔内CPU在用户态的利用率。
- sy: 在指定时间间隔内CPU在核心态的利用率。
- id: 在指定时间间隔内CPU空闲时间比。
- wa: 在指定时间间隔内CPU因为等待I/O而空闲的时间比。
3、 iostat
iostat -c 1 5 #每隔1s打印,打印5次
输出项说明:
- %user:CPU处在用户模式下的时间百分比。
- %nice:CPU处在带NICE值的用户模式下的时间百分比。
- %system:CPU处在系统模式下的时间百分比。
- %iowait:CPU等待输入输出完成时间的百分比。
- %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
- %idle:CPU空闲时间百分比。
4、 sar
sar 3 2 #每隔3s打印,打印2次
输出项说明:
- CPU:all表示统计信息为所有CPU的平均值。
- %usr:CPU在用户态执行进程的时间百分比。
- %nice:CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比。
- %system:CPU处在内核态执行进程的时间百分比。
- %iowait:CPU用于等待I/O操作占用CPU总时间的百分比。 若 %iowait 的值过高,表示硬盘存在I/O瓶颈 ;
- %steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。
- %idle:CPU空闲时间百分比。 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量 。若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU;
服务器内存监控
查看服务器内存
1、 查看服务器内存信息
cat /proc/meminfo
2、 free
free -m
free -g
total=used+free+buff/cache
- total:内存总数,系统刨去bios等保留的内存、内核保留的内存,剩下的就是total内存;
- free:空闲内存,查看可用内存,free内存至少>=1/2的total内存
- buff/cache:虽然被使用,但是有可以回收部分,所以也可以算是空闲内存;
查看服务器内存使用情况
1、 查看某个进程占用内存情况
memstat -p [pid]
2、 sar
sar -r 2 3
输出项说明:
- kbmemfree: 可用的空闲内存,单位是KB,约等于free(free命令)
- kbmemused: 已经使用的内存,这个没有考虑内核自己用到的内存,约等于used+buff/cache(free命令)
- %memused: 目前内存的使用率
- kbbuffers: 内核缓冲区(buffer)使用的内存数量,单位为 KB
- kbcached: 内核高速缓存(cache)数据使用的内存数量,单位为 KB
- kbcommit: 当前工作负载锁需要的内存,这是一个估计值,多少RAM/swap可以保证当前负载不会出现out of memory
- %commit: 当前工作负载需要的内存占RAM+swap的百分比
- kbactive: 活跃内存的大小(内存最近被使用过,并且不会被回收)
- kbinact: 不活跃内存大小(最近未被使用的内存,很符合回收策略的内存)
- kbdirty: 等待写回硬盘的内存数量
另外,查看内存分页命令:
sar -B 2 2 #每隔2s,打印2次,监控内存分页
输出项说明:
- pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)
- pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)
- fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
- majflt/s:每秒钟产生的主缺页数.
- pgfree/s:每秒被放入空闲队列中的页个数
- pgscank/s:每秒被kswapd扫描的页个数
- pgscand/s:每秒直接被扫描的页个数
- pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数
- %vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比
3、vmstat
vmstat 2 5 #每隔2s打印,打印5次
输出项说明:
- si: 交换内存使用,由交换区调入内存,每秒传输的大小。
- so: 交换内存使用,由内存调入交换区,每秒传输的大小。 内存充足时si、so长期为0,当si、so长期大于0时表明系统性能受影响。当内存使用率较高,但是si、so长期为0,则内存足够。
服务器磁盘分析
1、查看磁盘和分区
fdisk -l
2、查看文件系统磁盘占用情况
df -h
3、查看某个目录的大小
du -sh /home
du -cksh *|sort -r|head -n 10 #找出当前目录下,占用空间最大的前10个目录,sort -r 降序排列
4、查看磁盘相关信息
iostat -x 2 3
iostat -x -d sda 2 3 #指定磁盘sda
输出项说明:
- rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
- wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
- r/s: 每秒完成的读 I/O 设备次数。即 rio/s
- w/s: 每秒完成的写 I/O 设备次数。即 wio/s
- rsec/s: 每秒读扇区数。即 rsect/s
- wsec/s: 每秒写扇区数。即 wsect/s
- rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
- wkB/s: 每秒写K字节数。是 wsect/s 的一半。
- avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
- avgqu-sz: 平均I/O队列长度。
- await: 平均每次设备I/O操作的等待时间 (毫秒)。await值取决svctm和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
- svctm: 平均每次设备I/O操作的服务时间 (毫秒)。正常svctm应小于await值,而svctm和磁盘性能有关,CPU、内存负荷也会对svctm值造成影响,过多的请求也会间接的导致svctm值的增加。
- %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比。如%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
服务器网络分析
1、查看网卡流量
sar -n DEV 1 1
输出项说明:
- IFACE:LAN接口
- rxpck/s:每秒钟接收的数据包
- txpck/s:每秒钟发送的数据包
- rxbyt/s:每秒钟接收的字节数
- txbyt/s:每秒钟发送的字节数
- rxcmp/s:每秒钟接收的压缩数据包
- txcmp/s:每秒钟发送的压缩数据包
- rxmcst/s:每秒钟接收的多播数据包
2、网络性能评估
- 通过ping命令检测网络的连通性
- 通过netstat –i组合检测网络接口状况
- 通过netstat –r组合检测系统的路由表信息
- 通过sar –n组合显示系统的网络运行状态
监控工具nmon
1、安装nmon
apt-get install nmon
2、使用nmon
nmon -s2 -c1200 -f /home/ #启动新的nmon,2s刷新一次屏幕,一共刷新1200次,nmon运行2*1200s
ps -ef|grep nmon #查看nmon
ps -ef|grep nmon|awk '{print$2}'|xargs kill -9#停止已经启动的nmon
3、使用nmon analyser.xlsm打开nmon文件,根据获取的数据自动生成图表,CPU、内存、磁盘等信息一目了然。