共计 5323 个字符,预计需要花费 14 分钟才能阅读完成。
出于对 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 #hsserver
ps –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…