点击左上方蓝色“混说Linux”,选择“设为星标”
本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性能测试的工具展开说明。
首先来看一张图:
vmstat(VirtualMeomoryStatistics,虚拟内存统计)是 Linux 中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU 等的整体情况进行监视。vmstat 的常规用法:vmstat interval times
即每隔 interval
秒采样一次,共采样 times
次,如果省略 times
,则一直采集数据,直到用户手动停止为止。简单举个例子:
可以使用 ctrl+c
停止 vmstat
采集数据。
procs:r 这一列显示了多少进程在等待cpu,b列显示多少进程正在不可中断的休眠(等待IO)。
memory:swapd 列显示了多少块被换出了磁盘(页面交换),剩下的列显示了多少块是空闲的(未被使用),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。
swap:显示交换活动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)。
io:显示了多少块从块设备读取(bi)和写出(bo),通常反映了硬盘I/O。
system:显示每秒中断(in)和上下文切换(cs)的数量。
cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO。
内存不足的表现:free memory 急剧减少,回收 buffer 和 cache 也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待IO的进程数(b)增多,大量CPU时间用于等待IO(wa)
iostat 用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息,默认显示了与 vmstat 相同的 cpu 使用信息,使用以下命令显示扩展的设备统计:
第一行显示的是自系统启动以来的平均值,然后显示增量的平均值,每个设备一行。
rrqm/s 和 wrqm/s:每秒合并的读和写请求,“合并的”意味着操作系统从队列中拿出多个逻辑请求合并为一个请求到实际磁盘。
r/s和w/s:每秒发送到设备的读和写请求数。
rsec/s和wsec/s:每秒读和写的扇区数。
avgrq –sz:请求的扇区数。
avgqu –sz:在设备队列中等待的请求数。
await:每个IO请求花费的时间。
svctm:实际请求(服务)时间。
%util:至少有一个活跃请求所占时间的百分比。
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
pidstat –u interval
pidstat –r interval
任务区域默认显示:进程 ID,有效用户,进程优先级,NICE 值,进程使用的虚拟内存,物理内存和共享内存,进程状态,CPU 占用率,内存占用率,累计 CPU 时间,进程命令行信息。
htop 是 Linux 系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要 ncurses。
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
跟踪程序执行过程中产生的系统调用及接收到的信号,帮助分析程序或命令执行中遇到的异常情况。
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 中断内触发采样点,在采样点里判断程序当时的上下文。
Flame Graphs:是一款使用 perf,system tap,ktap 可视化的图形软件,允许最频繁的代码路径快速准确地识别,可以是使用 github.com/brendangregg/flamegraph
中的开发源代码的程序生成。
首先学习的Basic Tool有如下:uptime、top(htop)、mpstat、isstat、vmstat、free、ping、nicstat、dstat。
高级的命令如下:sar、netstat、pidstat、strace、tcpdump、blktrace、iotop、slabtop、sysctl、/proc。
是一款性能测评工具,对于不同模块的性能测试可以使用相应的工具,想要深入了解,可以参考最下文的附件文档。
是一款性能调优工具,主要是从linux内核源码层进行的调优,想要深入了解,可以参考下文附件文档。
sar(System Activity Reporter系统活动情况报告)是目前LINUX上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC 有关的活动等方面。sar 的常规使用方式:
sar [options] [-A] [-o file] t [n]
往期推荐
来都来了,点个在看再走吧~~~