接受我们的有限,去迎接未知的无限;
让每个今天,都能听到永恒的回声。
目录
- 专业知识 | 知识总结 | Linux 操作系统知识地图
- 01 | 基础知识体系
- 02 | 性能优化实战
- 03 | 操作系统原理
专业知识 | 知识总结 | Linux 操作系统知识地图
01 | 基础知识体系
1.1 基础篇
1.1.1 Linux 版本
1.1.1.1 内核版本格式
- 1.xx.yy.zz(xx:主版本;yy:次版本;zz:末版本);
- 2.小于 2.6 版本(次版本奇数为开发板,次版本偶数为稳定版);
- 3.大于 2.6版本(longterm:长期支持版本;stable:稳定版本;mainline:主线开发版本)
1.1.1.2 常见发行版本
- 1.Red Hat
- 2.Ubuntu
- 3.Centos
- 4.Debian
- 5.Fedora
1.1.2 Linux 下的 root 账号和“/”目录
- 1.root 账号:对应 Windows 系统的管理员账号;
- 2.“/”根目录:对应 Windows 系统的“我的电脑”。
1.2 系统操作篇
1.2.1 终端和帮助命令
1.2.1.1 使用终端
- 1.命令提示符($:普通用户;#:root 用户);
- 2.命令和路径补全:tab 键;
- 3.命令的分类(使用 type 查看某个命令的所属分类:内部命令/外部命令)。
1.2.1.2 帮助命令
- 1.man (man xxx;man 1 man);
- 2.help(help xxx;xxx --help);
- 3.info(info xxx)。
1.2.2 文件与目录管理
1.2.2.1 文件与目录查看命令:ls
- -l(小写L):显示文件的详细信息;
- -a:显示隐藏文件;
- -r:逆序显示;
- -t:按时间排序;
- -R:递归显示。
1.2.2.2 路径操作(分绝对路径和相对路径)
- cd:进入制定路径;
- pwd:显示当前路径。
1.2.2.3 建立与删除目录
- mkdir:新建目录;
- rmdir:删除空目录。
1.2.2.4 通配符
- *:匹配任意字符;
- ?:匹配单个字符;
- [xyz]:匹配 xyz 任意一个字符;
- [a-z]:匹配字符范围;
- [!xyz]或[^xyz]:匹配不在 xyz 中的任意字符。
1.2.2.5 复制文件:cp
- -r:复制目录;
- -p:保留用户权限时间;
- -a:尽可能保留原始文件的属性等同于 -dpR。
1.2.2.6 删除文件:rm
- -r:递归删除;
- -f:不提示。
1.2.2.7 移动与重命名:mv
- 移动文件:mv file 1 dir1/
- 重命名文件:mv file1 file2。
1.2.2.8 文本查看
- head:显示文件前 n 行;
- tail:显示结尾 n 行;
- cat:-f(参数可以显示文件更新信息);查看文件(文件内容过长时不建议使用 cat 直接查看);
- wc:统计文件行数。
1.2.2.9 打包和压缩
tar
- 1.打包命令;
- 2.扩展名 .tar;
- 3.配合 gzip 和 bzip2 可以使用打包和压缩功能。
gzip
- 1.压缩与解压缩命令;
- 2.扩展名 .gz。
bzip2
- 1.压缩与解压缩命令;
- 2.扩展名 .bz2。
1.2.2.10 vim 编辑器
正常模式
- 1.v V ctrl+v 进入可视化模式;
- 2.: 进入命令模式;
- 3.esc: 回到正常模式;
命令模式
- 1.h j k l 上下左右;
- 2.yy y$ 复制;
- 3.dd d$ 剪切;
- 4.p 粘贴;
- 5.u 撤销命令;
- 6.ctrl + r 重做命令;
- 7.x 删除单个字符;
- 8.r 替换单个字符;
- 9.G 定位指定的行;
- 10.^$ 定位到行的开头和结尾;
- 11.w 写入文件;
- 12.w 文件名:另存文件;
- 13.q 退出;
- 14.q! 不保存退出;
- 15.!cmd 执行命令;
- 16./ 查找命令;
- 17.s/old/new/ 替换命令;
- 18.set nu 设置命令。
插入模式
- 1.iIoOaA:进入插入模式;、
- 2.i 在当前光标位置进入插入模式;
- 3.I 移动到当前光标的行首,进入插入模式;
- 4.a 在当前光标位置之后进入插入模式;
- 5.A 移动到当前目标所在行尾,进入到插入模式;
- 6.o 在当前光标下一行进入插入模式;
- 7.O 在当前光标上一行进入插入模式。
可视模式
- 1.v 字符可视模式;
- 2.V行可视化模式;
- 3.ctrl + v 块可视化模式。
1.2.2.11 用户管理
用户命令
- 1.常用用户命令(useradd 添加用户、userdel 删除用户、passwd 设置用户密码、usermod 修改用户信息、groupadd 添加用户组、groupdel 删除用户组);
- 2.用户与用户组的概念;
- 3.用户的家目录:/home/用户名;
- 4.以管理员身份运行(su 切换当前用户身份;sudo 用 root 用户身份执行某条命令;visudo 修改 sudo 命令的配置文件)。
用户配置文件
- 1./etc/passwd 用户信息配置文件;
- 2./etc/shadow 用户密码信息配置文件。
1.2.2.12 权限管理
权限的表示方法
- 1.一般权限的表示方法:r/w/x;
- 2.文件权限与目录权限格式相同,但功能不同(文件权限、目录权限、特殊权限);
- 3.权限相关命令(chmod:修改权限;chown:更改属性、属组;chgrp:可以单独更改属组,不常用)。
1.3 系统管理篇
1.3.1 正则表达式
1.3.1.1 定义
- 对字符串操作的一组逻辑公式;用于对符合规则的字符串进行查找和替换。
1.3.1.2 初识元字符
- ^、$、*。
1.3.1.3 扩展元字符
1.3.2 文本与文件查找
1.3.2.1 grep
- -i:忽略大小写;
- -v:反转;
- -a:处理二进制文件;
- -R:递归方式。
1.3.2.2 find
- -name:按照文件名搜索;
- -perm:按照权限搜索;
- -user:按照属主搜索;
- -type:按照文件类型搜索。
1.3.3 网络配置
1.3.3.1 网络配置命令
- 1.ifconfig:查看和配置网络接口;
- 2.ip:查看和配置网络接口、路由;
- 3.netstat:查看进程监听端口状态;
- 4.network 与 NetworkManager:网络管理脚本。
1.3.3.2 配置文件
- 1.ifcfg-eth0 eth0:网卡配置文件;
- 2.networking:主机名配置文件;
- 3.resolv.conf:域名配置文件。
1.3.4 软件安装于更新
1.3.4.1 rpm 安装
- -i:安装;
- -q:查询;
- -U:升级;
- -e:卸载;
1.3.4.2 yum 安装
- 1.安装:yum install xxx(软件名);
- 2.卸载:yum remove xxx;
- 3.更新:yum update xxx。
1.3.4.3 源代码编译安装
- 1…/config
- 2.make
- 3.make install。
1.3.5 防火墙
1.3.5.1 SELinux
1.访问控制方式分类
- DAC:自主访问控制;
- MAC:强制访问控制。
2.常用命令
- getenforce:查看 SELinux 状态;
- setenforce:修改访问状态。
3.配置文件
- /etc/selinux/config
- enforce:强制控制
- permissive:通知但不强制控制;
- disable:禁用访问控制。
1.3.5.2 iptables
1.表
- filter:用于过滤;
- nat:用于地址装换。
2.链
- INPUT:进入主机方向;
- OUTPUT:本主机发出方向;
- FORWORD:转发方向;
- PREROUTING:路由前转换;
- POSTROUTING:路由后转换。
3.选项
- -i -o 接口
- -s -d IP地址 / 子网掩码
- -p tcp/udp 指定协议
- -j 动作
1.3.5.3 tcpdump
1.保存和读取规则
- -r filename:从文件读取已抓取的数据包;
- -w filename:将抓取的数据包保存至文件。
2.常用选项
- -v:显示详细信息;
- -n:不将 IP 地址解析为主机名;
- -i:接口;
- host:主机;
- port:端口。
1.3.6 服务与日志
1.3.6.1 服务状态的查看命令
- service:service 服务名称 stat | stop | restat | status
- systemctl start | stop | restart | status 服务名称.service
1.3.6.2 服务配置文件的编写
1.3.6.3 常用系统日志
- /var/log:系统日志默认目录;
- message:系统日志;
- dmesg:内核启动日志;
- secure:安全日志。
1.3.6.4 应用程序日志
1.3.7 磁盘分区
1.3.7.1 链接文件
- 符号链接;
- 硬链接。
1.3.7.2 mount 挂载命令
- -t:文件系统类型;
- -o:挂载选项(ro:只读挂载;rw:只写挂载;remount:重挂载)。
1.3.7.3 配置文件 /etc/fstab
1.3.8 文件系统
1.3.8.1 常用命令
- fdisk:分区工具(-l:查看分区信息;fdisk/dev/sdx:为某一个存储分区)。
- df:查看分区使用空间大小;
- du:查看文件夹使用空间大小;
- mkfs:格式化命令(mkfs.ext4:格式化为 ext4 文件系统;mkfs.xfs:格式化为 XFS 文件系统)。
1.3.8.2 ext4
1.3.9 逻辑卷与 LVM
1.3.9.1 LVM 分层
- 1.PV:物理卷;
- 2.VG:卷组;
- 3.LV:逻辑卷。
1.3.9.2 常用命令
- pvcreate:建立 PV;
- pvs:查看 pv;
- vgcreate:建立 VG;
- lvcreate:建立 LV;
- lvextend:扩展 LV;
- vgs:查看 VG;
- lvs:查看 LV。
1.3.9.3 卷用于分层管理磁盘
1.3.10 系统启动过程与故障修复
1.3.10.1 系统启动过程简述
- 1.BIOS:选择启动设备;
- 2.MBR:硬盘可引导扇区;
- 3.GRUB Linux:系统可引导工具;
- 4.内核;
- 5.init 或 systemd;
- 6.service 服务或 systemd 服务(Centos 7 以前为 init,Centos 7 以前仅有 service 服务);
- 7.启动 tty 等待用户登陆。
1.3.10.2 更新内核版本
- 1.RPM 方式更新(安装速度快,没有最新的版本);
- 2.源代码编译方式更新(可以使用最新的版本,编译时间较长)。
1.4 Shell 篇
1.4.1 认识 BASH
1.4.1.1 定义
- Shell 是命令行解释器,翻译用户的命令给内核执行,并将结果返回给用户。
1.4.1.2 Shell 脚本的用处
- 1.组合系统命令实现自动化功能;
- 2.组成脚本的基本元素是命令,不用深入掌握系统函数库。
1.4.1.3 内建命令与外部命令
- 1.内建命令不会创建子进程,但是对于 shell 无效;
- 2.外部命令会创建子进程。
1.4.2 管道与重定向
1.4.2.1 管道符 |
1.4.2.2 重定向符号
- <:输入重定向;
-
:输出重定向;
-
:输出重定向,追加方式。
1.4.2.3 sort 对文本进行排序
1.4.2.4 join 连接两个字符串
1.4.3 进程与内存的查看与调整
1.4.3.1 进程查看命令
- ps top:对当前系统的进程信息进行查看。
1.4.3.2 内存查看命令
- free:查看系统的内存使用率;sar:显示系统的运行状态,用于故障排除。
1.4.3.3 常用的第三方系统状态查看命令
- iftop:查看某一进程的网络流量。
1.4.4 变量与环境变量
1.4.4.1 变量的定义
- Shell 变量无需声明;
- 销毁变量:unset 变量名。
1.4.4.2 变量的赋值
- 变量名 = 变量值。
1.4.4.3 环境变量
- PATH:命令解释器路径。
1.4.4.4 环境变量的配置文件
- /etc/profile:系统环境变量默认保存文件;
- /etc/bashrc login shell:执行初始化的配置文件。
1.4.5 转义与引用
1.4.5.1 特殊符号
1.4.5.2 转义符 /
1.4.5.3 引用符号
- 单引号’ ';双引号" "。
1.4.6 循环
1.4.6.1 while 循环
- while 循环根据 while 判断结果确定是否继续执行;
- 判断的结果为命令的返回值,如果为 0 则循环会继续执行;
- 如果判断结果一直为真“0”,无法到达循环结束称作死循环。
1.4.6.2 for 循环
- Shell 的 for 循环使用遍历方式,for…in…格式
- for 循环支持 C 语言写法,需要使用 (()) 格式;
- 支持使用 break、continue 对循环进行控制;
- for 循环支持嵌套使用。
1.4.7 函数
1.4.7.1 函数的定义
- 函数是对重复利用的代码进行封装;
- 函数的定义方法是:函数名(){}。
1.4.7.2 函数的使用
- 使用函数的方式是直接使用:函数名。
1.4.8 计划任务
1.4.8.1 一次性计划任务 at
1.4.8.2 周期性计划任务 cron
- 查看周期性计划任务:crontab -l;
- 编辑周期性计划任务:crontab -e。
1.4.9 运算符
1.4.9.1 运算符号
- (+ - * / % 加 减 乘 除 取余)
1.4.9.2 shell 的弊端
- 支持整数运算,但和编译语言比起来效率很低;
- 对浮点运算支持不好。
1.4.10 测试与判断
1.4.10.1 test 测试
- 可以书写为 [];
- 可以使用 [[]] 扩展格式;
- 文件测试;
- 数字比较。
1.4.10.2 if 判断
- 基本原理:根据命令的返回值是否为 0;进行分支判断;
- 支持 if…else 写法;
- 支持 if 嵌套写法。
1.4.10.3 case 分支
- case 分支一般作为 if 判断的补充;
- case 分支的结束符号是“;;”,它是 ";"的转义形式。
1.5 文本操作篇
1.5.1 正则表达式与文本搜索
1.5.1.1 元字符大全
- .单个字符;
- *一个(包括零个)它前面的字符;
- […] 匹配方括号中的任意字符;
- ^ 匹配行开始;
- $ 匹配行结束;
- \ 转义特殊字符;
- {…} 匹配出现的次数;
- +匹配前面的正则表达式出现一次或多次;
- ?匹配前面的正则表达式出现零次或一次;
- | 并列匹配;
- () 分组;
- POSIX 字符类。
1.5.2 sed
1.5.2.1 sed 基础
基本语法
- sed ‘cmd’ filename
- sed -e ‘cmd’ -e ‘cmd’ filename
1.5.2.2 sed 基础命令
- s:替换;d:删除;a:追加;i:插入;c:更改;n:下一步;r:读文件;w:写文件;q:退出;y:替换;p:打印。
1.5.2.3 sed 高级命令
多行命令
- N:将多行追加到模式空间进行处理;
- D:删除多行模式空间的第一个字符至第一个换行符,并返回脚本的开头执行;
- P:输出模式空间中的第一个字符至第一个换行符。
保持空间模式
- h:将模式空间中的内容存储至保存空间,并覆盖保持空间的内容;
- H:将模式空间中的内容存储至保存空间,并追加到保持空间的内容;
- g:将保持空间的内容存储至模式空间,并覆盖模式空间的内容;
- G:将保持空间的内容存储至模式空间,并追加到模式空间;
- x:交换模式空间和保持空间的内容。
条件与分支
- :标签;
- b branch:命令用于在脚本中将控制权转移到另一行,如果没有指定标签就转移到脚本的结尾;
- t 测试命令,如果当前匹配地址的行进行了成功替换,test 命令就会转到标签处,如果没有指定标签就转移到标签的结尾。
1.5.3 AWK
1.5.3.1 AWK 的工作方式
- BEGIN{} 模式用于处理文件的预处理;
- {} 模式用于对文件每行进行处理;
- END{} 模式用于处理完文件之后的操作。
1.5.3.2 运算符
- 算数运算符;
- 关系运算符;
- 布尔运算符。
1.5.3.3 循环
- 支持 while 循环;
- 支持 for 循环;
- 支持 break、continue。
1.5.3.4 系统变量
- FS:字段分隔符;
- OFS:输出字段分隔符;
- RS:记录分隔符;
- ORS:输出记录分隔符。
1.5.3.5 条件
- 和 C 语言用法相似;
- 语法格式为:if(判断);
- 支持 if…else…用法;
- 支持 if 嵌套。
1.5.3.6 函数
- 算数函数;
- 随机函数;
- 字符串函数。
02 | 性能优化实战
2.1 常见性能指标以及 USE 法分类
2.1.1 CPU 指标性能
2.1.1.1 CPU 使用率
- 用户 CPU、系统 CPU、IOWAIT、软中断、硬中断、窃取 CPU、客户 CPU。
2.1.1.2 CPU 上下文切换
- 自愿上下文切换,非自愿上下文切换。
2.1.1.3 平均负载
2.1.1.4 CPU 缓存命中率
2.1.2 内存性能指标
2.1.2.1 系统内存指标
- 已用内存;
- 剩余内存;
- 可用内存;
- 缺页异常(主缺页异常/次缺页异常);
- 缓存/缓冲区:使用量/命中率;
- Slabs。
2.1.2.2 进程内存指标
- 虚拟内存(VSS);
- 常驻内存(RSS);
- 按比例分配共享内存后的物理内存(PSS);
- 独占内存(USS);
- 共享内存;
- SWAP 内存;
- 缺页异常(主缺页异常/次缺页异常)。
2.1.2.3 SWAP
- 已用空间;
- 剩余空间;
- 换入速度;
- 换出速度;
2.1.3 I/O 性能指标
2.1.3.1 文件系统
- 存储空间容量、使用量以及剩余空间;
- 索引节点 容量、使用量以及剩余量;
- 缓存(页缓存、目录项缓存、索引节点缓存、具体文件系统缓存(ext4 的缓存));
- IOPS:文件 I/O;
- 响应时间(延迟);
- 吞吐量(B/s)。
2.1.3.2 磁盘
- 使用率;
- IOPS;
- 吞吐量(B/s);
- 响应时间(延迟);
- 缓冲区;
- 相关因素(读写类型:如顺序还是随机;读写比例;读写大小;存储类型:如 RAID 级别、本地还是网络)。
2.1.4 网络性能指标
2.1.4.1 应用层
- QPS(每秒请求数);
- 套接字缓冲区大小;
- DNS 解析延迟;
- 响应时间;
- 错误数。
2.1.4.2 传输层
- TCP 连接数;
- 连接跟踪数;
- 重传数;
- 丢包数;
- 延迟。
2.1.4.3 网络层
- 丢包数;
- TTL;
- 拆包。
2.1.4.4 链路层
- PPS(每秒网络帧数);
- BPS(每秒字节数);
- 丢包数;
- 错误数。
2.1.5 常见指标分类(USE 法)
资源 | 类型 | 性能指标 |
---|---|---|
CPU | 使用率 | CPU 使用率 |
CPU | 饱和度 | 运行队列长度或平均负载 |
CPU | 错误数 | 硬件 CPU 错误数 |
内存 | 使用率 | 已用内存百分比或 SWAP 用量百分比 |
内存 | 饱和度 | 内存换页量 |
内存 | 错误数 | 内存分配失败或OOM |
存储设备 I/O | 使用率 | 设备 I/O 时间百分比 |
存储设备 I/O | 饱和度 | 等待队列长度或延迟 |
存储设备 I/O | 错误数 | I/O 错误数 |
文件系统 | 使用率 | 已用容量百分比 |
文件系统 | 饱和度 | 已用容量百分比 |
文件系统 | 错误数 | 文件读写错误数 |
网络 | 使用率 | 宽带使用率 |
网络 | 饱和度 | 重传报文数 |
网络 | 错误数 | 网卡收发错误数、丢包数 |
文件描述符 | 使用率 | 已用文件描述符百分比 |
连接跟踪 | 使用率 | 已用连接跟踪百分比 |
连接数 | 饱和度 | TIMEWAIT 状态连接数 |
2.2 常见性能工具
2.2.1 CPU 性能工具
性能指标 | 性能工具 | 说明 |
---|---|---|
平均负载 | uptime、top、/proc/loadavg | uptime 最简单;top 提供了更全的指标;/proc/loadavg 常用于监控系统 |
系统 CPU 使用率 | vmstat、mpstat、top、sar、/proc/stat | top、vmstat、mpstat 只可以动态查看,而 sar 还可以记录历史数据;/proc/stat 是其他性能工具的数据来源,也常用用于监控 |
进程 CPU 使用率 | top、ps、pidstat、htop、atop | top、ps 可以按 CPU 使用率给进程排序,而 pidstat 只显示实际用了 CPU 的进程;htop 和 atop 以不同颜色显示更直观 |
系统上下文切换 | vmstat | 除了上下文切换次数,还提供运行状态和不可中断状态进程的数量 |
进程上下文切换 | pidstat | 注意加上 -w 选项 |
软中断 | top、mpstat、/proc/softirqs | top 提供软中断 CPU 使用率,而 /proc/softirqs 和mpstat 提供了各种软中断在每个 CPU 上的运行次数 |
硬中断 | vmstat、/proc/interrupts | vmstat 提供总的中断次数,而 /proc/interrupts 提供各种中断在每个 CPU 上运行的累积次数 |
网络 | dstat/sar、tcpdump | dstat sar 提供总的网络接收和发送情况,而 tcpdump 则是动态抓取正在进行的网络通讯 |
I/O | dstat、sar | dstat 和 sar 都提供了 1/0 的整体情况 |
CPU 缓存 | perf | 使用 perf stat 子命令 |
CPU 数 | lscpu/、proc/cpuinfo | lscpu 更直观 |
事件剖析 | perf、火焰图、execsnoop | perf 和火焰图用来分析热点函数以及调用栈,execsnoop用来监测短时进程 |
动态追踪 | ftrace、bcc、systemtap | ftrace 用于跟踪内核函数调用栈,而 bcc 和 systemtap 则用于跟踪内核或应用程序的执行过程 注意 bcc 要求内核版本 >=4.1) |
2.2.2 内存性能工具
性能指标 | 性能工具 | 说明 |
---|---|---|
系统已用、可用、剩余内存 | free、vmstat、sar、/proc/meminfo | free 最为简单,而 vmstat、sar 更为全面;/proc/meminfo 是其他工具的数据来源,也常用于监控系统中 |
进程虚拟内存、常驻内存、共享内存 | ps、top、pidstat、/proc/pid/stat、/proc/pid/status | ps 和 top 最简单,而 pidstat 则需要加上 -r 选项;/proc/pid/stat 和 /proc/pid/status 是其他工具的数据来源,也常用于监控系统中 |
进程内存分布 | pmap、/proc/pid/maps | /proc/pid/maps 是 pmap 的数据来源 |
进程 Swap 换出内存 | top、/proc/pid/status | /proc/pid/status 是 top 的数据来源 |
进程缺页异常 | ps、top、pidstat | 注意给 pidstat 加上 -r 选项 |
系统换页情况 | sar | 注意加上 -B 选项 |
缓存/缓冲区用量 | free、vmstat 、sarcachestat | vmstat 最常用,而 cachestat 需要安装 bcc |
缓存/缓冲区命中率 | cachetop | 需要安装 bcc |
Swap 已用空间和剩余空间 | free、sar | free 最为简单,而 sar 还可以记录历史 |
Swap 换入换出 | free、sar | vmstat 最为简单,而 sar 还可以记录历史 |
内存泄漏检测 | memleak、valgrind | memleak 需要安装 bcc,valgrind 还可以在旧版本(如 3.x)内核中使用 |
指定文件的缓存大小 | pcstat | 需要从源码下载安装 |
2.2.3 文件系统和磁盘 I/O 性能工具
性能指标 | 性能工具 | 说明 |
---|---|---|
文件系统空间容量、使用量以及剩余空间 | df | 详细文档可以执行info coreutils ‘df invocation’ 命令查询 |
索引节点容量、使用量以及剩余量 | df | 注意加上 -i 选项 |
页缓存和可回收 Slab 缓存 | /proc/meminfo、sar、vmstat | 注意 sar 需要加上 -r 选项,而 /proc/meminfo是其他工具的数据来源,也常用于监控 |
缓冲区 | /proc/meminfo.sar、vmstat | 注意 sar 需要加上-r 选项,而 /proc/meminfo是其他工具的数据来源,也常用于监控 |
目录项、索引节点以及文件系统的缓存 | /proc/slabinfo.slabtop | slabtop 更直观,而 /proc/slabinfo 常用于监控 |
磁盘 I/O 使用率、IOPS、吞吐量。响应时间、I/O 平均大小以及等待队列长度 | iostat、sar、dstat、/proc/diskstats | iostat 最为常用,注意使用 iostat -d -x 或 sar -d 选项; /proc/diskstats 则是其他工具/proc/diskstats数据来源,也常用于监控 |
进程 I/O 大小以及 I/O 延迟 | pidstat、iotop | 注意使用 pidstat -d 选项 |
块设备 I/O 事件跟踪 | biktrace | 需要跟 blkparse 配合使用,比如 blktrace -d /dev/sda -o- blkparse -i |
进程 I/O 系统调用跟踪 | strace、perf trace | strace 只可以跟踪单个进程,而 perf trace还可以跟踪所有进程的系统调用 |
进程块设备 I/O 大小跟踪 | biosnoop、biotop | 需要安装 bcc |
动态跟踪 | ftrace、bcc、systemtap | ftrace 用于跟踪内核函数调用栈,而 bcc 和systemtap 则用于跟踪内核或应用程序的执行过程(注意 bcc 要求内核版本 >=4.1) |
2.2.4 网路性能工具
性能指标 | 性能工具 | 说明 |
---|---|---|
吞吐量(BPS) | sar、nethnogs、iftop、/proc/net/dev | 分别可以查看网络接口、进程以及 IP 地址的网络吞吐量; /proc/net/dev 常用于监控 |
吞吐量(PPS) | sar、/proc/net/dev | 注意使用 sar -n DEV 选项 |
网络连接数 | netstat、ss | ss 速度更快 |
网络错误数 | netstat、sar | 注意使用 netstat -s 或者 sar -n EDEV/EIP 选项 |
网络延迟 | ping、hping3 | ping 基于ICMP,而 hping3 则基于 TCP 协议 |
连接跟踪数 | conntrack、/proc/sys/net/netfilter/nf_conntrack_count、/proc/sys/net/netfilter/nf_conntrack_max | conntrack 可用来查看所有连接跟踪的相信信息nf_conntrack count 只是连接跟踪的数量,而nf_conntrack_max 则限制了总的连接跟踪数量 |
路由 | mtr、traceroute、route | route 用于查询路由表,而 mtr 和 traceroute 则用来排查和定位网络链路中的路由问题 |
DNS | dig、nslookup | 用于排查 DNS 解析的问题 |
防火墙和NAT | iptables | 用于排查防火墙及 NAT 的问题 |
网卡选项 | ethtool | 用于查看和配置网络接口的功能选项 |
网络抓包 | tcpdump、Wireshark | 通常在服务器中使用 tcpdump 抓包后再复制出来用 Wireshark 的图形界面分析 |
动态追踪 | ftrace、bcc、systemtap | ftrace 用于跟踪内核函数调用栈,而 bcc 和 systemtap 则用于跟踪内核或应用程序的执行过程 (注意 bcc 要求内核版本 >4.1) |