出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。
VirtualMeomoryStatistics,虚拟内存统计
):是 Linux 中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU 等的整体情况进行监视。vmstat interval times
即每隔 interval 秒采样一次,共采样 times 次,如果省略 times,则一直采集数据,直到用户手动停止为止。简单举个例子:
[root@matrix01 ~]# vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
30 0 0 17375844 1820 79094832 0 0 0 54 0 0 15 6 79 0 0
6 0 0 17693352 1820 79095664 0 0 0 2309 90280 109807 13 6 80 0 0
8 0 0 16006636 1820 79099904 0 0 0 2848 82054 105837 15 7 78 0 0
可以使用 ctrl+c
停止 vmstat
采集数据。
等待IO
)。页面交换
),剩下的列显示了多少块是空闲的(未被使用
),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。从磁盘
)和换出(到磁盘
)。bi
)和写出(bo
),通常反映了硬盘I/O。cs
)的数量。非内核
),执行系统代码(内核
),空闲以及等待IO。iostat 用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息,默认显示了与vmstat 相同的 cpu 使用信息,使用以下命令显示扩展的设备统计:
[root@matrix01 ~]# iostat -dx 5
Linux 3.10.0-957.27.2.el7.x86_64 (matrix01) 2022年12月16日 _x86_64_ (48 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 8.36 0.00 2.88 2.88 0.00 2.82 0.00
sdc 0.00 0.00 0.00 24.02 0.01 146.72 12.22 0.00 0.10 0.18 0.10 0.06 0.13
sdb 0.00 1.76 0.88 148.78 16.13 2393.49 32.20 0.04 0.28 0.49 0.28 0.05 0.69
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 5.07 0.00 0.53 0.53 0.00 0.53 0.00
dm-1 0.00 0.00 0.00 0.07 0.00 0.30 8.67 0.00 0.35 0.42 0.35 0.34 0.00
dm-2 0.00 0.00 0.00 0.07 0.00 0.30 8.67 0.00 0.35 0.58 0.35 0.35 0.00
dm-4 0.00 0.00 0.00 0.07 0.00 0.30 8.68 0.00 0.37 0.96 0.37 0.35 0.00
dm-5 0.00 0.00 0.00 0.00 0.01 0.00 7.87 0.00 47.96 59.07 20.55 13.98 0.00
dm-6 0.00 0.00 0.00 0.31 0.00 52.67 339.55 0.01 25.02 5.00 25.06 0.32 0.01
dm-7 0.00 0.00 0.00 0.31 0.00 52.67 339.65 0.01 25.03 5.98 25.06 0.32 0.01
dm-9 0.00 0.00 0.00 0.31 0.00 52.65 339.93 0.26 853.85 10.15 854.86 0.40 0.01
rq 是 request,
r 是 read,
w 是 write,
qu 是 queue,
sz 是 size,
a 是verage,
tm 是 time,
svc 是 service。
dstat 显示了 cpu 使用情况,磁盘 io 情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于 vmstat
和iostat 的输入更加详细且较为直观。在使用时,直接输入命令即可,当然也可以使用特定参数。
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
top命令的汇总区域显示了五个方面的系统性能信息:
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
跟踪程序执行过程中产生的系统调用及接收到的信号,帮助分析程序或命令执行中遇到的异常情况。
举例: 查看 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 触发采样,我们便可以了解程序中哪些地方最耗时间,从而重点分析。
熟练并精通了第二部分的性能分析命令工具,引入几个性能测试的工具,介绍之前先简单了解几个性能测试工具:
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]
其中:t 为采样间隔,n 为采样次数,默认值是1;-o file 表示将命令结果以二进制格式存放在文件中,file 是文件名。options 为命令行选项