zoukankan      html  css  js  c++  java
  • linux

    影响Linux服务器性能的因素

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

    系统性能评估标准

    影响性能因素 糟糕
    CPU user% + sys%< 70% user% + sys%= 85% user% + sys% >=90%
    内存 Swap In(si)=0
    Swap 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。

    系统性能分析工具

    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次

    • 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 总时间的百分比。

    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

    [root@node1 ~]# 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评估磁盘

    [root@webserver ~]# 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做一个基本的统计,请看下面的一个输出:

    [root@webserver ~]# 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命令

  • 相关阅读:
    Nginx详解(正向代理、反向代理、负载均衡原理)
    java List的初始化
    nginx配置实现负载均衡
    SQL中where与having的区别
    数据库中where与having区别~~~
    group by的使用
    wm_concat函数
    Nginx配置upstream实现负载均衡1
    Nginx配置upstream实现负载均衡
    java
  • 原文地址:https://www.cnblogs.com/cjunn/p/12233655.html
Copyright © 2011-2022 走看看