作者:董西孝
来源:https://rdc.hundsun.com/portal/article/731.html?ref=myread
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。 本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性能测试的工具展开说明。 背景知识:具备背景知识是分析性能问题时需要了解的。比如硬件 cache;再比如操作系统内核。应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程序无法充分利用 cache,从而导致性能下降。比如不必要地调用过多的系统调用,造成频繁的内核 / 用户切换等。 性能分析工具
首先来看一张图: 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。
iostat–用于报告中央处理器统计信息
-
rrqm/s 和 wrqm/s:每秒合并的读和写请求,“合并的”意味着操作系统从队列中拿出多个逻辑请求合并为一个请求到实际磁盘。 -
r/s和w/s:每秒发送到设备的读和写请求数。 -
rsec/s和wsec/s:每秒读和写的扇区数。 -
avgrq –sz:请求的扇区数。 -
avgqu –sz:在设备队列中等待的请求数。 -
await:每个IO请求花费的时间。 -
svctm:实际请求(服务)时间。 -
%util:至少有一个活跃请求所占时间的百分比。
dstat–系统监控工具
dstat –cdlmnpsy
iotop–LINUX进程实时监控工具
iotop –bod interval
I/O
,可以使用pidstat,pidstat –d instat
pidstat–监控系统资源情况
pidstat –d interval
pidstat –u interval
pidstat –r interval
top
-
top 命令的汇总区域显示了五个方面的系统性能信息: -
负载:时间,登陆用户数,系统平均负载; -
进程:运行,睡眠,停止,僵尸; -
cpu:用户态,核心态,NICE,空闲,等待IO,中断等; -
内存:总量,已用,空闲(系统角度),缓冲,缓存; -
交换分区:总量,已用,空闲
htop
-
可以横向或者纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。 -
在启动上,比top更快。 -
杀进程时不需要输入进程号。 -
htop支持鼠标操作。
mpstat
/proc/stat
文件中。在多 CPUs 系统里,其不但能查看所有 CPU 的平均状况信息,而且能够查看特定 CPU 的信息。常见用法:mpstat –P ALL interval times
netstat
netstat –npl # 可以查看你要打开的端口是否已经打开。
netstat –rn # 打印路由表信息。
netstat –in # 提供系统上的接口信息,打印每个接口的MTU,输入分组数,输入错误,输出分组数,输出错误,冲突以及当前的输出队列的长度。
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
strace –e stat64 mysqld –print –defaults > /dev/null
uptime
lsof
lsof /boot
lsof -i : 3306
lsof –u username
lsof –p 4838
lsof –i @192.168.34.128
perf
汇总
常用的性能测试工具
-
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)::一款使用 eBP F的 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。 -
高级的命令如下:sar、netstat、pidstat、strace、tcpdump、blktrace、iotop、slabtop、sysctl、/proc。
Linux benchmarking tools | Linux 性能测评工具
Linux tuning tools | Linux 性能调优工具
Linux observability sar | linux性能观测工具
sar [options] [-A] [-o file] t [n]
如有侵权,请联系删除
好文推荐