linux - 服务器性能评估
影响Linux服务器性能的因素
- cpu
- 内存
- 磁盘IO
- 网络IO
系统性能评估标准
影响性能因素 | 好 | 坏 | 糟糕 |
---|---|---|---|
CPU | user% + sys%< 70% | user% + sys%= 85% | user% + sys% >=90% |
内存 | Swap In(si)=0Swap Out(so)=0 | Per CPU with 10 page/s | More Swap In & Swap Out |
磁盘 | iowait % < 20% | iowait % =35% | iowait % >= 50% |
其中:
%user:表示CPU处在用户模式下的时间百分比。
%sys:表示CPU处在系统模式下的时间百分比。
%iowait:表示CPU等待输入输出完成时间的百分比。
swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM
swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。
系统性能分析工具
- 常用系统命令
Vmstat、sar、iostat、netstat、free、ps、top等 - 常用组合方式:
用vmstat、sar、iostat检测是否是CPU瓶颈。
用free、vmstat检测是否是内存瓶颈。
用iostat检测是否是磁盘I/O瓶颈。
用netstat检测是否是网络带宽瓶颈。
系统整体负载查询(uptime)
uptime 08:21:34 up 36 min, 2 users, load average: 0.00, 0.00, 0.00 #当前服务器时间: 08:21:34 #当前服务器运行时长 36 min #当前用户数 2 users #当前的负载均衡 load average 0.00, 0.00, 0.00,分别取1min,5min,15min的均值
该命令为查询CPU的负载情况,在观察时应取得CPU核心数目N,观察后面2个数字,用数字/N,如果得到的值小于0.7即可无忧。
CPU性能评估
vmstat命令
利用vmstat命令监控系统CPU,该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU一个负载情况。
vmstat 5 5:每5秒监控一次,总共5次
- r:表示运行队列(就是说多少个进程真的分配到CPU),一般运行队列多大,表示CPU很繁忙,导致CPU使用率过高(运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不能超过总核数的2倍,否则代表系统压力过大)
- b:表示阻塞的进程(等待资源的进程数,比如正在等待磁盘I/O、网络I/O等。)
- swpd :虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
- cs: 每秒上下文切换次数
- us: 用户CPU时间
- sy: 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
- id : 空闲 CPU时间
- wt :等待IO CPU时间
- free :空闲的物理内存的大小
- buff: 设备和设备之间的缓冲 。 Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存
- cache : cpu和内存之间的缓冲
- si: 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
- so :每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
- bi :块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte
- bo:块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
- wa :等待IO CPU时间。
- us: 用户CPU时间
- sy: 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
- id :空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
重点参数 r,b,swpd,free,buff,cache,si,so,bi,bo
sar命令
sar分析包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等
命令格式: sar [options] [-A] [-o file] t [n]
其中:
t:采样间隔,n为采样次数,默认值是1
-o file:表示将命令结果以二进制格式存放在文件中,file 是文件名。
options 为命令行选项,sar命令常用选项如下:
- -A:所有报告的总和
- -u:输出CPU使用情况的统计信息
- -v:输出inode、文件和其他内核表的统计信息
- -d:输出每一个块设备的活动信息
- -r:输出内存和交换空间的统计信息
- -b:显示I/O和传送速率的统计信息
- -a:文件读写情况
- -c:输出进程统计信息,每秒创建的进程数
- -R:输出内存页面的统计信息
- -y:终端设备活动情况
- -w:输出系统交换活动信息
sar -u 2 5:输出cpu使用情况和统计信息
输出说明:
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
- 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
- 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
- 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU
mpstat命令
查看所有CPU核信息:mpstat -P ALL 2
pidstat命令
每个进程使用cpu的用量分解信息:pidstat -u 1 -p 进程编号
内存性能评估
free命令
- free
- free -m 以M为单位
- free -g 以G为单位
pidstat命令
pidstat -p 进程号 -r 采样间隔秒数
vmstat命令
vmstat 2 3
[ ~]# vmstat 2 3 procs ———–memory———- —swap– —–io—- –system– —–cpu—— r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0 0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0 0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0
说明:
- memory
swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。
free列表示当前空闲的物理内存数量(以k为单位)
buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。
cache列表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。 - swap
si列表示由磁盘调入内存,也就是内存进入内存交换区的数量。
so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。
一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。
磁盘I/O性能评估
- 磁盘存储基础
熟悉RAID存储方式,可以根据应用的不同,选择不同的RAID方式。
尽可能用内存的读写代替直接磁盘I/O,使频繁访问的文件或数据放入内存中进行操作处理,因为内存读写操作比直接磁盘读写的效率要高千倍。
将经常进行读写的文件与长期不变的文件独立出来,分别放置到不同的磁盘设备上。
对于写操作频繁的数据,可以考虑使用裸设备代替文件系统。 - 使用裸设备的优点有:
数据可以直接读写,不需要经过操作系统级的缓存,节省了内存资源,避免了内存资源争用。
避免了文件系统级的维护开销,比如文件系统需要维护超级块、I-node等。
避免了操作系统的cache预读功能,减少了I/O请求。 - 使用裸设备的缺点是:
数据管理、空间管理不灵活,需要很专业的人来操作。
iostat命令
利用iostat评估磁盘
[ ~]# iostat -d 2 3 Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU) Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.87 2.58 114.12 6479462 286537372 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.00 0.00 12.00 0 24
对上面每项的输出解释如下:
- Blk_read/s表示每秒读取的数据块数。
- Blk_wrtn/s表示每秒写入的数据块数。
- Blk_read表示读取的所有块数。
- Blk_wrtn表示写入的所有块数。
- 可以通过Blk_read/s和Blk_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。
- 对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。
sar命令
利用sar评估磁盘性能
通过"sar –d"组合,可以对系统的磁盘IO做一个基本的统计,请看下面的一个输出:
[ ~]# sar -d 2 3 Linux 2.6.9-42.ELsmp (webserver) 11/30/2008 _i686_ (8 CPU) 11:09:33 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 11:09:35 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:09:35 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 11:09:37 PM dev8-0 1.00 0.00 12.00 12.00 0.00 0.00 0.00 0.00 11:09:37 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 11:09:39 PM dev8-0 1.99 0.00 47.76 24.00 0.00 0.50 0.25 0.05 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: dev8-0 1.00 0.00 19.97 20.00 0.00 0.33 0.17 0.02
需要关注的几个参数含义:
- await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。
- svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。
- %util表示一秒中有百分之几的时间用于I/O操作。
对以磁盘IO性能,一般有如下评判标准:
- 正常情况下svctm应该是小于await值的,而svctm的大小和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会间接的导致svctm值的增加。
- await值的大小一般取决与svctm的值和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
- %util项的值也是衡量磁盘I/O的一个重要指标,如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。
网络性能评估
(1)通过ping命令检测网络的连通性
(2)通过netstat –i组合检测网络接口状况
(3)通过netstat –r组合检测系统的路由表信息
(4)通过sar –n组合显示系统的网络运行状态
(5)通过ifstat命令