Linux服务器监控性能测试

重要性:学会了整个Linux服务器监控,可以说你的性能测试就搞定了一半了,他可以充当你的眼睛,去发现那些更多的性能问题,包含你的应用程序层面的问题,因为很多应用程序的问题能到直观的体现在服务器上的一些资源
性能测试目的
发现服务器的性能瓶颈。配置的不同能够承受的最大任务数不同,能够承载的压力也不同。
测试范围以及性能指标
1.CPU
2.内存
3.磁盘
4.网络
5.版本
测试环境和生产环境配置不同?
解决:通过多次压测来计算性能损耗(比如集群,假设1台机器的性能是1,10台计算器集群的性能未必如设想的一样是10)
性能损耗的计算方式

横线是服务器数目
竖线是服务器指标(cpu、内存、磁盘、网络等的性能指数)
多次压测后的性能预估(最少要做3~5次的性能测试观察性能损耗到底有多少,比如说你的性能测试环境是8核CPU、16G内存这样的环境、假设说你一开始是3台服务器,他的性能表现是怎么样的,5台服务器,他的性能表现又是怎么样的,8台又是怎么样的?我们期望的结果是像蓝线那样正常曲线,但是实际结果一定会像红线那样有性能损耗,当你的服务器越多,性能损耗可能就越多、如果说加服务器这种野蛮的方法就一定能无休止的增长我们的性能,一些土豪公司完全不用做性能测试,那还要做性能测试干什么?)也就说当我们真正把项目上到我们的生产环境的时候,你的测试报告里面要有一个性能预估的体现,体现的依据有一个非常重要的一点,就是预估性能损耗指标(计算方式:相同脚本+相同场景+相同的并发用户数 然后增加你的服务器大概计算一下性能损耗,不一定说特别准确,所以只能叫预估)

服务器实时内存监控
top、vmstat、free 当然 top vmstat 也可以进行一些磁盘IO、CPU的一些监控,任何监控工具实际上底层都有可能是集成这些命令,当这些命令你会使用就,当用其他的工具的时候就对他们的基本运行原理基本也就是了然了。

服务器实时CPU监控
mpstat (Multiprocessor Statistics)
mpstat最大的特点是:可以查看多核心cup中每个计算核心的统计数据,而类似工具vmstat只能查看系统整体cpu情况。
语法
mpstat [-P {|ALL}] [internal | [count]]

安装
yum install -y sysstat

参数
-P {|ALL} 表示监控哪个CPU,cpu在[0,cpu个数-1]中取值
internal 相邻的两次采样的间隔时间
count 采样的次数,count只能和delay一起使用

注意:当没有参数时候,mpstat则显示系统启动以后所有信息的平均值。当有interval时,第一行的信息自系统启动以来的平均信息。从第2行开始,输出为前一个interval时间段的平均信息。(也就是说我们看第2行信息就行)

字段含义
%user 在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程 (usr/total)*100
%nice 在internal时间段里,nice值为负进程的CPU时间(%) (nice/total)*100
%sys 在internal时间段里,内核时间(%) (system/total)*100
%iowait 在internal时间段里,硬盘IO等待时间(%) (iowait/total)*100
%irq 在internal时间段里,硬中断时间(%) (irq/total)*100
%soft 在internal时间段里,软中断时间(%) (softirq/total)*100
%idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)*100

CPU总的工作时间
total_cur = user + system + nice + idle + iowait + irq + softirq
total_pre = pre_user + pre_system + pre_nice + pre_idle + pre_iowait + pre_irq + pre_softirq
user = user_cur – user_pre
total = total_cur - total_pre
其中 _cur 表示当前值,_pre 表示 interval 时间前的值。上表中的所有值可取到两位小数点。

注意点:
vmstat 和 mpstat 命令的差别:mpstat 可以显示每个处理器的统计,而 vmstat 显示所有处理器的统计。因此,编写糟糕的应用程序(不使用多线程体系结构)可能会运行在一个多处理器机器上,而不使用所有处理器。从而导致一个 CPU 过载,而其他 CPU 却很空闲。通过 mpstat 可以轻松诊断这些类型的问题。

vmstat 中所有关于 CPU 的总结都适合 mpstat。当您看到较低的 % idle 数字时,您知道出现了 CPU 不足的问题。当您看到较高的 % iowait 数字时,您知道在当前负载下 I/O 子系统出现了某些问题。
服务器实时网络监控
netstat
服务器实时磁盘监控
iostat是对系统磁盘IO操作进行监控,它的输出主要显示磁盘的读写操作的统计信息。同时给出cpu的使用情况

1.命令格式
iostat[参数][时间][次数]
2.命令功能
通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息。
3.命令参数
-C 显示CPU使用情况
-d 显示磁盘使用情况
-k 以 KB 为单位显示
-m 以 M 为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示NFS 使用情况
-p[磁盘] 显示磁盘和分区的情况
-t 显示终端和CPU的信息
-x [device]显示详细信息 输出指定要统计的磁盘设备名称,默认为所有磁盘设备
-V 显示版本信息
4.工具实例
实例1: 显示所有设备负载情况

cpu属性值说明:
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。

注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

disk属性值说明:
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操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比(繁忙程度)

备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。
实例2:定时显示所有信息
说明:每隔 2秒刷新显示,且显示3次
[root@wwy ~]# iostat 2 3
万能的sar命令

简介: sar(System Activity Reporter, 系统活动情况报告): 是用于监控Linux系统各个性能的最优秀、最全面的工具之一,可以从多方面对系统的活动进行报告。
监控范围: 文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

常用格式
sar [ options ] [ [ ] ]

interval: 采样周期,单位是秒;
count:采样次数,默认值是连续采样;
options:命令行选项。

sar命令的选项很多,下面只列出常用选项
-A:所有报告的总和
-u:输出整体CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息

如何使用sar获取以下性能分析数据:
整体CPU使用统计
各个CPU使用统计
内存使用情况统计
整体I/O情况
各个I/O设备情况
网络统计

整体CPU使用统计(-u)
使用-u选项,sar输出整体CPU的使用情况,不加选项时,默认使用的就是-u选项。以下命令显示采样时间为3s,采样次数为2次,整体CPU的使用情况:
[root@wwy ~]# sar 3 2 (或者 sar -u 3 2)
Linux 2.6.32-754.el6.x86_64 (wwy) 11/24/2019 x86_64 (2 CPU)

06:52:34 AM CPU %user %nice %system %iowait %steal %idle
06:52:37 AM all 0.34 0.00 2.18 0.00 0.00 97.49
06:52:40 AM all 0.33 0.00 1.34 0.00 0.00 98.33
Average: all 0.33 0.00 1.76 0.00 0.00 97.91

输出项说明:
CPU:all表示统计信息为所有CPU的平均值。
%usr:CPU在用户态执行进程的时间百分比。
%nice:CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比。
%system:CPU处在内核态执行进程的时间百分比。
%iowait:CPU用于等待I/O操作占用CPU总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。
%idle:CPU空闲时间百分比。

  1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
  2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
  3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU
    各个CPU使用统计(-P)
    “-P ALL”选项指示对每个内核输出统计信息
    [root@wwy ~]# sar -P ALL 1 1
    Linux 2.6.32-754.el6.x86_64 (wwy) 11/24/2019 x86_64 (2 CPU)

06:59:15 AM CPU %user %nice %system %iowait %steal %idle
06:59:16 AM all 0.00 0.00 2.00 0.00 0.00 98.00
06:59:16 AM 0 0.00 0.00 2.02 0.00 0.00 97.98
06:59:16 AM 1 0.00 0.00 1.00 0.00 0.00 99.00

Average: CPU %user %nice %system %iowait %steal %idle
Average: all 0.00 0.00 2.00 0.00 0.00 98.00
Average: 0 0.00 0.00 2.02 0.00 0.00 97.98
Average: 1 0.00 0.00 1.00 0.00 0.00 99.00
其中”CPU”列输出0,1,2,3,4,5指示对应的cpu核。也可针对单独一个内核显示,“-P 1”指示显示第二个内核的统计信息。
内存使用情况统计(-r)
使用-r选项可显示内存统计信息,以下命令显示以1秒为采样时间,显示2次内存信息:

[root@wwy ~]# sar -r 1 2
Linux 2.6.32-754.el6.x86_64 (wwy) 11/24/2019 x86_64 (2 CPU)

07:02:49 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
07:02:50 AM 1011644 893520 46.90 78048 475228 654776 16.36
07:02:51 AM 1010984 894180 46.93 78056 475224 654776 16.36
Average: 1011314 893850 46.92 78052 475226 654776 16.36
kbmemfree 空闲的物理内存大小
kbmemused 使用中的物理内存大小
%memused 物理内存使用率
kbbuffers 内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcached 缓存的文件大小
kbcommit 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
commit 这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值
整体I/O情况(-b)
使用-b选项,可以显示磁盘I/O的使用情况:Report I/O and transfer rate statistics.
[root@wwy ~]# sar -b 3 2
Linux 2.6.32-754.el6.x86_64 (wwy) 11/24/2019 x86_64 (2 CPU)

07:07:00 AM tps rtps wtps bread/s bwrtn/s
07:07:03 AM 1.00 0.00 1.00 0.00 10.70
07:07:06 AM 1.33 0.00 1.33 0.00 21.33
Average: 1.17 0.00 1.17 0.00 16.03
输出项说明:
tps: 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。
rtps: 每秒向磁盘设备的读请求次数
wtps: 每秒向磁盘设备的写请求次数
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
各个I/O设备情况(-d)
使用-d选项可以显示各个磁盘的统计信息,再增加-p选项可以以sdX的形式显示设备名称
[root@wwy ~]# sar -d -p 3 2
Linux 2.6.32-754.el6.x86_64 (wwy) 11/24/2019 x86_64 (2 CPU)

07:10:30 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
07:10:33 AM sda 2.34 0.00 32.11 13.71 0.00 0.43 0.29 0.07

07:10:33 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
07:10:36 AM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sda 1.17 0.00 16.08 13.71 0.00 0.43 0.29 0.03
输出项说明:
rd_sec/s: 每秒从设备读取的扇区数
wr_sec/s: 每秒往设备写入的扇区数
avgrq-sz: 发送给设备的请求的平均大小(以扇区为单位)
avgqu-sz: 发送给设备的请求队列的平均长度
await :服务等待I/O请求的平均时间,包括请求队列等待时间 (单位毫秒)
svctm :设备处理I/O请求的平均时间,不包括请求队列等待时间 (单位毫秒)
%util :一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比。

备注:

  • 如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
  • 如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。
  • 如果avgqu-sz比较大,也表示有当量io在等待。
    网络统计
    使用-n选项可以对网络使用情况进行显示,-n后接关键词”DEV”可显示eth0、eth1等网卡的信息:
    [root@wwy ~]# sar -n DEV 1 1
    Linux 2.6.32-754.el6.x86_64 (wwy) 11/24/2019 x86_64 (2 CPU)

07:14:20 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
07:14:21 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07:14:21 AM eth0 28.00 38.00 2.21 5.33 0.00 0.00 0.00
07:14:21 AM pan0 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 28.00 38.00 2.21 5.33 0.00 0.00 0.00
Average: pan0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
输出 说明
IFACE 网络设备名
rxerr/s 每秒接收的坏包总数
txerr/s 传输包时每秒发生错误的总数
coll/s 传输包时每秒发生冲突(collision)的总数
rxdrop/s 接收包时,由于缺乏缓存,每秒丢弃(drop)包的数量
txdrop/s 传输包时,由于缺乏缓存,每秒丢弃(drop)包的数量
txcarr/s 传输包时,每秒发生的传输错误(carrier-error)的数量
rxfram/s 接收包时,每秒发生帧校验错误(frame alignment error)的数量
rxfifo/s 接收包时,每秒发生队列(FIFO)一出错误的数量
txfifo/s 传输包时,每秒发生队列(FIFO)一出错误的数量

总结:
要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来
怀疑CPU存在瓶颈,可用 sar -u和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d等来查看

Linux监控工具nmon
nmon是一种在Linux 操作系统上广泛使用的监控与分析工具,nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中,然后通过nmon_analyzer工具产生数据文件与图形化结果(可以辅助出测试报告之类)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值