跳转至

Linux 测试

1 crontab 开启定时任务

  • 守护进程 cron 会读取 crontab 文件,定时的执行任务
  • 语法:crontab [ -u user ] [ -i ] { -e | -l | -r }
  • -u user: 指定要操作哪个用户的 crontab 文件,忽略时默认当前用户
  • -l: 显示 crontab 文件
  • -e: 编辑 crontab 文件
  • -r: 删除 crontab 文件
  • -i: 配合 -r 时显示确认 yes、no 选择
  • crontab 文件语法
  • * * * * * myCommand
    • 第 1 列分钟 0~59
    • 第 2 列小时 0~23(0 表示子夜)
    • 第 3 列日 1~31
    • 第 4 列月 1~12
    • 第 5 列星期 0~7(0 和 7 表示星期天)
    • 第 6 列要运行的命令
    • myCommand: 要执行的命令或脚本
# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │                          或者是 sun,mon,tue,web,thu,fri,sat
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
  • 示例:3,15 8-11 * * 1 /bin/bash /home/shw/shell/crontab/task.sh 表示每周一上午 8 点到 11 点的第 3 和第 15 分钟执行命令脚本

2 Linux 模拟网络丢包与延迟

3 nmon 系统资源监控工具

4 iftop 监控网络流量

4.1 命令行参数解释

  • -i interface: 指定要监控的网卡接口
  • -B: 以 byte 而不是 bit 作为单位 (默认 bit)
  • -b: 不显示流量条型图
  • -n: 显示 ip,而不是 hostname
  • -P: 显示端口信息

4.2 交互命令解释

  1. 按键t: 切换主机接收和发送显示的模式:两行显示、一行显示、只显示发送流量、只显示发送流量;
  2. 按键n: 切换显示 hostname 和 ip
  3. 按键p: 切换是否显示 port
  4. 按键b: 切换是否显示流量条型图
  5. 按键q: 退出

4.3 输出信息解释

5 fio 读写 io 性能测试工具

5.1 fio 参数选项

5.1.1 I/O type

  • direct=bool: 默认 true;当 true 时,不使用系统缓存,同 Linux 下 O_DIRECT。
  • buffered=bool: 默认 false;与 direct 相反;
  • readwrite=str 或 rw=str: 执行 IO 方式,可选值如下
  • read: 顺序读
  • write: 顺序 xie
  • randread: 随机读
  • randwrite: 随机写
  • rw 或 readwrite: 顺序读写
  • randrw: 随机读写
  • trim:
  • trimwrite:

5.1.2 Block size

  • blocksize=int[,int][,int] 或 bs=int[,int][,int]: 设置 blocksize,指定大小,默认 4096
  • bs=256k:means 256k for reads, writes and trims.
  • bs=8k,32k;means 8k for reads, 32k for writes and trims.
  • bs=8k,32k,:means 8k for reads, 32k for writes, and default for trims.
  • bs=,8k:means default for reads, 8k for writes and trims.
  • bs=,8k,:means default for reads, 8k for writes, and default for trims.
  • blocksize_range=irange[,irange][,irange] 或 bsrange=irange[,irange][,irange]: 设置 blocksize,指定大小区间,实际的 blocksize 一定是最小值的整数倍,逗号分割规则同 blocksize
  • bsrange=1k-4k,2k-8k:

5.1.3 I/O size

  • size=int: 每一个 job(线程)文件 io 总大小(注意是每一个线程),单个文件大小等于 nrfiles/size
  • filesize=irange(int): 设置单个文件的大小,可以给定一个区间

5.1.4 I/O engine

io 引擎作用是使用哪种 io 类型去执行 io 操作,比如同步 psync、异步 libaio。

  • 参考 (https://fio.readthedocs.io/en/latest/fio_doc.html#i-o-engine)
  • ioengine=str:io 方式
  • psync:Basic pread(2) or pwrite(2) I/O. Default on all supported operating systems except for Windows.
  • sync:Basic read(2) or write(2) I/O. lseek(2) is used to position the I/O location. See fsync and fdatasync for syncing write I/Os.
  • libaio:Linux native asynchronous I/O. Note that Linux may only support queued behavior with non-buffered I/O (set direct=1 or buffered=0). This engine defines engine specific options.
  • mmap:File is memory mapped with mmap(2) and data copied to/from using memcpy(3).
  • ...

5.1.5 I/O depth

io 深度用于异步 io(如 libaio),且 direct=1(即不通过系统缓存)是才有效。对应每一块设备,depth 都有一个最优值,并不是 depth 越大越好。 - iodepth=int: 设置 io 深度,默认 1

5.1.6 file、directory

  • directory=str: 设置文件生成的目录
  • filename=str: 设置文件名前缀(默认是 job name + thread number + file number)
  • name: 设置 job 的名称
  • nrfiles=int: 每一个 job(线程)文件数,单个文件大小可以由 size/nrfiles 计算
  • openfiles=int: 同时打开文件的数量,默认等于 nrfiles,通常设置为 1
  • unlink=bool: 执行完 job 后是否删除测试文件

5.1.7 thread、process、job

  • thread:fio 默认使用 fork 创建进程,此选项在 linux 下会采用 pthread_create 常见线程
  • nice=int: 设置进程的优先级,同 linux 下 nice
  • prio=int: 设置当前 job 的 io 的优先级,同 linux 下 ionice,范围 0-7,linux 下默认 4
  • group_reporting: 按 group 输出测试信息,如果没有此参数,默认是以 job(线程)为单位输出信息,这样在多 job 情况下,可读性差

5.2 数据校验

不能在仅仅read操作下使用,需要在rw,write操作下执行。
  • verify=str :str 是校验类型,包括 md5 , crc32, sha256

5.3 命令行设置参数

  • --output=filename:fio 执行的输出信息到文件,而不是控制台

5.4 fio 参数 type 和 unit

5.4.1 时间单位

时间单位默认是秒 s,且不区分大小写 - D or d – means days - H or h– means hours - M or m – means minutes - s or sec means seconds (default) - ms or msec means milliseconds - us or usec means microseconds

5.4.2 大小单位

fio 可以通过 kb_base 来设置采用 1000 或 1024 作为 kb 基数; - kb_base=int: 设置按 1000 或 1024 来解释 k,默认是 1024 - 当 kb_base=1000 时: - K – means kilo (K) or 1000 - M – means mega (M) or $1000^2$ - G – means giga (G) or $1000^3$ - T – means tera (T) or $1000^4$ - P – means peta (P) or $1000^5$ - 当 kb_base=1024 时: - Ki – means kibi (Ki) or 1024 - Mi – means mebi (Mi) or $1024^2$ - Gi – means gibi (Gi) or $1024^3$ - Ti – means tebi (Ti) or $1024^4$ - Pi – means pebi (Pi) or $1024^5$ - 示例

Examples with kb_base=1000:

4 KiB: 4096, 4096b, 4096B, 4ki, 4kib, 4kiB, 4Ki, 4KiB
1 MiB: 1048576, 1mi, 1024ki
1 MB: 1000000, 1m, 1000k
1 TiB: 1099511627776, 1ti, 1024gi, 1048576mi
1 TB: 1000000000, 1t, 1000m, 1000000k

Examples with kb_base=1024 (default):

4 KiB: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB
1 MiB: 1048576, 1m, 1024k
1 MB: 1000000, 1mi, 1000ki
1 TiB: 1099511627776, 1t, 1024g, 1048576m
1 TB: 1000000000, 1ti, 1000mi, 1000000ki

5.4.3 bool 类型

bool 可选值有: - true or 1:表示真 - false or 0:表示假

5.5 fio 配置文件

fio 文件基本格式如下,[global] 表示多个 job 共享的参数

; -- start job file --
[global]
rw=randread
size=128m

[job1]

[job2]

; -- end job file --
  • 参数如下:
  • stonewall: 指示等待上一个 job 完成后,才执行当前 job。(默认多个 job 同时执行)
  • exitall: 当多个 job 同时工作时,只要有一个 job 完成了,就会终止所有 job。(默认是继续执行)

5.5.1 注释

行首是 ;# 时,表示这行是注释;如:#注释行;注释行

5.5.2 示例

[global]
ioengine=psync
direct=1
group_reporting
runtime=300
openfiles=1
iodepth=1
file_service_type=sequential

size=3000M
nrfiles=1000
rw=write
bs=4K

[4K-write-psync-3000M-1-1]
name=fio_write_4K1_1
numjobs=8
directory=/fiotest/4K_3M

[4K-write-psync-3000M-1-2]
name=fio_write_4K1_2
numjobs=8
directory=/fiotest/4K_3M_2

[4K-write-psync-3000M-1-3]
name=fio_write_4K1_3
numjobs=8
directory=/fiotest/4K_3M_3
stonewall

[4K-write-psync-3000M-1-4]
name=fio_write_4K1_4
numjobs=8
directory=/fiotest/4K_3M_4