出于对Linux操作系统的趣味,以及对底层常识的强烈欲望,因而整顿了这篇文章。本文也能够作为测验基础知识的指标,另外文章涵盖了一个零碎的方方面面。如果没有欠缺的计算机系统常识,网络常识和操作系统常识,文档中的工具,是不可能齐全把握的,另外对系统性能剖析和优化是一个长期的系列。

本文档次要是联合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,收集Linux零碎性能优化相干文章整顿后的一篇综合性文章,次要是联合博文对波及到的原理和性能测试的工具开展阐明。

性能剖析工具

首先来看一张图:

上图是Brendan Gregg 的一次性能剖析的分享,这外面的所有工具都能够通过man来取得它的帮忙文档,下问简略介绍介绍一下惯例的用法:

vmstat--虚拟内存统计

vmstat(VirtualMeomoryStatistics,虚拟内存统计) 是Linux中监控内存的常用工具,可对操作系统的虚拟内存、过程、CPU等的整体状况进行监督。

vmstat的惯例用法:vmstat interval times即每隔interval秒采样一次,共采样times次,如果省略times,则始终采集数据,直到用户手动进行为止。简略举个例子:

能够应用ctrl+c进行vmstat采集数据。

第一行显示了零碎自启动以来的平均值,第二行开始显示当初正在产生的状况,接下来的行会显示每5秒距离产生了什么,每一列的含意在头部,如下所示:

  • procs:r这一列显示了多少过程在期待cpu,b列显示多少过程正在不可中断的休眠(期待IO)。
  • memory:swapd列显示了多少块被换出了磁盘(页面替换),剩下的列显示了多少块是闲暇的(未被应用),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。
  • swap:显示替换流动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)。
  • io:显示了多少块从块设施读取(bi)和写出(bo),通常反映了硬盘I/O。
  • system:显示每秒中断(in)和上下文切换(cs)的数量。
  • cpu:显示所有的cpu工夫破费在各类操作的百分比,包含执行用户代码(非内核),执行零碎代码(内核),闲暇以及期待IO。

内存不足的体现:free  memory急剧缩小,回收buffer和cacher也杯水车薪,大量应用替换分区(swpd),页面替换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,期待IO的过程数(b)增多,大量CPU工夫用于期待IO(wa)

iostat--用于报告中央处理器统计信息

iostat用于报告中央处理器(CPU)统计信息和整个零碎、适配器、tty 设施、磁盘和 CD-ROM 的输出/输入统计信息,默认显示了与vmstat雷同的cpu应用信息,应用以下命令显示扩大的设施统计:

第一行显示的是自系统启动以来的平均值,而后显示增量的平均值,每个设施一行。

常见linux的磁盘IO指标的缩写习惯:rq是request,r是read,w是write,qu是queue,sz是size,a是verage,tm是time,svc是service。

  • rrqm/s和wrqm/s:每秒合并的读和写申请,“合并的”意味着操作系统从队列中拿出多个逻辑申请合并为一个申请到理论磁盘。
  • r/s和w/s:每秒发送到设施的读和写申请数。
  • rsec/s和wsec/s:每秒读和写的扇区数。
  • avgrq –sz:申请的扇区数。
  • avgqu –sz:在设施队列中期待的申请数。
  • await:每个IO申请破费的工夫。
  • svctm:理论申请(服务)工夫。
  • %util:至多有一个沉闷申请所占工夫的百分比。

dstat--系统监控工具

dstat显示了cpu应用状况,磁盘io状况,网络发包状况和换页状况,输入是黑白的,可读性较强,绝对于vmstat和iostat的输出更加具体且较为直观。在应用时,间接输出命令即可,当然也能够应用特定参数。

如下:dstat –cdlmnpsy

iotop--LINUX过程实时监控工具

iotop命令是专门显示硬盘IO的命令,界面风格相似top命令,能够显示IO负载具体是由哪个过程产生的。是一个用来监督磁盘I/O应用情况的top类工具,具备与top类似的UI,其中包含PID、用户、I/O、过程等相干信息。

能够以非交互的形式应用:

iotop –bod interval,查看每个过程的I/O,能够应用pidstat,pidstat –d instat

pidstat--监控系统资源状况

pidstat次要用于监控全副或指定过程占用系统资源的状况,如CPU,内存、设施IO、工作切换、线程等。

应用办法:

pidstat –d interval#统计CPU应用信息pidstat –u interval#统计内存信息Pidstat –r interval

top

top命令的汇总区域显示了五个方面的零碎性能信息:

  • 负载:工夫,登陆用户数,零碎均匀负载;
  • 过程:运行,睡眠,进行,僵尸;
  • cpu:用户态,外围态,NICE,闲暇,期待IO,中断等;
  • 内存:总量,已用,闲暇(零碎角度),缓冲,缓存;
  • 替换分区:总量,已用,闲暇

工作区域默认显示:过程ID,无效用户,过程优先级,NICE值,过程应用的虚拟内存,物理内存和共享内存,过程状态,CPU占用率,内存占用率,累计CPU工夫,过程命令行信息。

htop

htop 是Linux零碎中的一个互动的过程查看器,一个文本模式的应用程序(在控制台或者X终端中),须要ncurses。

Htop可让用户交互式操作,反对色彩主题,可横向或纵向滚动浏览过程列表,并反对鼠标操作。

与top相比,htop有以下长处:

  • 能够横向或者纵向滚动浏览过程列表,以便看到所有的过程和残缺的命令行。
  • 在启动上,比top更快。
  • 杀过程时不须要输出过程号。
  • htop反对鼠标操作。

mpstat

mpstat 是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息寄存在/proc/stat文件中。在多CPUs零碎里,其岂但能查看所有CPU的均匀情况信息,而且可能查看特定CPU的信息。常见用法:

mpstat –P ALL interval times

netstat

Netstat用于显示与IP、TCP、UDP和ICMP协定相干的统计数据,个别用于测验本机各端口的网络连接状况。

常见用法:

netstat –npl   #能够查看你要关上的端口是否曾经关上。netstat –rn    #打印路由表信息。netstat –in    #提供零碎上的接口信息,打印每个接口的MTU,输出分组数,输出谬误,输入分组数,输入谬误,抵触以及以后的输入队列的长度。

ps--显示以后过程的状态

ps参数太多,具体应用办法能够参考man ps,

罕用的办法:

ps  aux  #hsserverps –ef |grep #hundsun#杀掉某一程序的办法ps  aux | grep mysqld | grep –v grep | awk ‘{print $2 }’ xargs kill -9#杀掉僵尸过程ps –eal | awk ‘{if ($2 == “Z”){print $4}}’ | xargs kill -9

strace

跟踪程序执行过程中产生的零碎调用及接管到的信号,帮忙分析程序或命令执行中遇到的异常情况。

举例:查看mysqld在linux上加载哪种配置文件,能够通过运行上面的命令:

strace –e stat64 mysqld –print –defaults > /dev/null

uptime

可能打印零碎总共运行了多长时间和零碎的均匀负载,uptime命令最初输入的三个数字的含意别离是1分钟,5分钟,15分钟内零碎的均匀负荷。

lsof

lsof(list open files)是一个列出以后零碎关上文件的工具。通过lsof工具可能查看这个列表对系统检测及排错,常见的用法:

#查看文件系统阻塞 lsof /boot#查看端口号被哪个过程占用 lsof  -i : 3306#查看用户关上哪些文件 lsof –u username#查看过程关上哪些文件 lsof –p  4838#查看近程已关上的网络链接 lsof –i @192.168.34.128

perf

perf是Linux kernel自带的零碎性能优化工具。劣势在于与Linux Kernel的紧密结合,它能够最先利用到退出Kernel的new feature,用于查看热点函数,查看cashe miss的比率,从而帮忙开发者来优化程序性能。

性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简略的情景是依据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序过后的上下文。如果一个程序 90% 的工夫都破费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸,但我想只有采样频率足够高,采样工夫足够长,那么以上推论就比拟牢靠。因而,通过 tick 触发采样,咱们便能够理解程序中哪些地方最耗时间,从而重点剖析。

汇总:联合以上罕用的性能测试命令并分割文初的性能剖析工具的图,就能够初步理解到性能剖析过程中哪个方面的性能应用哪方面的工具(命令)。

罕用的性能测试工具

纯熟并精通了第二局部的性能剖析命令工具,引入几个性能测试的工具,介绍之前先简略理解几个性能测试工具:

perf_events

一款随 Linux 内核代码一起公布和保护的性能诊断工具,由内核社区保护和倒退。Perf 不仅能够用于应用程序的性能统计分析,也能够利用于内核代码的性能统计和剖析。

eBPF tools

一款应用bcc进行的性能追踪的工具,eBPF map能够应用定制的eBPF程序被广泛应用于内核调优方面,也能够读取用户级的异步代码。重要的是这个内部的数据能够在用户空间治理。这个k-v格局的map数据体是通过在用户空间调用bpf零碎调用创立、增加、删除等操作治理的。

perf-tools:

一款基于 perf_events (perf) 和 ftrace 的Linux性能剖析调优工具集。Perf-Tools 依赖库少,应用简略。反对Linux 3.2 及以上内核版本。

bcc(BPF Compiler Collection)

一款应用eBPF的perf性能剖析工具。一个用于创立高效的内核跟踪和操作程序的工具包,包含几个有用的工具和示例。利用扩大的BPF(伯克利数据包过滤器),正式称为eBPF,一个新的性能,首先被增加到Linux 3.15。多用途须要Linux 4.1以上BCC。

ktap

一种新型的linux脚本动静性能跟踪工具。容许用户跟踪Linux内核动静。ktap是设计给具备互操作性,容许用户调整操作的见解,排除故障和缩短内核和应用程序。它相似于Linux和Solaris DTrace SystemTap。

Flame Graphs

是一款应用perf,system tap,ktap可视化的图形软件,容许最频繁的代码门路疾速精确地辨认,能够是应用github.com/brendangregg/flamegraph中的开发源代码的程序生成。

Linux observability tools | Linux 性能观测工具

首先学习的Basic Tool有如下:

uptime、top(htop)、mpstat、isstat、vmstat、free、ping、nicstat、dstat。Linux性能检测罕用的10个根本命令

高级的命令如下:

sar、netstat、pidstat、strace、tcpdump、blktrace、iotop、slabtop、sysctl、/proc。值得珍藏!Linux零碎常用命令速查手册

Linux benchmarking tools | Linux 性能测评工具

是一款性能测评工具,对于不同模块的性能测试能够应用相应的工具,想要深刻理解,能够参考最下文的附件文档。

Linux tuning tools | Linux 性能调优工具

是一款性能调优工具,次要是从linux内核源码层进行的调优,想要深刻理解,能够参考下文附件文档。

Linux observability sar | linux性能观测工具

sar(System Activity Reporter系统活动状况报告)是目前LINUX上最为全面的零碎性能剖析工具之一,能够从多方面对系统的流动进行报告,包含:文件的读写状况、零碎调用的应用状况、磁盘I/O、CPU效率、内存应用情况、过程流动及IPC无关的流动等方面。

sar的常归应用形式:

sar  [options] [-A] [-o file]  t [n]

其中:

t         #为采样距离,n为采样次数,默认值是1;-o file   #示意将命令后果以二进制格局寄存在文件中,file 是文件名。options   #为命令行选项

起源:https://rdc.hundsun.com/porta...