linux - 服务器性能评估

影响Linux服务器性能的因素

  1. cpu
  2. 内存
  3. 磁盘IO
  4. 网络IO

系统性能评估标准

影响性能因素糟糕
CPUuser% + sys%< 70%user% + sys%= 85%user% + sys% >=90%
内存Swap In(si)=0Swap Out(so)=0Per CPU with 10 page/sMore 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。

系统性能分析工具

  1. 常用系统命令
    Vmstat、sar、iostat、netstat、free、ps、top等
  2. 常用组合方式:
    用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次

linux - 服务器性能评估

  • 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使用情况和统计信息

linux - 服务器性能评估

输出说明:

CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。

  1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
  2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
  3. 若 %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性能评估

  1. 磁盘存储基础
    熟悉RAID存储方式,可以根据应用的不同,选择不同的RAID方式。
    尽可能用内存的读写代替直接磁盘I/O,使频繁访问的文件或数据放入内存中进行操作处理,因为内存读写操作比直接磁盘读写的效率要高千倍。
    将经常进行读写的文件与长期不变的文件独立出来,分别放置到不同的磁盘设备上。
    对于写操作频繁的数据,可以考虑使用裸设备代替文件系统。
  2. 使用裸设备的优点有:
    数据可以直接读写,不需要经过操作系统级的缓存,节省了内存资源,避免了内存资源争用。
    避免了文件系统级的维护开销,比如文件系统需要维护超级块、I-node等。
    避免了操作系统的cache预读功能,减少了I/O请求。
  3. 使用裸设备的缺点是:
    数据管理、空间管理不灵活,需要很专业的人来操作。

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表示写入的所有块数。
  1. 可以通过Blk_read/s和Blk_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。
  2. 对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。

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

需要关注的几个参数含义:

  1. await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。
  2. svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。
  3. %util表示一秒中有百分之几的时间用于I/O操作。

对以磁盘IO性能,一般有如下评判标准:

  1. 正常情况下svctm应该是小于await值的,而svctm的大小和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会间接的导致svctm值的增加。
  2. await值的大小一般取决与svctm的值和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
  3. %util项的值也是衡量磁盘I/O的一个重要指标,如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。

网络性能评估

(1)通过ping命令检测网络的连通性
(2)通过netstat –i组合检测网络接口状况
(3)通过netstat –r组合检测系统的路由表信息
(4)通过sar –n组合显示系统的网络运行状态
(5)通过ifstat命令

相关推荐