• Linux 性能分析以及调优介绍  写在前面:计算机要解决的基本问题之一是如何在不增添更多硬件能力的情况下使其能够完成更多工作;而我们应用设计的一项重要伸缩性原则是:随着应用的推广和访问流量的增加,通过相应...

    原文:http://blog.csdn.net/hn2002/article/details/7426907


    Linux 性能分析以及调优介绍

        写在前面:计算机要解决的基本问题之一是如何在不增添更多硬件能力的情况下使其能够完成更多工作;而我们应用设计的一项重要伸缩性原则是:随着应用的推广和访问流量的增加,通过相应数量的服务器资源来应对;资源的消耗应该随负载线性(或更佳)上升,负载可由用户流量、数据量等测量;可以参考ebay的架构最佳实践:
        http://www.infoq.com/cn/articles/ebay-scalability-best-practices
        
    本节介绍linux性能分析工具;下一节介绍各个层面的可调参数;最后一节介绍一个web性能问题分析案例;

      第一节  性能监控 
     1)整体系统cpu利用率 
        系统性能的指标之一就是系统对用户的响应速度。在对系统的方法化分析中,首要且最近本的工具之一常常是对系统的cpu利用率进行简单测量。
        $ uptime 
        10:17:40 up 6 days, 59 min,  6 users,  load average: 0.00, 0.00, 0.00
        主要看load average也就是我们通常说的服务器load(平均负荷值),代表1分钟,5分钟,15分钟
        系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:
      - 它没有在等待I/O操作的结果
      - 它没有主动进入等待状态(也就是没有调用'wait')
      - 没有被停止(例如:等待终止)
        (但也有例外,看各个系统的计算方式了,我的debian发布版,从man uptime里System load averages is the average number of processes that are either in a runnable or uninterruptable state,可见它包括等待i/o的线程)
       vmstat命令实时监控系统各个方面的数据;例如每隔3秒显示一下系统性能数据:
       $vmstat 3 
        procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
         r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
         1  0 192824  93020 317960 770156    0    1    73    79  114  108 20 23 56  2
         0  0 192824  93012 317960 770164    0    0     0     0  958 2223  7 10 84  0
         procs部分提供了生成报告时正在运行的进程数据(r)以及被阻塞的进程数目(b);
         memory部分提供了换出内存(swpd),空闲内存(free),i/o数据结构的缓冲区缓存(buff),以及从磁盘读取文件的内存缓存(cache)的容量,单位为KB;
         swap部分提供了从磁盘上换入的内存容量(si)以及换出到磁盘上的内存量(so),单位kB/s;
         io部分提供了从设备读入的块数(bi)以及写出到设备上的块数(bo).单位为KB/s;
         system部分提供了每秒的中断数目(in)和上下文切换数目(cs);
         cpu部分提供了用户(us),系统(sy),真正空闲(id),已经等待I/O完成(wa)在cpu总时间中所占百分比。cpu利用率也许是最常用的量度。若wa过大,则应该检查I/O子系统,
            例如,可以判定需要更多的I/O控制器和磁盘以减少I/O等待的时间;
        
        top和gtop命令:提供所有正在运行的进程和系统载荷提供不断更新的概览信息,包括CPU负荷,内存使用以及每隔进程的内存使用情况;
        sar是sysstat工具包的组成部分;它收集并报告错哦阿左系统中广泛的系统活动,包括CPU利用率,上下文切换和中断速率,页换入,和页换出速率,共享内存使用情况,
        设备性能情况,缓冲区使用情况以及网络使用情况;

     2)内存利用率

       工作负荷有可能会耗尽所有可用的内存。Linux提供了对物理内存进行合理,高效的访问并可以访问潜在的海量虚存的技术。虚存通常稍多于操作系统实际拥有的内存容量,以便将较少使用的数据卸载到磁盘存储器上,同时又呈现出系统拥有大量物理内存的假象。糟糕的是,卸载内存的开销可能会比应用延迟高出数十甚至上百倍。如果被换出到磁盘上的内存空间是错误的内存页,或者如果应用程序的当前内存印迹大于物理内存容量的话,那么这些过高的延迟会极大的影响应用的响应时间;

     通过/proc/meminfo和/proc/slabinfo可以监视系统内存资源的整体利用情况;

     可以通过ps aux 查看每个进程消耗系统内存的总体百分比,以及该进程的虚存印迹(VSZ)和当前使用的物理内存量(RSS)。也可以使用top交互式的查看进行列表。然后通过/proc/pid(进行id)/maps查看进行地址空间的所有映射及其大小,等内存分布状况信息。

    通过vmstat可以监视内存可用性和交换活动。vmstat可以协助发现异常的系统活动,例如会导致操作系统性能下降的过多的页面错误或上下文切换操作。结合cpu利用率的us,sy,id,wa监视,如果wa的值过大,则要查看I/O系统,结论有可能是需要更多I/O控制器和磁盘以便减少I/O等待时间;

     $vmstat
     procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
       4  0 306792 159560 228680 298932    0    1    75    84   65   71 19 21 58  2

     


     3)磁盘I/O的利用率和延迟 
        尽管整体的处理器速度,内存大小以及I/O执行速度在不断提高,但I/O操作的吞吐率和延迟性能仍然要比等价的内存访问操作低多个数量级;另外,由于许多工作负荷都
        拥有重要的I/O组件,I/O处理容易成为整体吞吐律和应用整体响应时间的重要瓶颈;以下介绍iostat命令:
        $iostat
        Linux 2.6.32-5-686 (zhaopeng)     07/07/2010     _i686_    (2 CPU)

        avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                  18.93    0.50   22.80    1.57    0.00   56.21

        Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
        sda               5.63        90.79        99.44   47760868   52308144
        
        iostat报告的CPU利用心里类似于top工具提供的内容;之后给出各个磁盘的利用情况的报告;
        tps列表示发至逻辑磁盘的I/O请求数;Blk_read/s 和Blk_wrtn/s 给出分别对应于读写该逻辑驱动器的数据量,以每秒的块数为单位;
        iostat 默认显示以块为单位,也可以加参数iostat -k 以KB为单位显示;

     4)网络I/O利用率 
        netstat 是监视linux服务器上网络链接的最常用工具之一;该工具可以显示每种网络协议例如TCP和UDP的活跃socket列表,还提供了关于网络路由信息以及网络接口的累积统计数据,包括输入输出报文数量以及报文冲突次数;
        常用的工具:netstat; iftop;ifstat;apache自带的ab测试工具;

     

    参考:《linux服务器性能调整》

              《深入理解linux内核》

     

     

    上次简单介绍了下,linux的cpu,memory,disk i/o; net i/o 性能监控的一些工具;这节就介绍下,这些层面上出现瓶颈时,怎样调节内核,有那些内核参数可以调节来获得性能的提升; 下节介绍下:怎么识别性能瓶颈,当然只是空想了,怎样识别需要具体问题具体对待了;
          希望对这些参数的介绍使大家对于linux的内核有一定的认识;

     

    第一节:cpu 性能瓶颈 
          计算机中,cpu是最重要的一个子系统,负责所有计算任务;基于摩尔定律的发展,cpu是发展最快的一个硬件,所以瓶颈很少出现在cpu上;我们线上环境的cpu都是多核的,并且基于SMP(symmetric multiprocessing)结构的。通过观察线上机器cpu使用率会发现,使用率很低很低,不到5%; 说明我们的资源浪费情况多么严重啊;(但为什么不能一台机器多部署几个应用呢,后边我会解释); 我们线上的cpu一个核支持超级线程,也就是一个核上可以并行运行几个线程)
    1. 通过调整进程优先级调整: nice 命令来调整进程优先级别;可调范围(-20到 19) 如: renice 5 pid
    2.通过调整cpu的亲和度来集中处理某一个中断类型:将系统发出的中断都绑定在一个cpu上,这样其他cpu继续执行自己正在执行的线程,不被中断打扰,从而较少了线程上下文切换时间,增强性能;
    注: cpu亲和度的概念: 在多核cpu中,linux操作系统抢占式调度系统,按照cpu时间片/中断/等 不断调度进程给cpu去执行的;如果在一个时间片调度线程1在cpu1上运行,另外一个时间片调度线程1在cpu2上去运行,这样会造成线程执行速度慢,性能降低。为什么呢? 我们知道SMP上多核都是共享L1 ,L2 CPU Cache的。并且各个核的内存空间都是不可共享的,一个线程如果多次时间片上在不同的cpu上运行,会造成cache的不断失效和写入;性能会降低; 而linux的进程调度有个亲和度算法可以将尽量将进程每次都调度到同一个cpu上处理;linux调度时当然也有Loadbalance算法保证进程调度的均匀负载的;
    例如: echo 03 > /proc/irq/19/smp-affinity (将中断类型为19的中断绑定到第三个cpu上处理)


                                                    第二节:内存性能瓶颈 
          首先,linux的内存管理是聪明和智能的;linux通过(virtual memory manage)来管理内存的; 对于大多数应用,linux是不直接写到硬盘上去的,而是先写到 virtual memory manage 管理的文件系统缓存(也在内存中的)里 .方便应用的后续的读请求;因为和磁盘的I/O操作是昂贵的;linux会根据一些算法策略适当的时候同步到硬盘的;这就是为什么我们运行linux一段时间后,发现可用内存那么少的原因,多数被cache+buffer占用咧;
    所以我们提高性能的办法就是减少写到磁盘的次数,提高每次写磁盘时的效率质量;
    1. 通过调节缓存的脏数据同步到硬盘的策略:(脏数据表示没有被当前的线程使用的数据)
    例如: echo 10 > /proc/sys/vm/dirty_background_rato (当脏数据占据物理内存10%时,触发pdflush同步到硬盘):小心调节,会大幅度的影响性能;
    echo 2000 > /proc/sys/vm/dirty_expire_centisecs (当脏数据在物理内存的逗留时间超过2000ms时被同步到硬盘);
    2.通过调节swap参数,来优化linux虚拟内存管理:基于程序的局部性原理,linux通过虚拟内存机制来实现并发运行进程,linux发现物理内存不够用时,会根据LRU算法将一部分内存swap out到硬盘;当运行被换出的那个线程时,在swap in 到内存里;
    例如: echo 10 > /proc/sys/vm/swappiness(值为0表示尽量都用物理内存,值为100表示积极的使用swap分区;)这个参数很重要;小心调节; 一般为60; 

                                                       第三节: 磁盘I/O可调性能参数 
               linux的子系统VFS(virtural file system)虚拟文件系统;从高层将各种文件系统,以及底层磁盘特性隐藏,对程序员提供:read,write,delete等文件操作;这就是之所以我们可以在linux上mount多种不同格式的文件系统的,而window确不行; 当然基于:虚拟文件系统,文件系统,文件系统驱动程序,硬件特性方面,都能找到性能瓶颈;
    1.选择适合应用的文件系统;
    2. 调整进程I/O请求的优先级,分三种级别:1代表 real time ; 2代表best-effort; 3代表idle ;
    如:ionice -c1 -p1113(给进程1113的I/O优先级设置为最高优先级)
    3.根据应用类型,适当调整page size 和block size;
    4.升级驱动程序; 

                                                                   第四节 :网络可调性能参数 
    对于我们web应用来说,网络性能调整如此重要,linux的网络支持是无与伦比的;是作为网络服务器的首先;对于web服务来说:除了应用的响应速度外,linux网络管理子系统,网卡,带宽都可能成为性能瓶颈;
    1.查看网卡设置是否全双工传输的: echtool eth0
    2. 设置MTU(最大传输单元),在带宽G以上的时候,要考虑将MTU增大,提高传输性能;如: ifconfig eth0 mtu 9000 up
    3. 增加网络数据缓存;传输数据时linux是将包先放入缓存,填满缓存后即发送出去;读操作类似;
    sysctl -w net.ipv4.tcp_rmem="4096 87380 8388608" :设置tcp读缓存:最小缓存,初始化时,最大缓存
    sysctl -w net.ipv4.tcp_wmem="4096 87380 8388608" :设置tcp写缓存:最小缓存,初始化时,最大缓存
    4.禁用window_scaling,并且直接设置window_size;(就像我们经常设置jvm的参数:xms = xmx一样
    sysctl -w net.ipv4.tcp_window_scaling=0
    5.设置TCP连接可重用性: 对于TIME_OUT状态的TCP连接可用于下一个TCP重用,这样减少了三次握手和创建时间,非常提高性能,尤其对于web server;
    如: 开启可重用tcp功能: sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w net.ipv4.tcp_tw_recyle=1 
    6.禁用掉没必要的tcp/ip协议功能:比如icmp;broadcast包的接收;
    7. linux对于keeplive的tcp连接有一个默认的过期时间;可以减小这个时间,让没用的连接释放掉,毕竟tcp连接数是有限的嘛;
    如: sysctl -w net.ipv4.tcp_keepalive_time=1800 (设置过期时间,1800s)
    8.设置最大tcp正在连接状态(还没ESTABLISHED)队列长度;避免由于太多的tcp连接过来,导致服务器挂掉;比如DoS攻击
    如:sysctl -w net.ipv4.tcp_max_syn_backlog=4096
    9. 绑定tcp类型的中断到一个cpu上;(让cpu去亲和这个类型中断,避免频繁的中断,影响线程调度性能) 


              总结: 我们在性能优化一个应用时,首要的是设定优化要达到的目标,然后寻找瓶颈,调整参数,达到优化目的;但是寻找瓶颈时可能是最累的,要从大范围,通过很多用例,很多测试报告,不断的缩小范围,最终确定瓶颈点;以上这些参数只是个认识,系统性能优化中可能用到,但并不是放之四海而皆准的; 有的参数要边测试,边调整的; 

    展开全文
  • Linux性能调优指南 2018-11-27 10:39:25
    对如何从Linux操作系统方面进行调优,一直都没有一个清晰的认识。不过,最近偶然发现了一本IBM出的Linux调优指南,于是就拜读了一下。 读完一些之后,就发现这本书确实就是我所需要的一本书。 虽然之前读过一些...
  • linux系统参数调优 2019-08-09 10:23:09
    说明:以下内容是基于Centos7.x kernel版本为3.10进行测试的结果。 一 CPU 参数调优 1.1性能模式调整 1.2开启服务器超线程功能 1.3Numa参数调整 二 内存参数调优 2.1THP(Transparent HugePages) 2.2 ksm...
  • 本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.2节的翻译原文地址:http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf原文作者:Eduardo Ciliendo, Takechika ...1.2 Linux内存架构为了执行
  • Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见...因此,谈到性能问题,主要实现的是linux操作系统和应用程序的最佳结合。 一、性能问题综述 系统的...
  • (3)Linux性能调优Linux文件系统 这一节我们将谈下Linux磁盘I/O子系统 二、概览 在进程解码和执行指令之前,要把数据从盘片的扇区中恢复到进程的缓存和寄存器中。程序执行结果又被写回到磁盘中。可以说,现在的...
  • 一、Linux故障排查思路 1、重视报错提示信息 每个错误的出现,都是给出错误提示信息,一般情况下这个提示基本定位了问题的所在。因此一定要重视这个报错信息,如果对这些错误信息视而不见,问题永远得不到解决。 ...
  • 浅谈系统调优 2018-08-29 09:44:38
    /proc “文件系统”是一个目录,其中包含的文件层次结构代表了 Linux 内核的当前状态。它允许用户和管理员 查看系统的内核视图。 /proc 目录中还包含关于系统硬件及任何当前正在运行的程序信息。大部分在 /proc 中...
  • 原贴:http://blog.chinaunix.net/u/26011/showart_365527.htmlLinux 性能调优的几种方法 按照传统,Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得系统能够获得更好的性 能。下边将分四...
  • linux性能分析及调优 2015-01-19 23:21:02
    linux性能分析及调优__cpu 性能瓶颈调优可调性能参数 、内存性能瓶颈可调性能参数(操作系统设置swap的目的、在写程序时、如何使自己的内存不被换出swap,常驻物理内存)、磁盘I/O可调性能参数(如何判断磁盘IO瓶颈,...
  • Linux 下的MySQL调优 2019-06-16 17:46:33
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • Linux操作系统性能调优的方法 2013-03-18 15:35 HonestQiaoChinaUnix字号:T|T Linux是一套免费使用和自由传播的类Unix操作系统Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得...
  • LINUX磁盘IO调优指标 2020-01-02 14:28:05
    磁盘 I/O 性能监控的主要指标介绍如下:指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和。...
  • 本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.2节的翻译原文地址:http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf原文作者:Eduardo Ciliendo, Takechika...1.2 Linux内存架构为了执行...
  • 感谢原作者,让我知道了性能调优也是如此有趣,Linux下还有如此强大之Linux系统调优工具。 Perf——Linux下的系统性能调优工具 1. 背景知识 1.1 与性能调优相关的硬件特性 硬件特性之cache 内存读写是很快...
  • 实践证明Linux是高性能、稳定可靠而又相当灵活的操作系统,近年来,世界上许多大软件公司纷纷推出各种Linux服务器系统Linux下的应用软件。目前,Linux已可以与各种传统的商业操作系统分庭抗礼,在服务器市场,占据...
  • linux系统调优--Selinux 2016-05-09 16:26:50
    Selinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。强制访问控制系统的...
  • 存储中的一个重要角色,RAID独立冗余磁盘阵列,从分类上将有两种:基于raid卡的硬raid(硬件实现,速度高,适用于大型应用),基于系统的软raid(一般包含于内核之中,性能不如硬raid,但是可优化,小型服务器) ...
  • Linux 性能调优的几种方法 2010-06-25 21:36:00
    按照传统,Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得系统能够获得更好的性能。下边将分四部分介绍在Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server系统下,如何用...
  • ““这个系统好慢、网站又打不开了,太卡了,又没响应了!”相信大家都遇到过这种抱怨,这是应用系统出现了性能问题,需要性能调优。性能调优,要求对计算机硬件、操作系统和应用有相...
1 2 3 4 5 ... 20
收藏数 21,970
精华内容 8,788