出于对Linux操做系统的兴趣,以及对底层知识的强烈欲望,所以整理了这篇文章。本文也能够做为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。若是没有完善的计算机系统知识,网络知识和操做系统知识,文档中的工具,是不可能彻底掌握的,另外对系统性能分析和优化是一个长期的系列。html
本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性能测试的工具展开说明。mysql
首先来看一张图:linux
上图是Brendan Gregg 的一次性能分析的分享,这里面的全部工具均可以经过man来得到它的帮助文档,下问简单介绍介绍一下常规的用法:ios
vmstat(VirtualMeomoryStatistics,虚拟内存统计) 是Linux中监控内存的经常使用工具,可对操做系统的虚拟内存、进程、CPU等的总体状况进行监视。git
vmstat的常规用法:vmstat interval times即每隔interval秒采样一次,共采样times次,若是省略times,则一直采集数据,直到用户手动中止为止。简单举个例子:github
可使用ctrl+c中止vmstat采集数据。sql
第一行显示了系统自启动以来的平均值,第二行开始显示如今正在发生的状况,接下来的行会显示每5秒间隔发生了什么,每一列的含义在头部,以下所示:缓存
内存不足的表现:free memory急剧减小,回收buffer和cacher也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待IO的进程数(b)增多,大量CPU时间用于等待IO(wa)性能优化
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。
dstat显示了cpu使用状况,磁盘io状况,网络发包状况和换页状况,输出是彩色的,可读性较强,相对于vmstat和iostat的输入更加详细且较为直观。在使用时,直接输入命令便可,固然也可使用特定参数。
以下:dstat –cdlmnpsy
iotop命令是专门显示硬盘IO的命令,界面风格相似top命令,能够显示IO负载具体是由哪一个进程产生的。是一个用来监视磁盘I/O使用情况的top类工具,具备与top类似的UI,其中包括PID、用户、I/O、进程等相关信息。
能够以非交互的方式使用:
iotop –bod interval,查看每一个进程的I/O,可使用pidstat,pidstat –d instat
pidstat主要用于监控所有或指定进程占用系统资源的状况,如CPU,内存、设备IO、任务切换、线程等。
使用方法:
pidstat –d interval #统计CPU使用信息 pidstat –u interval #统计内存信息 Pidstat –r interval
top命令的汇总区域显示了五个方面的系统性能信息:
任务区域默认显示:进程ID,有效用户,进程优先级,NICE值,进程使用的虚拟内存,物理内存和共享内存,进程状态,CPU占用率,内存占用率,累计CPU时间,进程命令行信息。
htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),须要ncurses。
Htop可以让用户交互式操做,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操做。
与top相比,htop有如下优势:
mpstat 是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看全部CPU的平均情况信息,并且可以查看特定CPU的信息。常见用法:
mpstat –P ALL interval times
Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,通常用于检验本机各端口的网络链接状况。
常见用法:
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
跟踪程序执行过程当中产生的系统调用及接收到的信号,帮助分析程序或命令执行中遇到的异常状况。
举例:查看mysqld在linux上加载哪一种配置文件,能够经过运行下面的命令:
strace –e stat64 mysqld –print –defaults > /dev/null
可以打印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含义分别是1分钟,5分钟,15分钟内系统的平均负荷。
lsof(list open files)是一个列出当前系统打开文件的工具。经过lsof工具可以查看这个列表对系统检测及排错,常见的用法:
#查看文件系统阻塞 lsof /boot #查看端口号被哪一个进程占用 lsof -i : 3306 #查看用户打开哪些文件 lsof –u username #查看进程打开哪些文件 lsof –p 4838 #查看远程已打开的网络连接 lsof –i @192.168.34.128
perf是Linux kernel自带的系统性能优化工具。优点在于与Linux Kernel的紧密结合,它能够最早应用到加入Kernel的new feature,用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。
性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸,但我想只要采样频率足够高,采样时间足够长,那么以上推论就比较可靠。所以,经过 tick 触发采样,咱们即可以了解程序中哪些地方最耗时间,从而重点分析。
汇总:结合以上经常使用的性能测试命令并联系文初的性能分析工具的图,就能够初步了解到性能分析过程当中哪一个方面的性能使用哪方面的工具(命令)。
熟练并精通了第二部分的性能分析命令工具,引入几个性能测试的工具,介绍以前先简单了解几个性能测试工具:
一款随 Linux 内核代码一同发布和维护的性能诊断工具,由内核社区维护和发展。Perf 不只能够用于应用程序的性能统计分析,也能够应用于内核代码的性能统计和分析。
一款使用bcc进行的性能追踪的工具,eBPF map可使用定制的eBPF程序被普遍应用于内核调优方面,也能够读取用户级的异步代码。重要的是这个外部的数据能够在用户空间管理。这个k-v格式的map数据体是经过在用户空间调用bpf系统调用建立、添加、删除等操做管理的。
一款基于 perf_events (perf) 和 ftrace 的Linux性能分析调优工具集。Perf-Tools 依赖库少,使用简单。支持Linux 3.2 及以上内核版本。
一款使用eBPF的perf性能分析工具。一个用于建立高效的内核跟踪和操做程序的工具包,包括几个有用的工具和示例。利用扩展的BPF(伯克利数据包过滤器),正式称为eBPF,一个新的功能,首先被添加到Linux 3.15。多用途须要Linux 4.1以上BCC。
一种新型的linux脚本动态性能跟踪工具。容许用户跟踪Linux内核动态。ktap是设计给具备互操做性,容许用户调整操做的看法,排除故障和延长内核和应用程序。它相似于Linux和Solaris DTrace SystemTap。
是一款使用perf,system tap,ktap可视化的图形软件,容许最频繁的代码路径快速准确地识别,能够是使用github.com/brendangregg/flamegraph中的开发源代码的程序生成。
uptime、top(htop)、mpstat、isstat、vmstat、free、ping、nicstat、dstat。Linux性能检测经常使用的10个基本命令
sar、netstat、pidstat、strace、tcpdump、blktrace、iotop、slabtop、sysctl、/proc。值得收藏!Linux系统经常使用命令速查手册
是一款性能测评工具,对于不一样模块的性能测试可使用相应的工具,想要深刻了解,能够参考最下文的附件文档。
是一款性能调优工具,主要是从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...