您所在的位置:角膜穿孔 >> 患病危害>> >> LinuxPerformanceAn

LinuxPerformanceAn

文章来源:角膜穿孔   发布时间:2016-12-12 19:00:16   点击数:
  

翻译自《NtflixTchBlog》,原作者BrndanGrgg

登陆一台Linux服务器排查性能问题:开始一分钟你该检查哪些呢?在Ntflix我们有一个庞大的ECLinux集群,也有许多性能分析工具用于监视和检查它们的性能。它们包括用于云监测的Atlas(工具代号),用于实例分析的Vctor(工具代号)。

尽管这些工具能帮助我们解决大部分问题,我们有时也需要登陆一台实例、运行一些标准的Linux性能分析工具。

在这篇文章,Ntflix性能工程团队将向您展示:在开始的60秒钟,利用标准的Linux命令行工具,执行一次充分的性能检查。

黄金60秒:概述

运行以下10个命令,你可以在60秒内,获得系统资源利用率和进程运行情况的整体概念。查看是否存在异常、评估饱和度,它们都非常易于理解,可用性强。饱和度表示资源还有多少负荷可以让它处理,并且能够展示请求队列的长度或等待的时间。

uptimdmsg

tailvmstat1mpstat-PALL1pidstat1iostat-xz1fr-msar-nDEV1sar-nTCP,ETCP1top

译者配图:prfchckpath

这些命令需要安装sysstat包。这些命令输出的指标,将帮助你掌握一些有效的方法:一整套寻找性能瓶颈的方法论。这些命令需要检查所有资源的利用率、饱和度和错误信息(CPU、内存、磁盘等)。同时,当你检查或排除一些资源的时候,需要注意在检查过程中,根据指标数据指引,逐步缩小目标范围。

接下来的章节,将结合生产环境的案例演示这些命令。如果希望了解这些工具的详细信息,可以查阅它们的操作文档。

1.uptim$uptim3:51:6up1:31,1usr,loadavrag:30.0,6.3,19.0

这是一个快速查看平均负载的方法,表示等待运行的任务(进程)数量。在Linux系统中,这些数字包含等待CPU运行的进程数,也包括不间断I/O阻塞的进程数(通常是磁盘I/O)。

它展示了一个资源负载(或需求)的整体概念,但是无法理解其中的内涵,在没有其它工具的情况下。仅仅是一种快速查看手段而已。

这三个数字呈现出平均负载在几何级减弱,依次表示持续1分钟,5分钟和15分钟内。这三个数字能告诉我们负载在时间线上是如何变化的。

举例说明,如果你在一个问题服务器上执行检查,1分钟的值远远低于15分钟的值,可以判断出你也许登录得太晚了,已经错过了问题。

在上面的例子中,平均负载的数值显示最近正在上升,1分钟值高达30,对比15分钟值则是19。这些指标值像现在这么大意味着很多情况:也许是CPU繁忙;vmstat或者mpstat将可以确认,本系列的第三和第四条命令。

.dmsg

tail$dmsg

tail[.]prlinvokdoom-killr:gfp_mask=0x80da,ordr=0,oom_scor_adj=0[...][.]Outofmmory:Killprocss(prl)scor6orsacrificchild[.]Killdprocss(prl)total-vm:kB,anon-rss:kB,fil-rss:0kB[.]TCP:PossiblSYNfloodingonport.Droppingrqust.ChckSNMPcountrs.

这个结果输出了最近10条系统信息。可以查看到引起性能问题的错误。上面的例子包含了oom-killr,以及TCP丢包。

PS:这个真的很容易忽略啊,真真的踩过坑!!另外,除了rror级的日志,info级的也要留个心眼,可能包含一些隐藏信息。

[译者注:oom-killr]一层保护机制,用于避免Linux在内存不足的时候不至于出太严重的问题,把无关紧要的进程杀掉,有些壮士断腕的意思

3.vmstat1$vmstat1procs---------mmory-------------swap-------io-----systm--------cpu-----rbswpdfrbuffcachsisobiboincsussyidwast0

vmstat是一个获得虚拟内存状态概况的通用工具(最早创建于10年前的BSD)。它每一行记录了关键的服务器统计信息。vmstat运行的时候有一个参数1,用于输出一秒钟的概要数据。第一行输出显示启动之后的平均值,用以替代之前的一秒钟数据。

现在,跳过第一行,让我们来学习并且记住每一列代表的意义。

r:正在CPU上运行或等待运行的进程数。相对于平均负载来说,这提供了一个更好的、用于查明CPU饱和度的指标,它不包括I/O负载。注:“r”值大于CPU数即是饱和。

fr:空闲内存(kb)如果这个数值很大,表明你还有足够的内存空闲。包括命令7“frm”,很好地展现了空闲内存的状态。

si,so:swap入/出。如果这个值非0,证明内存溢出了。

us,sy,id,wa,st:它们是CPU分类时间,针对所有CPU的平均访问。分别是用户时间,系统时间(内核),空闲,I/O等待时间,以及被偷走的时间(其它访客,或者是Xn)。CPU分类时间将可以帮助确认,CPU是否繁忙,通过累计用户系统时间。

等待I/O的情形肯定指向的是磁盘瓶颈;这个时候CPU通常是空闲的,因为任务被阻塞以等待分配磁盘I/O。你可以将等待I/O当作另一种CPU空闲,一种它们为什么空闲的解释线索。

系统时间对I/O处理非常必要。一个很高的平均系统时间,超过0%,值得深入分析:也许是内核处理I/O非常低效。

在上面的例子中,CPU时间几乎完全是用户级的,与应用程序级的利用率正好相反。所有CPU的平均利用率也超过90%。这不一定是一个问题;还需检查“r”列的饱和度。

.mpstatPALL1$mpstat-PALL1Linux3.13.0-9-gnric(titanclustrs-xxxxx)07/1/_x86_6_(3CPU)07:38:9PMCPU%usr%nic%sys%iowait%irq%soft%stal%gust%gnic%idl07:38:50PMall98.70.........:38:50PM.00.00........:38:50PM.........00.7:38:50PM98..........7:38:50PM..........03[...]

这个命令可以按时间线打印每个CPU的消耗,常常用于检查不均衡的问题。如果只有一个繁忙的CPU,可以判断是属于单进程的应用程序。

5.pidstat1$pidstat1Linux3.13.0-9-gnric(titanclustrs-xxxxx)07/1/_x86_6_(3CPU)07:1:0PMUIDPID%usr%systm%gust%CPUCPUCommand07:1:03PM..90..91rcuos/:1:03PM...1.msos-slav07:1:03PM.90.90..java07:1:03PM.31..098.java07:1:03PM...079.58java07:1:03PM.9.70..pidstat07:1:03PMUIDPID%usr%systm%gust%CPUCPUCommand07:1:0PM.00...0msos-slav07:1:0PM...091.java07:1:0PM.0...java07:1:0PM....snmp-pass07:1:0PM661.00...pidstat^C

pidstat有一点像顶级视图-针对每一个进程,但是输出的时候滚屏,而不是清屏。它非常有用,特别是跨时间段查看的模式,也能将你所看到的信息记录下来,以利于进一步的研究。上面的例子识别出两个java进程引起的CPU耗尽。“%CPU”是对所有CPU的消耗;%显示java进程占用了几乎16个CPU。

6.iostatxz1$iostat-xz1Linux3.13.0-9-gnric(titanclustrs-xxxxx)07/1/_x86_6_(3CPU)avg-cpu:%usr%nic%systm%iowait%stal%idl73.....06.1Dvic:rrqm/swrqm/sr/sw/srkB/swkB/savgrq-szavgqu-szawaitr_awaitw_awaitsvctm%utilxvda0..30.10.18.5.......0.09xvdb0...08...5...31..80.50.5xvdc0...08......51.80..70.6dm-00...69......30....0dm-10....90.....80....00dm-0......36..00..35.61..03[...]

这是一个理解块设备(磁盘)极好的工具,不论是负载评估还是作为性能测试成绩。

r/s,w/s,rkB/s,wkB/s:这些是该设备每秒读%、写%、读Kb、写Kb。可用于描述工作负荷。一个性能问题可能只是简单地由于一个过量的负载引起。

await:I/O平均时间(毫秒)这是应用程序需要的时间,它包括排队以及运行的时间。远远大于预期的平均时间可以作为设备饱和,或者设备问题的指标。

avgqu-sz:向设备发出的平均请求数。值大于1可视为饱和(尽管设备能对请求持续运行,特别是前端的虚拟设备-后端有多个磁盘)。

%util:设备利用率这是一个实时的繁忙的百分比,显示设备每秒钟正在进行的工作。值大于60%属于典型的性能不足(可以从await处查看),尽管它取决于设备。值接近%通常指示饱和。

??如果存储设备是一个前端逻辑磁盘、后挂一堆磁盘,那么%的利用率也许意味着,一些已经处理的I/O此时占用%,然而,后端的磁盘也许远远没有达到饱和,其实可以承担更多的工作。

切记:磁盘I/O性能低并不一定是应用程序问题。许多技术一贯使用异步I/O,所以应用程序并不会阻塞,以及遭受直接的延迟(例如提前加载,缓冲写入)。

7.frm$fr-mtotalusdfrshardbuffrscachdMm:-/+buffrs/cach:Swap:

buffrs:buffrcach,用于块设备I/O。cachd:pagcach,用于文件系统。??我们只是想检查这些指标值不为0,那样意味着磁盘I/O高、性能差(确认需要用iostat)。上面的例子看起来不错,每一个都有很多Mbyts。

“-/+buffrs/cach”:提供了关于内存利用率更加准确的数值。

Linux可以将空闲内存用于缓存,并且在应用程序需要的时候收回。所以应用到缓存的内存必须以另一种方式包括在内存空闲的数据里面。甚至有一个网站linuxatmyram,专门探讨这个困惑。

它还有更令人困惑的地方,如果在Linux上使用ZFS,正如我们运行一些服务,ZFS拥有自己的文件系统混存,也不能在fr-m的输出里正确反映。

这种情况会显示系统空闲内存不足,但是内存实际上可用,通过回收ZFS的缓存。

8.sarnDEV1$sar-nDEV1Linux3.13.0-9-gnric(titanclustrs-xxxxx)07/1/_x86_6_(3CPU)1:16:8AMIFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s%ifutil1:16:9AMth.03.686.78.....:16:9AMlo1........:16:9AMdockr00........:16:9AMIFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s%ifutil1:16:50AMth063.101.999......:16:50AMlo0...53.50....:16:50AMdockr00........00^C

使用这个工具用来检查网络接口吞吐量:rxkB/s和txkB/s,作为负载的一种度量方式,也可以用来检查是否已经达到某种瓶颈。

在上面的例子中,网卡th0收包大道Mbyts/s,即Mbits/sc(就是说,在1Gbit/sc的限制之内)。

此版本也有一个体现设备利用率的“%ifutil”(两个方向最大值),我们也可以使用Brndan的nicstat工具来度量。和nicstat类似,这个值很难准确获取,看起来在这个例子中并没有起作用(0.00)。

9.sarnTCP,ETCP1$sar-nTCP,ETCP1Linux3.13.0-9-gnric(titanclustrs-xxxxx)07/1/_x86_6_(3CPU)1:17:19AMactiv/spassiv/sisg/sosg/s1:17:0AM1...886.:17:19AMatmptf/sstrs/srtrans/sisgrr/sorsts/s1:17:0AM0.....:17:0AMactiv/spassiv/sisg/sosg/s1:17:1AM1..359..:17:0AMatmptf/sstrs/srtrans/sisgrr/sorsts/s1:17:1AM0.....00^C

这是一个关键TCP指标的概览视图。包括:

activ/s:本地初始化的TCP连接数/每秒(例如,通过connct())passiv/s:远程初始化的TCP连接数/每秒(例如,通过accpt())rtrans/s:TCP重发数/每秒

这些活跃和被动的计数器常常作为一种粗略的服务负载度量方式:新收到的连接数(被动的),以及下行流量的连接数(活跃的)。

这也许能帮助我们理解,活跃的都是外向的,被动的都是内向的,但是严格来说这种说法是不准确的(例如,考虑到“本地-本地”的连接)。

重发数是网络或服务器问题的一个标志;它也许是因为不可靠的网络(如,公共互联网),也许是由于一台服务器已经超负荷、发生丢包。

上面的例子显示每秒钟仅有一个新的TCP连接。

10.top$toptop-00:15:0up1:56,1usr,loadavrag:31.09,9.87,9.9Tasks:total,1running,slping,0stoppd,zombi%Cpu(s):96.8us,0.sy,0.0ni,.7id,0.1wa,0.0hi,0.0si,0.0stKiBMm:+total,88usd,073+fr,buffrsKiBSwap:0total,0usd,0fr.8cachdMmPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND08root.7t0.01tS35.:58java13root53S3.50.:35.37msos-slavtitancl+33R1.00.00:00.07toproot8.7g57996S0.70.:0.7java99root.g.68gS0.31.:1.java1root96S0.00.00:03.8initroot00S0.00.00:00.0kthradd3root00S0.00.00:05.35ksoftirqd/05root0-0S0.00.00:00.00kworkr/0:0H6root00S0.00.00:06.9kworkr/u56:08root00S0.00.0:38.05rcu_schd

top命令包含了许多我们之前已经检查的指标。

它可以非常方便地运行,看看是否任何东西看起来与从前面的命令的结果完全不同,可以表明负载指标是不断变化的。

顶部下面的输出,很难按照时间推移的模式查看,可能使用如vmstat和pidstat等工具会更清晰,它们提供滚动输出。

如果你保持输出的动作不够快(CtrlS要暂停,CtrlQ继续),屏幕将清除,间歇性问题的证据也会丢失。

追踪分析

你还可以尝试更多、更深的命令和方法。

详见Brndan的Linux性能工具辅导课,包括0多种命令,覆盖可观测性、标杆管理、调优、静态性能优化、监视和追踪。

基于可扩展的wb,解决系统的扩展和性能问题,是我们矢志不渝的追求。

如果你希望能够解决这类挑战,加入我们!

BrndanGrgg









































白斑医院排名
北京治疗白癜风医院哪个最好
转载请注明:http://www.iwkqm.com/hbwh/4700.html