基础知识体系

基础篇

  • Linux版本
    • 内核版本格式
      • xx.yy.zz 主版本.次版本.补丁版本
      • 小于2.6版本时
        • 次版本为奇数时表示开发版
        • 次版本为偶数时表示稳定版
      • 大于2.6版本时
        • longterm 长期支持版
        • stable 稳定版
        • mainline 主线开发版
    • 常见发行版本
      • RedHat
      • Ubuntu
      • CentOS
      • Debian
      • Fedora
  • 重要概念

    • root用户,对应Windows的系统管理员
    • / 根目录,对应Windows的“我的电脑”

      系统操作篇

      命令相关

  • 命令提示符

    • 为root用户

    • $ 为普通用户
  • 命令或路径自动补全使用 Tab键
  • 使用type X查看X命令的分类

    • 内部命令 builtin
    • 外部命令

      帮助命令

  • man

    • man X
    • man 1 man
  • help
    • help X # 获取内部命令的帮助
    • X —help # 获取外部命令的帮助
  • info
    • info X # 比man 更丰富的文档

      文件与目录管理

      ```shell

      ls

      查看目录与文件

      -l 显示详细信息

      -a 显示隐藏文件

      -t 按时间排序

      -r 逆序显示

      -R 递归显示

cd

进入指定路径

pwd

显示当前路径

mkdir

新建目录

rmdir

删除目录

cp

复制

-r 复制目录

-p 保留用户权限和时间属性

-a 尽可能保留文件所有属性,相当于 -dpR

rm

删除

-r 递归删除

-f 强制删除,不提示

mv

移动或重命名

mv file dir/ 移动

mv file file1 重命名

head

显示文件前n行

tail

显示文件尾n行

wc

统计

cat

查看文件内容,过长时不宜使用

tar

打包命令,扩展名.tar

配合gzip和bzip2 可以使用打包、压缩

gzip

压缩与解压缩,扩展名.gz

bzip2

压缩与解压缩,扩展名.bz2

  1. 通配符
  2. - * 匹配任意字符
  3. - ? 匹配任意单个字符
  4. - [xyz] 匹配xyz中的任意一个字符
  5. - [a-z] 匹配az的字符范围
  6. - [^xyz] 匹配不在xyz中的任意字符
  7. <a name="EmZh9"></a>
  8. ### vim文本编辑
  9. - 正常模式
  10. - i 当前位置进入插入模式
  11. - I 移动到当前行首进入插入模式
  12. - a 当前位置光标之后进入插入模式
  13. - A 移动到当前行尾进入插入模式
  14. - o 当前行下一行进入插入模式
  15. - O 当前行上一行进入插入模式
  16. - : 进入命令模式
  17. - esc 回到正常模式
  18. - hjkl 左下上右
  19. - yy y$ 复制
  20. - dd d$ 剪切
  21. - p 粘贴
  22. - u 撤销
  23. - x 删除单个字符
  24. - r 替换单个字符
  25. - G 定位指定的行
  26. - ^$ 定位到行首和行尾
  27. - 命令模式
  28. - w #保存
  29. - w name #另存为
  30. - q #退出
  31. - q! #退出不保存
  32. - !cmd #执行命令
  33. - set nu #设置显示行号
  34. - / #查找
  35. - s/old/new/ #替换命令
  36. - 插入模式
  37. - 可视模式
  38. - v 字符可视化模式
  39. - V 行可视化模式
  40. - ctrl + v 块可视化模式
  41. <a name="5r7cC"></a>
  42. ### 用户管理
  43. - 用户命令
  44. - 常用命令
  45. - useradd 添加用户
  46. - userdel 删除用户
  47. - passwd 设置用户密码
  48. - usermod 修改用户信息
  49. - groupadd 添加用户组
  50. - groupdel 删除用户组
  51. - 家目录
  52. - /root
  53. - /home/NAME
  54. - 管理员身份运行
  55. - su 切换用户
  56. - sudo 临时用root用户身份执行某条命令
  57. - visudo 修改sudo命令的配置文件
  58. - 用户配置文件
  59. - /etc/passwd 用户信息配置文件
  60. - /etc/shadow 用户密码配置文件
  61. <a name="t2MUn"></a>
  62. ### 权限管理
  63. - 权限相关命令
  64. - chmod 修改权限
  65. - chown 修改属主、属组
  66. - chgrp 单独修改属组
  67. - 权限表示方法
  68. - 字符表示
  69. - r
  70. - w
  71. - x
  72. - 目录权限
  73. - rx 进入目录读取文件名
  74. - wx 修改目录内文件名
  75. - x 进入目录
  76. - 特殊权限
  77. - /etc/passwd 用户信息配置文件
  78. - /tmp目录权限为777,确保只有root用户和文件属主才可操作自己的文件和目录
  79. <a name="dS0tk"></a>
  80. ## 系统管理篇
  81. <a name="TucdA"></a>
  82. ### 正则表达式
  83. 对字符串操作的一组逻辑公式,常用于文本的查找和替换。
  84. - 基本元字符
  85. - ^
  86. - $
  87. - *
  88. - 扩展元字符
  89. <a name="LzRDW"></a>
  90. ### 文本与文件查找
  91. ```shell
  92. # grep
  93. ### -i 忽略大小写
  94. ### -v 反转
  95. ### -a 处理二进制文件
  96. ### -R 递归方式
  97. # find
  98. ### -name 按文件名查找
  99. ### -perm 按权限查找
  100. ### -user 按属主查找
  101. ### -type 按类型查找

网络配置

  • 配置文件
    • ifcfg-eth0 eth0网卡的配置文件
    • networking 主机名配置文件
    • resolv.conf 域名配置文件
  • 配置命令

    • ifconfig 网卡配置命令
    • ip 查看、配置网络接口,路由
    • netstat 查看进程监听端口状态
    • network和NetworkManager 网络管理脚本

      软件安装与更新

  • rpm安装

    # rpm
    ### -i 安装
    ### -q 查询
    ### -e 卸载
    ### -U 升级
    
  • 源码编译安装

    ./configure
    make
    make install
    
  • yum

    # yum install X 安装
    # yum update X 更新
    # yum remove X 删除
    

    服务与日志

  • 服务管理

    • service NAME start|stop |restart
    • systemctl start|stop| restart NAME
  • 日志管理

    • dmesg 内核日志
    • secure 安全日志
    • /var/log/message 系统日志
    • /var/log/ 系统日志默认目录

      防火墙

      SELinux

      Security-Enhanced Linux是一个Linux内核模块,也是一个Linux安全子系统
      主要作用最大限度的减小服务进程可访问的资源(最小权限原则)
  • 访问控制方式分类

    • DAC 自主访问控制,管理的主体是用户,根据是否有RWX权限管理,没有SELinux,root任意访问
    • MAC 强制访问控制,管理的主体是进程,在DAC之上根据进程是否有某一类资源的权限管理,拥有SELinux,root也只能访问自己可访问的资源类型
  • 常用命令
    • getenforce 查看状态
    • setenforce 修改状态
  • 配置文件

    • /etc/selinux/config
      • enforcing 强制访问控制
      • permissive 通知但不强制
      • disable 禁用访问控制

        iptables

    • filter 用于过滤
    • nat 用于转换
    • INPUT 进入本机
    • OUTPUT 从本机发出
    • FORWARD 转发方法
    • PREROUTING 路由转换前
    • POSTROUTING 路由转换后
      # iptables
      ### -i -o 接口
      ### -s -d IP地址/子网掩码
      ### -p tcp/udp  协议
      ### --sport 源端口
      ### --dport 目的端口
      ### -j 动作
      ### -j ACCEPT 
      ### -j DROP
      ### -j REJECT 拒绝并返回RST包
      ### -j SNAT 源地址转换
      ### -j DNAT 目标地址转换
      ### -j MASQUERADE 动态源地址转换
      

      tcpdump

      ```shell

      tcpdump

      -v 显示详情

      -n 不将IP解析为主机名

      -i 接口

      host 主机

      port 端口

-r filename 从文件读取

-w filename 保存到文件

<a name="WPtfg"></a>
### 磁盘分区和文件系统

- 链接文件
   - 软链接
   - 硬链接
- 配置文件
   - /etc/fstab
- mount挂载
```shell
# mount 
### -t 文件系统类型
### -o 挂载选项
### -o ro 只读挂载
### -o rw 读写挂载
### -o remount 重新挂载
  • 常用命令 ```shell

    fdisk

    分区工具

    -l 查看分区信息

    /dev/sdX 为某一个存储分区

mkfs

格式化命令

mkfs.ext4 格式化为ext4文件系统

mkfs.xfs 格式化为xfs文件系统

df 查看分区使用空间

du 查看文件夹使用空间

<a name="dwXhY"></a>
### lvm

- 分层
   - PV 物理卷
   - VG 卷组
   - LV 逻辑卷
- 常用命令
```shell
# pv
# pvcreate 建立pv
# pvs 查看pv

# vg
# vgcreate 建立vg
# vgs 查看vg

# lv
# lvcreate 建立lv
# lvs 查看lv
# lvextend 扩展lv

系统启动过程与故障修复

  • 启动过程简述
    • BIOS选择启动设备
    • MBR硬盘可引导扇区
    • GRUB 系统可引导工具
    • 内核
    • init或systemd
    • service或systemd服务
    • 启动tty等待用户登陆
  • 更新内核版本

    • RPM方式更新,安装速度快,没有最新版本
    • 源码编译方式更新,编译时间较长,可以用最新版本

      Shell篇

      BASH基础

  • Shell是命令解释器,翻译用户的命令给内核执行,并将结果返回给用户

  • BASH脚本作用
    • 组合系统命令实现自动化
    • 由基础命令组成脚本,不用深入掌握系统函数库
  • 内外部命令

    • 内部命令不会创建子进程,对子Shell无效
    • 外部命令会创建子进程

      管道与重定向

  • 管道符号 |

  • 重定向符号
    • < 输入重定向
    • 输出重定向,覆盖模式

    • 输出重定向,追加模式

  • sort 对文本进行排序
  • join 连接两个字符串

    进程与内存的查看与调整

    ```shell

    ps

    top

    查看进程信息

free

查看内存使用率

iftop

查看进程网络情况

sar

更详细的查看系统状态,用于排故

<a name="s6rZw"></a>
### 变量与环境变量

- 变量的定义
   - Shell变量无需声明,VAR=value
   - unset $VAR #销毁变量
- 环境变量
   - PATH
   - 命令解释路径
   - 配置文件
      - /etc/profile 系统环境变量默认保存文件
      - /etc/bashrc 当前shell初始化时默认配置文件
<a name="oSZz0"></a>
### 转义与引用

- 转义符号 /
- 引用符号
   - ''  所见即所得
   - "" 会解释里面的变量
<a name="K6BUH"></a>
### 循环

- while
   - 根据while判断结果决定是否执行
   - 判断的结果为命令的返回值,为0则循环继续
   - 如果结果一直为0 则无法结束循环,形成死循环
- for
   - 一般使用 for ... in 格式
   - 需要使用(( )) 包裹C语言格式
   - 支持break、continue循环控制
   - 支持嵌套
<a name="gRqGN"></a>
### 函数

- 函数是对重复利用的代码进行封装
- 定义格式 函数名(){}
- 使用时直接使用函数名即可调用
<a name="YPQj0"></a>
### 运算符

- 基本符号
   - +
   - -
   - *
   - /
   - %
- 弊端
   - 运算效率低
   - 不支持浮点运算
<a name="Z4yag"></a>
### 测试与判断

- test测试
   - [[  ]]
   - 文件测试 [[ -f name ]]
   - 数字比较 [[ $VAR gt 0 ]]
- if
   - 根据命令返回值判断真假
   - 支持if/else
   - 支持嵌套
- case
   - case分支一般作为if的补充
   - 分支结束符号 ;; 是 ;的转义形式
<a name="n2t4U"></a>
### 计划任务

- 一次性计划任务 at
- 周期性计划任务 cron
   - crontab -l
   - crontab -e
<a name="I4Hq6"></a>
## 文本操作篇
<a name="56iuj"></a>
### 正则表达式和文本搜索

- . 单个字符
- [xyz] 匹配xyz任意一个
- ^ 匹配行开始
- $ 匹配行结尾
- \ 转义特殊字符
- * 匹配任意次数
- + 匹配1次或多次
- ? 匹配0次或1次
- {m,n} 匹配出现次数
- |并列匹配
- () 分组
<a name="4Ijf0"></a>
### sed

- 基础
```shell
sed 'cmd' filename
sed -e 'cmd' -e 'cmd' filename
  • s 替换
  • d 删除
  • a 追加
  • i 插入
  • c 更改
  • n 下一步
  • r 读文件
  • w 写文件
  • q 退出
  • y 替换
  • p 打印
    • 高级
  • 多行命令
    • N 将多行追加到模式空间进行处理
    • D 删除多行模式空间第一个字符至第一个换行符,并返回到脚本开头执行
    • P 输出多行模式空间第一个字符至第一个换行符
  • 保持空间模式
    • h 将模式空间中的内容存储至保存空间,覆盖保存空间
    • H 将模式空间中的内容存储至保存空间,追加保存空间
    • g 将保存空间的内容存储至模式空间,覆盖模式空间
    • G 将保存空间的内容存储至模式空间,追加模式空间
    • x 交换模式空间和保存空间内容
  • 条件与分支
    • : 标签
    • t 测试命令,如果当前匹配地址的行进行了成功的替换,test命令转到标签处,没有标签则到结尾

      awk

  • 工作方式
    • BEGIN{} 用于预处理
    • {} 用于行处理
    • END{} 用于后处理
  • 运算符
    • 算术运算符
    • 关系运算符
    • 布尔运算符
  • 循环
    • while
    • for
    • break/continue
  • 函数
    • 算术函数
    • 随机函数
    • 字符串函数
  • 条件
    • if (条件)
    • 支持嵌套
    • 支持if/else
  • 系统变量
    • FS 字段分隔符
    • OFS 输出字段分隔符
    • RS 记录分隔符
    • ORS 输出记录分隔符

      性能优化实战

      常见性能指标及USE法分类

      CPU性能指标

      cpu.png

      内存性能指标

      mem.png

      I/O性能指标

      io.png

      网络性能指标

      net.png

      USE法分类

      Utilization Saturation and Errors,专门用于系统资源性能监控的分类方法
常见指标分类(USE法)
资源 类型 性能指标
CPU 使用率 CPU使用率
CPU 饱和度 运行队列长度或平均负载
CPU 错误数 硬件CPU错误数
内存 使用率 已用内存百分比或SWAP百分比
内存 饱和度 内存换页量
内存 错误数 内存失败分配或OOM
存储设备I/O 使用率 设备I/O时间百分比
存储设备I/O 饱和度 等待队列长度或延迟
存储设备I/O 错误数 I/O错误数
文件系统 使用率 已用容量百分比
文件系统 饱和度 已用容量百分比
文件系统 错误数 文件读写错误数
网络 使用率 带宽使用率
网络 饱和度 重传报文数
网络 错误数 网卡收发错误数、丢包数
文件描述符 使用率 已用文件描述符占比
连接跟踪 使用率 已用连接跟踪数占比
连接数 饱和度 TIME_WAIT状态连接数

常见性能工具

CPU性能工具

CPU性能工具
性能指标 性能工具 说明
平均负载 uptime、top
/proc/loadavg
top提供的比较全面
/proc/loadavg是数据源,用于监控
系统CPU使用率 vmstat、mpstat、top、sar
/proc/stat
vmstat、mpstat、top只可以动态查看,sar可以记录数据,/proc/stat是数据源,用于监控
进程CPU使用率 pidstat、top、ps、htop、atop top、ps可以排序,pidstat只显示使用了CPU的进程,htop、atop更直观
系统上下文切换 vmstat 上下文切换次数、不可中断状态进程数
进程上下文切换 pidstat 注意加上 -w选项
软中断 top、mpstat
/proc/softirqs
top提供软中断CPU使用率,mpstat和/proc/softirqs提供软中断在每个CPU上次数
硬中断 vmstat
/proc/intterrupts
vmstat提供总的中断次数
/proc/interrupts提供中断在每个CPU上次数
网络 dstat、sar、tcpdump dstat、sar提供总的网络收发情况,tcpdump抓包
I/O dstat、sar dstat、sar提供总体IO情况
CPU缓存 perf perf stat 、perf record
CPU数量 lscpu
/proc/cpuinfo
lscpu更直观
事件剖析 perf、火焰图、execsnoop perf和火焰图分析热点函数调用栈
execsnoop监测短时进程
动态追踪 ftrace、bcc、systemtap ftrace用来跟踪内核函数调用栈,bcc和systemtap用于跟踪内核或应用执行过程

内存性能工具

内存性能工具
性能指标 性能工具 说明
系统已用、可用、剩余内存 free、vmstat、sar
/proc/meminfo
free最简单、vmstat、sar更全面
/proc/meminfo是数据源,用于监控
进程虚拟内存、常驻内存、共享内存 ps、top、pidstat
/proc/PID/stat和status
ps和top最简单、pidstat需要添加-r选项
/proc/PID/stat和status是数据源,用于监控
进程内存分布 pmap
/proc/PID/maps
/proc/PID/maps是pmap的数据源
进程swap换出内存 top
/proc/PID/status
/proc/PID/status是top的数据源
进程缺页异常 ps、top、pidstat pidstat需要添加-r选项
系统换页情况 sar sar -B
缓存/缓冲区用量 free、vmstat、sar、cachestat vmstat最常用,cachestat需要bcc
缓存/缓冲区命中率 cachetop 需要bcc
swap已用和剩余空间 free、sar sar可以记录历史数据
swap换入换出 vmstat、sar sar可以记录历史数据
内存泄漏检测 memleak、valgrind memleak需要bcc、valgrind可以兼容旧版本内核
指定文件的缓存大小 pcstat 需要源码下载安装

文件系统和磁盘I/O性能工具

文件系统和磁盘I/O性能工具
性能指标 性能工具 说明
fs空间容量、使用量、剩余空间 df 详细可查帮助文档
info coreutils ‘df invocation’
索引节点容量、使用量、剩余量 df df -i
页缓存和可回收Slab缓存 vmstat、sar
/proc/meminfo
sar -r
/proc/meminfo是数据源、可用于监控
缓冲区 vmstat、sar
/proc/meminfo
sar -r
/proc/meminfo是数据源、可用于监控
目录项、fs、inode的缓存 slabtop
/proc/slabinfo
slabtop更直观
磁盘IO使用率、IOPS、吞吐量 iostat、dstat
/proc/diskstats
iostat最常用,注意使用iostat -d -x或 sar-d
/proc/diskstats是数据源、可用于监控
远程IO及IO延迟 pidstat、iotop pidstat -d
块设备IO事件跟踪 blktrace 需要跟blkparse配合使用
blktrace -d /dev/sda -o- | blkparse -i-
进程IO调用跟踪 strace、perf trace strace只跟踪单个进程、perf trace跟踪所有进程
进程/块设备IO大小跟踪 biosnoop、biotop 需要bcc
动态跟踪 ftrace、bcc、systemtap ftrace用来跟踪内核函数调用栈,bcc和systemtap用于跟踪内核或应用执行过程

网络性能工具

网络性能工具
性能指标 性能工具 说明
吞吐量(BPS) sar、nethogs、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
contrack可查看所有连接跟踪的相关信息
nf_conntrack_count查看连接跟踪数量
nf_conntrack_max限制了总的连接跟踪数量
路由 mtr、traceroute、route route查询路由表、
mrt、traceroute排查定位网络链路中的路由问题
DNS dig、nslookup 排查DNS问题
防火墙和NAT iptables 排查防火墙和NAT问题
网卡选项 ethtool 查看和配置网络接口的功能选项
网络抓包 tcpdump、wireshark tcpdump抓包、wireshark分析
动态追踪 ftrace、bcc、systemtap ftrace用来跟踪内核函数调用栈,bcc和systemtap用于跟踪内核或应用执行过程

根据指标找工具

CPU性能

CPU性能
性能指标 性能工具 说明
平均负载 uptime、top top提供的比较全面
系统CPU使用率 vmstat、mpstat、top、sar
/proc/stat
vmstat、mpstat、top只可以动态查看,sar可以记录数据,/proc/stat是数据源,用于监控
进程CPU使用率 pidstat、top、ps、htop、atop top、ps可以排序,pidstat只显示使用了CPU的进程,htop、atop更直观
系统上下文切换 vmstat 上下文切换次数、不可中断状态进程数
进程上下文切换 pidstat 注意加上 -w选项
软中断 top、mpstat
/proc/softirqs
top提供软中断CPU使用率,mpstat和/proc/softirqs提供软中断在每个CPU上次数
硬中断 vmstat
/proc/intterrupts
vmstat提供总的中断次数
/proc/interrupts提供中断在每个CPU上次数
网络 dstat、sar、tcpdump dstat、sar提供总的网络收发情况,tcpdump抓包
I/O dstat、sar dstat、sar提供总体IO情况
CPU数量 lscpu
/proc/cpuinfo
lscpu更直观
事件剖析 perf、火焰图、execsnoop perf和火焰图分析热点函数调用栈
execsnoop监测短时进程

内存性能

内存性能
性能指标 性能工具
系统已用、可用、剩余内存 free、vmstat、sar
/proc/meminfo
进程虚拟内存、常驻内存、共享内存 ps、top、pidstat
进程内存分布 pmap
进程swap换出内存 top
/proc/PID/status
进程缺页异常 ps、top、pidstat
系统换页情况 sar
缓存/缓冲区用量 free、vmstat、sar、cachestat
缓存/缓冲区命中率 cachetop
swap已用和剩余空间 free、sar
swap换入换出 vmstat、sar
内存泄漏检测 memleak、valgrind
指定文件的缓存大小 pcstat

文件系统和磁盘IO

文件系统和磁盘I/O性能
性能指标 性能工具 说明
fs空间容量、使用量、剩余空间 df 详细可查帮助文档
info coreutils ‘df invocation’
索引节点容量、使用量、剩余量 df df -i
页缓存和可回收Slab缓存 vmstat、sar
/proc/meminfo
sar -r
/proc/meminfo是数据源、可用于监控
缓冲区 vmstat、sar
/proc/meminfo
sar -r
/proc/meminfo是数据源、可用于监控
目录项、fs、inode的缓存 slabtop
/proc/slabinfo
slabtop更直观
磁盘IO使用率、IOPS、吞吐量 iostat、dstat
/proc/diskstats
iostat最常用,注意使用iostat -d -x或 sar-d
/proc/diskstats是数据源、可用于监控
远程IO及IO延迟 pidstat、iotop pidstat -d
块设备IO事件跟踪 blktrace 需要跟blkparse配合使用
blktrace -d /dev/sda -o- | blkparse -i-
进程IO调用跟踪 strace、perf trace strace只跟踪单个进程、perf trace跟踪所有进程
进程/块设备IO大小跟踪 biosnoop、biotop 需要bcc

网络性能

网络性能
性能指标 性能工具 说明
吞吐量(BPS) sar、nethogs、iftop 可分别查看网络接口、进程、IP地址的网络吞吐量
吞吐量(PPS) sar
/proc/net/dev
sar -n DEV
网络连接数 netstat 、ss ss速度更快
网络延迟 ping、hping3 ping基于ICMP、hping3基于TCP
连接跟踪数 conntrack contrack可查看所有连接跟踪的相关信息
路由 mtr、traceroute、route route查询路由表、
mrt、traceroute排查定位网络链路中的路由问题
DNS dig、nslookup 排查DNS问题
防火墙和NAT iptables 排查防火墙和NAT问题
网卡选项 ethtool 查看和配置网络接口的功能选项
网络抓包 tcpdump、wireshark tcpdump抓包、wireshark分析
动态追踪 ftrace、bcc、systemtap ftrace用来跟踪内核函数调用栈,bcc和systemtap用于跟踪内核或应用执行过程

根据工具找指标

CPU性能

根据工具查指标
性能工具 CPU性能指标
uptime 平均负载
top 平均负载、运行队列、整体CPU使用率、每个进程的状态和CPU使用率
htop top增强版、不同颜色区分更直观
atop CPU、内存、磁盘、网络各种资源的全面监控
vmstat 系统整体CPU使用率、上下文切换次数、中断次数、运行状态和不可中断状态进程数
mpstat 每个CPU的使用率和软中断次数
pidstata 进程和线程的CPU使用率、中断上下文切换次数
/proc/softirqs 软中断类型和在每个CPU上的累积中断次数
/proc/interrupts 硬中断类型和在每个CPU上的累积中断次数
ps 每个进程的状态和CPU使用率
pstree 进程的父子关系
dstat 系统整体的CPU使用率
sar 系统整体的CPU使用率、包括历史数据
starce 进程的系统调用
perf CPU性能事件剖析,如调用链分析、CPU缓存、CPU调度等
execsnoop 监控短时进程

内存性能

根据工具查指标
性能工具 内存性能指标
free
/proc/meminfo
系统已用、可用、剩余内存以及缓存和缓冲区的使用量
top、ps 进程虚拟、常驻、共享内存以及缺页异常
vmstat 系统剩余内存、缓存、缓冲区、换入、换出
sar 系统内存换页情况、内存使用率、缓存缓冲用量以及swap使用情况
cachestat 系统缓存和缓冲区的使用率
cachetop 系统缓存和缓冲区的命中率
slabtop slab缓存使用情况
/proc/PID/status 进程swap情况
pmap 进程地址空间和内存状态
valgrind 进程内错误检查器、检测内存初始化、泄漏、越界访问等内存错误
memleak 内存泄漏检测
pcstat 查看指定文件的缓存情况

文件系统和磁盘IO

根据工具查指标
性能工具 文件系统和磁盘IO性能指标
iostat IO使用率、IOPS、吞吐量、响应时间、IO平均大小、等待队列长度
pidstat 进程IO大小以及IO延迟
sar 磁盘IO使用率、IOPS、吞吐量以及响应时间
dstat 磁盘IO使用率、IOPS、吞吐量
iotop 按IO大小对进程排序
slabtop 目录项、索引节点、文件系统的缓存
/proc/slabinfo 目录项、索引节点、文件系统的缓存
/proc/meminfo 页缓存、和可回收slab缓存
/proc/diskstats 磁盘的IOPS、吞吐量以及延迟
/proc/PID/io 进程IOPS、IO大小、以及IO延迟
vmstat 缓存和缓冲区用量汇总
blktrace 跟踪块设备IO事件
biosnoop 根据进程的块设备IO大小
biotop 跟踪进程块IO并按IO大小排序
strace 跟踪进程IO的系统调用
perf 跟踪内核的IO事件
df 磁盘空间和索引节点的使用量和剩余量
mount 文件系统的挂载以及挂载参数
du 目录占用磁盘空间大小
tune2fs 显示和设置文件系统参数
hdparam 显示和设置磁盘参数

网络性能

根据工具查指标
性能工具 网络性能指标
ifconfig、ip 配置和查看网络接口
ss 查看网络连接数
sar 查看网络接口的网络收发情况
nethogs 查看进程的网络收发情况
iftop 查看IP的网络收发情况
ethtool 查看和配置网络接口
conntrack 查看和管理网络连接跟踪状况
dig、nslookup DNS解析问题
mtr、route、traceroute 查看路由并测试链接信息
ping、hping3 测试网络延迟
tcpdump 网络抓包
wireshark 分析网络包
iptables 配置和管理防火墙和NAT规则
perf 剖析内核协议的性能
bcc、systemtap 动态跟踪内核协议栈的行为

CPU性能分析一般步骤

cpu.png

内存性能分析一般步骤

mem.png

IO性能分析一般步骤

io.png

网络性能分析一般步骤

net.png

操作系统原理

操作系统工作流程

1.png

x86体系结构

x86.png

系统初始化

init.png
boot2.png
kernelboot.png

进程管理

pr.png

内存管理

mem.png

文件系统

fs.png

输入输出系统

ios.png

进程间通信

ipc.png
ipc2.png

网络通信

net.png