上海网站建设改版,wordpress网站无法登陆,网站建设成都,哈尔滨网站优化页面Linux 性能分析工具汇总
出于对Linux操作系统的兴趣#xff0c;以及对底层知识的强烈欲望#xff0c;因此整理了这篇文章。本文也可以作为检验基础知识的指标#xff0c;另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识#xff0c;网络知识和操作系统知识…Linux 性能分析工具汇总
出于对Linux操作系统的兴趣以及对底层知识的强烈欲望因此整理了这篇文章。本文也可以作为检验基础知识的指标另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识网络知识和操作系统知识文档中的工具是不可能完全掌握的另外对系统性能分析和优化是一个长期的系列。
本文档主要是结合Linux 大牛Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文搜集Linux系统性能优化相关文章整理后的一篇综合性文章主要是结合博文对涉及到的原理和性能测试的工具展开说明。
背景知识具备背景知识是分析性能问题时需要了解的。比如硬件 cache再比如操作系统内核。应用程序的行为细节往往是和这些东西互相牵扯的这些底层的东西会以意想不到的方式影响应用程序的性能比如某些程序无法充分利用 cache从而导致性能下降。比如不必要地调用过多的系统调用造成频繁的内核 / 用户切换等。
性能分析工具 首先来看一张图 上图是Brendan Gregg 的一次性能分析的分享这里面的所有工具都可以通过 man 来获得它的帮助文档下面简单介绍介绍一下常规的用法
vmstat–虚拟内存统计
vmstatVirtualMeomoryStatistics虚拟内存统计是 Linux 中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU 等的整体情况进行监视。vmstat 的常规用法vmstat interval times 即每隔 interval 秒采样一次共采样 times 次如果省略 times则一直采集数据直到用户手动停止为止。简单举个例子 可以使用 ctrlc 停止 vmstat 采集数据。
第一行显示了系统自启动以来的平均值第二行开始显示现在正在发生的情况接下来的行会显示每5秒间隔发生了什么每一列的含义在头部如下所示 procsr 这一列显示了多少进程在等待cpub列显示多少进程正在不可中断的休眠等待IO。 memoryswapd 列显示了多少块被换出了磁盘页面交换剩下的列显示了多少块是空闲的未被使用多少块正在被用作缓冲区以及多少正在被用作操作系统的缓存。 swap显示交换活动每秒有多少块正在被换入从磁盘和换出到磁盘。 io显示了多少块从块设备读取bi和写出bo,通常反映了硬盘I/O。 system显示每秒中断(in)和上下文切换cs的数量。 cpu显示所有的cpu时间花费在各类操作的百分比包括执行用户代码非内核执行系统代码内核空闲以及等待IO。
内存不足的表现free memory 急剧减少回收 buffer 和 cache 也无济于事大量使用交换分区swpd,页面交换swap频繁读写磁盘数量io增多缺页中断in增多上下文切换cs次数增多等待IO的进程数b增多大量CPU时间用于等待IOwa
iostat–用于报告中央处理器统计信息
iostat 用于报告中央处理器CPU统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息默认显示了与 vmstat 相同的 cpu 使用信息使用以下命令显示扩展的设备统计 第一行显示的是自系统启动以来的平均值然后显示增量的平均值每个设备一行。
常见 linux 的磁盘 IO 指标的缩写习惯rq 是 requestr 是 readw 是 writequ 是 queuesz 是 sizea 是veragetm 是 timesvc 是 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可以使用
pidstatpidstat –d instatpidstat–监控系统资源情况
pidstat 主要用于监控全部或指定进程占用系统资源的情况,如 CPU,内存、设备 IO、任务切换、线程等。
使用方法
pidstat –d intervalpidstat 还可以用以统计CPU使用信息
pidstat –u interval统计内存信息
pidstat –r intervaltop
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 timesnetstat
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 -9strace
跟踪程序执行过程中产生的系统调用及接收到的信号帮助分析程序或命令执行中遇到的异常情况。微信搜索公众号架构师指南回复架构师 领取资料 。
举例查看 mysqld 在 linux 上加载哪种配置文件可以通过运行下面的命令
strace –e stat64 mysqld –print –defaults /dev/nulluptime
能够打印系统总共运行了多长时间和系统的平均负载uptime 命令最后输出的三个数字的含义分别是 1分钟5分钟15分钟内系统的平均负荷。
lsof
lsoflist open files是一个列出当前系统打开文件的工具。通过 lsof 工具能够查看这个列表对系统检测及排错常见的用法
查看文件系统阻塞
lsof /boot查看端口号被哪个进程占用
lsof -i : 3306查看用户打开哪些文件
lsof –u username查看进程打开哪些文件
lsof –p 4838查看远程已打开的网络链接
lsof –i 192.168.34.128perf
perf 是 Linux kernel 自带的系统性能优化工具。优势在于与 Linux Kernel 的紧密结合它可以最先应用到加入 Kernel 的new feature用于查看热点函数查看 cashe miss 的比率从而帮助开发者来优化程序性能。
性能调优工具如 perfOprofile 等的基本原理都是对被监测对象进行采样最简单的情形是根据 tick 中断进行采样即在 tick 中断内触发采样点在采样点里判断程序当时的上下文。
假如一个程序 90% 的时间都花费在函数 foo() 上那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸但我想只要采样频率足够高采样时间足够长那么以上推论就比较可靠。因此通过 tick 触发采样我们便可以了解程序中哪些地方最耗时间从而重点分析。
汇总
结合以上常用的性能测试命令并联系文初的性能分析工具的图就可以初步了解到性能分析过程中哪个方面的性能使用哪方面的工具命令。