Velocity 2015上的Netflix:Linux性能工具

现在有很多用于Linux的性能工具,但它们是如何融合在一起的,我们什么时候使用它们?在Velocity 2015上,我给出了一个关于Linux性能工具的90分钟教程。之前我已经谈过这个话题,但是考虑到90分钟的时间段,我可以包含更多的方法,工具和现场演示,使其成为我所做主题的最完整的演示。视频和幻灯片如下。

第1部分(youtube)(54分钟)。

第2部分(youtube)(45分钟)。

幻灯片(slideshare)。

在本教程中,我总结了传统和高级性能工具,包括:top,ps,vmstat,iostat,mpstat,free,strace,tcpdump,netstat,nicstat,pidstat,swapon,lsof,sar,ss,iptraf,iotop,slaptop,pcstat ,tiptop,rdmsr,lmbench,fio,pchar,perf_events,ftrace,SystemTap,ktap,sysdig和eBPF;并参考更多。我还包括可观察性,sar,基准测试和调整(包括上面的图像)的更新工具图。

本教程可以与广泛的读者共享 - 任何从事Linux系统工作的人 - 都可以作为免费的Linux性能工具速成课程。我希望人们喜欢它并觉得它有用。这是播放列表。

在Netflix,我们有用于全云监控的Atlas,以及用于按需实例分析的Vector。很多时候我们不需要直接登录实例,但是当我们这样做时,本教程将介绍我们使用的工具。

您登录到有性能问题的Linux服务器:您在第一分钟检查什么?

在Netflix,我们拥有庞大的EC2 Linux云,以及众多性能分析工具来监控和调查其性能。 其中包括用于全云监控的Atlas和用于按需实例分析的Vector。 尽管这些工具可以帮助我们解决大多数问题,但我们有时需要登录到实例并运行一些标准的Linux性能工具。

前60秒:总结

在本文中,Netflix性能工程团队将使用标准的Linux工具向您展示在命令行中进行优化性能调查的前60秒。 在60秒内,您可以通过运行以下十个命令,获得系统资源使用情况和正在运行的进程的高级概念。 查找错误和饱和度指标(saturation metrics),因为它们都易于解释,然后是资源利用率。 饱和度(Saturation)是资源负载超过其处理能力的地方,并且可以作为请求队列的长度或等待的时间暴露出来。

uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top

其中一些命令需要安装sysstat软件包。 这些命令公开的指标将帮助您完成一些USE方法:用于查找性能瓶颈的方法。 这涉及检查所有资源(CPU,内存,磁盘,e.t.c)的利用率(utilization),饱和度(saturation)和错误度量(error metrics)标准。 同时要注意检查并排除资源的时候,因为通过消除(elimination)这个过程缩小了研究对象的范围,并且指导任何后续调查(follow on investigation)。

以下部分总结了这些命令,并以生产系统为例。 有关这些工具的更多信息,请参阅他们的手册页。

1. uptime

$ uptime 
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02

这是查看负载平均值的快速方法,它表示想要运行的任务(进程)的数量。在Linux系统上,这些数字包括想要在CPU上运行的进程以及在不可中断的I / O(通常是磁盘I / O)中被阻塞的进程。这提供了资源负载(或需求)的高级概念,但是没有其他工具就无法正确理解。值得快速浏览一下。

这三个数字是指数衰减移动总和平均值(exponentially damped moving sum averages)在1分钟,5分钟和15分钟的常数。这三个数字让我们了解负载如何随时间而变化。例如,如果您被要求检查问题服务器,并且1分钟的值比15分钟的值低得多,那么您可能已经登录太晚而错过了该问题。

在上面的例子中,负载平均值显示最近的增加,1分钟的值为30,而15分钟的值为19。数字这么大意味着很多东西:可能是CPU需求; vmstat或mpstat将会确认,这是本序列命令3和命令4。

2. dmesg | tail

$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.

这可以查看最后10个系统消息,如果有的话。 寻找可能导致性能问题的错误。 上面的例子包含了杀手锏,TCP丢弃了一个请求。

不要错过这一步! dmesg总是值得检查。

3. vmstat 1

$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
34  0    0 200889792  73708 591828    0    0     0     5    6   10 96  1  3  0  0
32  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  0
32  0    0 200890112  73708 591860    0    0     0     0 9501 2154 99  1  0  0  0
32  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  0
32  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0
^C

虚拟内存统计数据的简称,vmstat(8)是一种常用的工具(几十年前首次为BSD创建)。它在每行上打印关键服务器统计信息的摘要。

vmstat运行的参数为1,打印一秒摘要。第一行输出(在此版本的vmstat中)有一些列显示引导后的平均值,而不是前一秒。现在,跳过第一行,除非你想学习和记住哪一列是哪一列。

要检查的列:

r:在CPU上运行并等待轮换的进程数量。这比确定CPU饱和度的负载平均值提供了更好的信号,因为它不包含I / O。可以这么理解:大于CPU计数的“r”值就意味着饱和(saturation)。

free:以千字节为单位的可用内存。如果要计数的位数太多,则有足够的空闲内存。包含在命令7中的“free -m”命令更好地解释了可用内存的状态。

siso:交换和换出。如果这些不是零,则表示内存不足。

ussyidwast:这些是所有CPU平均CPU时间的细分。它们是用户时间(user time),系统时间( system time)(内核),空闲(idle),等待I / O(wait I/O)和被盗时间(stolen time)(由其他客人,或者对于Xen而言,客户自己的隔离驱动程序域(isolated driver domain))。

CPU时间细分将通过将用户+系统时间加和来确认CPU是否繁忙。等待I / O的持续程度指向磁盘瓶颈;这是CPU空闲的地方,因为任务被阻塞等待挂起的磁盘I / O。您可以将等待I / O视为另一种形式的CPU闲置,这样可以为他们为什么闲置提供线索。

系统时间对于I / O处理是必需的。高系统时间的平均值超过20%可能会让人感兴趣进一步探索:内核可能无效处理I / O。

在上面的例子中,CPU时间几乎全部在用户级别,而是指向应用程序级别的使用。 CPU的平均使用率也超过90%。这不一定是个问题;使用“r”列检查饱和度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容