Linux服务器性能测试基础指标与命令

内容提要:

  • linux性能测试分析的三个方向
  • 系统性能参数参考表
  • Linux性能测试/分析常用工具解析
  • vmstat、iostat、netstat、top等

《高性能linux服务器构建实战运维监控、性能调优与集群应用》高俊峰
——学习资料

一、基础指标

系统性能测试的目的

  • 找到系统性能的瓶颈
  • 提供性能优化方案
  • 使系统硬件和软件资源的使用达到平衡

分析linux性能的三个方向

系统硬件资源
  • CPU
    CPU主要用于解释计算机指令和处理数据,它的速度和性能决定了系统整体的性能。CPU的核心参数是核心数量和主频(既处理数据的速度),除此之外还关注是否支持超线程等。CPU有两种模式,一种是内核模式,一种是用户模式。

    • 超线程:在单核心CPU上,利用空闲CPU资源,实现逻辑上的并行计算。
    • 两个4核CPU会比8个单核CPU整体性能要高。
    • CPU内核模式:可以执行所有CPU指令,访问任意地址的内存,所有的计算机硬件资源均可访问。
    • CPU用户模式:只能调用系统接口访问硬件和内存,访问有限的内存。
  • 内存
    内存是外存(磁盘)与CPU沟通的桥梁,用于暂时存放CPU的运算数据,以及与硬盘等外部存储器交换数据。linux采用物理内存和虚拟内存两种方式,虚拟内存是一种内存管理技术,它使应用程序认为它拥有连续可用的内存(既连续完整的地址空间),但实际上,它被存储在分别存储在物理内存碎片中。

    • 32位Linux系统上,单个进程最大只能使用2GB内存。64位Linux系统几乎没有内存使用限制。

    • CPU通过物理总线访问内存,32位机器有32条总线,可访问的最大内存地址为2^32bit=4GB。但64位机器没有64位总线,并且最大内存受限于操作系统,Linux目前支持最大256G内存。

    • 虚拟内存

      1. 通过虚拟内存来控制进程使用的真实物理内存地址(既虚拟内存是连续地址,但进程实际使用的物理内存可能是拼凑的)
      2. 系统启动时,将物理内存以4K为单位,划分多页(称作页表),虚拟内存管理该映射表。4G内存只需要8M的映射表即可。
      3. CPU通过内存管理单元MMU(Memory Management Unit)来把虚拟内存地址翻译成物理地址。
      4. 当物理内存不足时,Linux会将暂时不用的内存数据放到磁盘上(既放到SWAP,交换分区上),等进程需要时再把这些数据加载到内存。
  • 磁盘I/O
    磁盘的I/O(Input/Out)指硬盘的读写。磁盘容量大,价格低,存取速度快,断电信息后不丢失,可随机存取,因此成为计算机系统中最主要的文件存储设备。影响磁盘的关键因素是磁盘访问时间,即磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。通常可以使用磁盘技术(例如RAID)提高磁盘的读写性能。

    • 硬盘主要分两种:机械硬盘(HDD)和固态硬盘(SSD)。机械硬盘存在机械结构,读写由磁头在转动的盘上寻找文件扇区,它造价低寿命长。固态硬盘大都由主控缓存和闪存组成,不存在机械结构,读写无需寻址,它速度极快(比机械硬盘快2-8倍)但由于读写次数限制所以寿命短。
    • IOPS(Input/Output Per Second)即每秒的输入输出量(或读写次数),即指每秒内系统能处理的I/O请求数量。IOPS = 1000ms / (Tseek + Trotation + Transfer)。常见磁盘理论随机读写最大IOPS:
      • 7200rpm的磁盘 IOPS = 76 IOPS
      • 10000rpm的磁盘IOPS = 111 IOPS
      • 15000rpm的磁盘IOPS = 166 IOPS
    • 磁盘访问时间:
      • 寻道时间Tseek:是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。
      1. 旋转延迟Trotation:是指盘片旋转将请求数据所在的扇区移动到读写磁盘下方所需要的时间。旋转延迟取决于磁盘转速,通常用磁盘旋转一周所需时间的1/2表示。比如:7200rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000rpm的磁盘其平均旋转延迟为2ms。
      2. 数据传输时间Ttransfer:是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分消耗时间。简单计算时可忽略。
    • RAID(磁盘阵列)技术,由多个独立的磁盘,组成一个容量巨大的磁盘组,通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput):
      • RAID可以分为RAID0、RAID1、RAID2、RAID3、RAID5、RAID0+1等等级别,根据应用特性,选择适合自身的RAID级别。
      • RAID0级别:通过把多块硬盘粘合成一个容量更大的硬盘组,提高磁盘的性能和吞吐量。至少两块磁盘,该组合没有容错和修复功能。
      • RAID1级别:磁盘镜像,通过把一个磁盘的数据镜像到另一个磁盘上,保证了数据可靠性和可修复性,成本高。
      • RAID5级别:采用磁盘分段加奇偶校验技术,从而提高系统的可靠性。RAID5读出效率很高,写入效率一般。至少三块磁盘,允许一块磁盘故障(不影响数据的可用性)。
      • RAID0+1级别:把RAID0和RAID1技术结合就成为RAID0+1,数据分布在多个盘上,每个盘都有其镜像。具有快速读/写能力。至少需要四块磁盘,允许一个磁盘故障(不影响数据的可用性)。
  • 网络带宽
    网络带宽是影响性能的一个重要因素,低速的、不稳定的网络会导致网络应用程序的访问阻塞。现在通常使用光纤或千兆网络,带宽问题对应用程序性能造成的影响正在逐步降低。

操作系统相关资源
  • 系统安装优化
    1. 磁盘分配,根据不同的读写需求分配使用不同的RAID级别。
    2. 虚拟内存大小设定,根据物理内存大小确定虚拟内存的分配大小。
  • 内核参数优化
    1. 共享内存段(kernel.shmmax、kernel.shmmni、kernel.shmall):多个进程共享一个存储区,共享内存使IPC通信(既进程间通信)最快的方式。
    2. 文件句柄(fs.file-max):系统所有进程可以打开文件的句柄数量。
    3. net.ipv4.ip_local_port_range:可用端口范围。
    4. net.ipv4.tcp_tw_reuse:控制TIME-WAIT sockets的处理方式,默认为0,表示不处理。
    5. net.core.somaxconn:表示socket监听的监听队列上限。当一个请求尚未被处理或建立时,它会进入监听队列中,socket server会处理监听队列中的请求,当server处理请求较慢时,监听队列被填满,新的请求将会被拒绝。
    6. 等等……
  • 文件系统优化
    1. linux下可选的文件系统有ext2、ext3、xfs、ReiserFS等。
    2. 选择文件系统时可以从日志记录机制、写入性能、寻址方式等方面综合考虑。
应用程序软件资源

如果一个应用程序存在bug,那么即使其他方面达到了最优状态,整个应用系统还是性能低下的。所以,对应用程序的优化是重中之重。例如JVM调优(堆大小、垃圾收集器、JDBC性能、SQL优化、链接池等)、架构改进(高速缓存、横向扩展等)。

系统性能分析参考值

影响性能因素糟糕
CPUuser%+sys%<70%user%+sys%<85%user%+sys%<90%
内存Swap In(si) = 0
Swap Out(so) = 0
si / so = 10 page/s> 10 page/s
磁盘iowait% < 20%iowait% = 35%iowait% >= 50%
  • user% 表示CPU处在用户模式下的时间百分比。
  • sys%表示CPU处在系统模式下的时间百分比。
  • Swap In既si,表示虚拟内存的页表导入,既从SWAP分区交换到内存。
  • Swap Out既so,表示虚拟内存的页表导出,既从内存交换到SWAP分区。
  • iowait%表示CPU等待输入输出完成时间的百分比。

二、常用工具

1. vmstat

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写。该命令可以对操作系统的内存信息、进程状态和CPU活动等进行监视。

命令语法:

vmstat [其他参数] [delay [count]]
  • delay,表示每次统计的时间间隔,单位为s。
  • count,表示总共统计几次。

结果分析
该行命令表示每1秒输出一次记录,总共输出5次
[该行命令表示每1秒输出一次记录,总共输出5次]

(可参考man vmstat)
每项输出解析如下:

  • procs进程
    • r列表示运行队列中的进程数量,如果这个值长期大于系统CPU个数,说明CPU不足,需要增加CPU。
    • b列表示处于非中断睡眠状态的进程数。意味着进程被阻塞,需要根据使用的应用系统来分析是否合理。
  • memory内存
    • swpd列表示切换到内存交换区的内存大小。如果swpd的值大于0,但是si、so的值长期为0,这种情况一般不会影响系统性能。
    • free列表示当前空闲的物理内存数量(单位:KB)。
    • buff列表示buffers cache的内存数量,主要用于块设备缓存,buffer就是写入,例如从内存中将数据往硬盘写入,中间会用到buffer。(单位:KB)
    • cache列表示page cached的内存数量,主要用于缓存文件,cache就是读,例如将硬盘的数据读取出来放在内存的缓存区中,以后再次访问同一个资源,速度会快很多。(单位:KB)
  • swap交换
    • si列表示由磁盘调入内存的交换页数量(单位:KB/秒)。如果长期不为0,则表示内存不足。
    • so列表示由内存调入磁盘的交换页数量(单位:KB/秒)。如果长期不为0,则表示内存不足,应考虑增加系统内内存。
  • io磁盘读写
    • bi列(blocks input)表示每秒从块设备接收到的块数(单位:块/秒),也就是读磁盘。
    • bo列(blocks output)表示每秒发送到块设备的块数(单位:块/秒),也就是写磁盘。
    • bi+bo参考值为1000,如果超过1000,且wa值比较大,则表示系统磁盘I/O有问题,应该考虑提高磁盘的读写性能。
  • system系统相关
    • in列表示在某一时间间隔内观察到的每秒设备中断数,包括时钟中断。
    • cs列表示每秒产生的上下文切换次数。
    • 上下文切换:指CPU从一个进程或者线程切换到另一个进程或线程,过程中会涉及到保存上一个任务的上下文(寄存器、程序计数器等),加载新任务的上下文(寄存器、程序计数器等),跳转到新任务的位置,运行新任务。
    • 这2个值越大,由内存消耗的CPU时间越多。
  • cpu
    • us列显示了用户进程消耗的CPU时间百分比。
    • sy列显示了内核进程消耗的CPU时间百分比。
    • id列显示了CPU处在空闲状态的时间百分比。
    • wa列显示了IO等待所占用的CPU时间百分比。
    • st列(Steal time)表示虚拟监视器在服务另一个虚拟处理器的时候,虚拟CPU等待实际CPU的时间的百分比。该值比较高的话,你需要向主机供应商申请扩容虚拟机。服务器上的另一个虚拟机可能拥有更大更多的CPU时间片,你可能需要申请升级以与之竞争。

综上所述,在CPU评估中,需要关注procs项的r列和CPU项的us、sy和id列的值。

2. sar

sar(System Activity Reporter系统活动情况报告)可以全面获取系统的CPU、运行队列、磁盘I/O、交换分区、内存、网络等性能数据。

命令语法:

sar [其他选项] [interval [count]]
  • interval,表示采样间隔时间,是必须有的参数。
  • count,表示采样次数,是可选参数。

其他常用选项:

  • -P,显示当前系统中指定CPU的使用情况。
sar -P 0 3 5
  • -d,显示系统所有硬盘设备在采样时间内的使用情况。
  • -r,显示系统内存在采样时间内的使用情况。
  • -n,显示网络运行状态。参数后面可跟DEV,EDEV,NFS,NFSD,SOCK,IP,EIP,ICMP,EICMP,TCP,ETCP,UDP,SOCK6,IP6,EIP6,ICMP6,EICMP6和UDP6。ALL显示所有开关,它们可以单独或者一起使用。
  • -u,显示系统所有CPU在采样时间内的负载状态。

结果分析
该命令表示查看所有CPU的负载状态,每隔1秒钟输出一次,总共输出5次
[该命令表示查看所有CPU的负载状态,每隔1秒钟输出一次,总共输出5次]

(可参考man sar)
每项输出解析如下:

  • %user列显示了用户进程消耗的CPU时间百分比。
  • %nice列显示了运行正常进程所消耗的CPU时间百分比。
  • %system列显示了系统进程消耗的CPU时间百分比。
  • %iowait列显示了I/O等待所占用的CPU时间百分比。
  • %steal列(Steal time)表示虚拟监视器在服务另一个虚拟处理器的时候,虚拟CPU等待实际CPU的时间的百分比。该值比较高的话,你需要向主机供应商申请扩容虚拟机。服务器上的另一个虚拟机可能拥有更大更多的CPU时间片,你可能需要申请升级以与之竞争。
  • %idle显示了CPU处在空闲状态的时间百分比。

结果的最后一行Average是汇总行,是上面统计信息的平均值。sar本身的运行会使%user偏高一点,但不会对统计结果产生太大影响。

3. iostat

iostat是I/O statistics(输入/输出统计)的缩写,主要是对系统的磁盘I/O操作进行监控。要使用iostat工具,需要在系统上安装一个Sysstat的工具包,Sysstat是一个开源软件,官方网址是http://pagesperso-orange.fr/sebastien.godard。

命令语法:

iostat [其他选项] [interval [count]]
  • interval,表示采样间隔时间。
  • count,表示采样次数。

其他常用选项:

  • -c,显示CPU的使用情况。
  • -d,显示磁盘的使用情况。
  • -t,打印出统计信息的开始执行时间。
  • -x device,指定要统计的磁盘设备名称,默认为所有磁盘设备。

结果分析
该命令表示显示CPU统计信息,每隔1秒输出,总共输出3次
[该命令表示显示CPU统计信息,每隔1秒输出,总共输出3次]

该命令为查看系统磁盘的使用状况,每隔1秒输出,总共输出3次
[该命令为查看系统磁盘的使用状况,每隔1秒输出,总共输出3次]

(可参考man iostat)
每项输出解析如下:

  • Blk_read/s表示每秒读取的数据块数。
  • Blk_wrtn/s表示每秒写入的数据块数。
  • Blk_read表示读取的所有块数。
  • Blk_wrtn表示写入的所有块数。

需要注意的一点是,输出结果的第一项是系统从启动到统计时输出的所有传输信息,第二次输出才是命令执行时间段内系统的传输值。

如果Blk_wrtn/s值很大,表示磁盘写操作很频繁,可以考虑优化磁盘或优化程序。如果Blk_read/s值很大,表示磁盘的读操作很多,可以将读取的数据放入内存中进行操作。这2个选项的值没有一个固定大小,根据系统的不同,会有不同的值。但如果存在长期并超大的数据读写,是不正常的情况。

该命令表示查看所有磁盘的详细信息,每隔1秒输出,总计输出3次
[该命令表示查看所有磁盘的详细信息,每隔1秒输出,总计输出3次]

每项输出解析如下:

  • rrqm/s表示每秒进行合并的读操作数目。
  • wrqm/s表示每秒进行合并的写操作数目。
  • r/s表示每秒完成读I/O设备的次数。
  • w/s表示每秒完成写I/O设备的次数。
  • rsec/s表示每秒读取的扇区数。
  • wsec/s表示每秒写入的扇区数。

4. free

free是监控Linux内存使用状况最常用的命令。

命令语法:

free [其他选项]

其他常用选项:

  • -s delay,表示每隔delay秒输出一次结果。
  • -c count,表示总共输出count次结果。
  • -m,表示查看以M为单位的内存使用情况。

结果分析
表示查看以M为单位的内存使用情况
[表示查看以M为单位的内存使用情况]

5. uptime

uptime是监控系统性能最常用的一个命令,主要用来统计系统当前的运行状况。

命令语法:

uptime [其他选项]

结果分析
统计系统当前运行状况
[统计系统当前运行状况]

每项输出解析如下:

  • 系统现在的时间。
  • 系统从上次开机到现在运行了多长时间。
  • 系统目前有多少登录用户。
  • 系统在1分钟内、5分钟内、15分钟内的平均负载。

如果load average的三个值长期大于CPU个数,说明CPU繁忙,负载很高,可能会影响系统性能。

6. netstat

netstat命令用于显示本机网络连接、运行端口、路由表等信息。

命令语法:

netstat [其他选项]

其他常用选项:

  • -a,列出所有的端口,包括监听和未监听的。
  • -t,列出所有tcp协议的端口。
  • -u,列出所有udp协议的端口。
  • -n,禁止域名解析,结果以IP显示。可以提高查询速度。
  • -l,仅列出有在Listen(监听)的服务状态。
  • -r,显示路由信息,路由表。
  • -p,显示建立相关链接的程序名。
  • -s,按各个协议进行统计。

结果分析
查看本机网络相关情况,more表示分页查看
[查看本机网络相关情况,more表示分页查看]

每项输出解析如下:

  • Proto表示网络协议名称。
  • Recv-Q表示接收队列的数量,已经在本地的缓冲中,但是还没有被进程取走。。
  • Send-Q表示发送队列的数量,从本机发送,但依然在本地的缓冲中,不具备 ACK 标志的数据包。
  • Local Address表示本机的IP地址和端口号。
  • ForeignAddress表示远程主机的IP地址和端口号。
  • State表示状态,主要有LISTEN(监听)、ESTABLISHED(已建立连接的)、TIME_WAIT(连接完全关闭前的状态)、CLOSE_WAIT(被动关闭)。

如果Recv-Q和Send-Q的数量不为0,则表示软件包正在队列中堆积,对应程序可能存在问题。另外也需要关注State中的异常状态,如TIME_WAIT、CLOSE_WAIT等。

相关知识点——TCP四次挥手状态变更过程
在这里插入图片描述
在TCP协议下双方需要通过四个包的互发完成双向确认工作,才能最终关闭这个连接。

  1. 客户端要求关闭,此时客户端状态为 FIN_WAIT_1,同时向服务器发送了 FIN 包,服务器状态变更为CLOSE_WAIT;
  2. 当然,服务器需要对收到FIN包向客户端确认,于是服务器向客户端发送了 ACK 包,客户端因此变更状态为FIN_WAIT_2;
  3. 服务器处理了这个确认后,再次主动向客户端发送FIN包,同时自己状态变更为LAST_ACK,收到来自服务器FIN包的客户端也将自己状态变更为TIME_WAIT;
  4. 最后一步,客户端会对来自服务器的FIN包回复确认,服务器收到该ACK包后,将自己状态置为CLOSED,如此,整个关闭过程结束。

7. top

top命令能够实时显示系统中各个进程的资源占用情况。命令可以按照CPU的使用、内存的使用和执行时间对系统任务进程进行排序显示。

命令语法:

top [其他选项]

其他常用选项:

  • -d,指定每次屏幕信息刷新之间的时间间隔。
  • -i,不显示闲置或僵死的进程信息。
  • -c,显示进程的整个命令路径。
  • -b,以非交互和非全屏模式运行,通常用于批处理中。
  • -n,总共输出的次数。

top的常用交互式命令:

  • h,显示帮助信息。
  • k,终止一个进程。
  • i,忽略闲置进程和僵死进程。
  • c,切换显示完整命令行和命令名称信息。
  • q,退出top显示。
  • M,根据驻留内存大小进行排序输出。
  • P,根据CPU使用百分比大小进行排序输出。
  • W,将当前top设置写入~/.toprc文件中

结果分析
top命令
[top命令]

前5行显示为统计信息区,后面几行为进程信息区。每项输出解析如下:
(1)统计信息区

  • 第一行:当前系统时间、系统启动到现在的时间、当前登录系统用户数、系统平均负载(分别为1分钟、5分钟和15分钟)
  • 第二行:进程的总数(Tasks)、正在运行的进程数(running)、处于休眠的进程数(sleeping)、停止的进程数(stopped)、僵死的进程数(zombie)。
  • 第三行:用户进程占用CPU的百分比(%us)、系统进程占用CPU的百分比(%sy)、用户进程空间内改变过优先级的进程占用CPU的百分比(%ni)、空闲CPU占用的百分比(%id)、等待输入输出的进程占用CPU的百分比(%wa)、硬件中断的百分比(%hi)、软件中断的百分比(%si),盗取时间(%st,既超级监视器服务其他CPU时,虚拟cpu逼迫等待的时间)。
  • 第四行:系统的物理内存大小(Mem)、已经使用的物理内存大小(used)、目前空闲内存大小(free)、作为内核缓冲区的内存大小(buffers)。
  • 第五行:交换分区的内存大小(Swap)、已经使用的交换分区大小(used)、空闲的交换分区大小(free)、高速缓存的大小(cached)

(2)进程信息区

  • PID,进程的id。
  • USER,进程所有者的用户名。
  • PR,进程优先级。
  • NI,nice值,负值表示高优先级,正值表示低优先级。
  • VIRT,进程使用的虚拟内存总量,单位为KB。VIRT=SWAP+RES。
  • RES,进程使用的、未被换出的物理内存大小,单位为KB。
  • SHR,共享内存大小,单位为KB。
  • S,进程状态,D表示不可中断的休眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程。
  • %CPU,上次更新到现在的CPU时间占用百分比。
  • %MEM,进程占用的物理内存百分比。
  • TIME+,进程使用的CPU时间总计,单位为1/100秒。
  • COMMAND,正在运行进程的命令名或命令路径。

三、总结

以上学习了Linux性能的三个分析方向(系统硬件资源、操作系统相关资源、应用程序软件资源),系统性能的基础指标、常见查看系统状态的工具和命令使用。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值