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 模拟网络丢包与延迟¶
- 参考资料
- 准备工具
tc
工具netem
3 nmon 系统资源监控工具¶
4 iftop 监控网络流量¶
4.1 命令行参数解释¶
-i interface
: 指定要监控的网卡接口-B
: 以 byte 而不是 bit 作为单位 (默认 bit)-b
: 不显示流量条型图-n
: 显示 ip,而不是 hostname-P
: 显示端口信息
4.2 交互命令解释¶
按键t
: 切换主机接收和发送显示的模式:两行显示、一行显示、只显示发送流量、只显示发送流量;按键n
: 切换显示 hostname 和 ip按键p
: 切换是否显示 port按键b
: 切换是否显示流量条型图按键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
: 顺序 xierandread
: 随机读randwrite
: 随机写rw 或 readwrite
: 顺序读写randrw
: 随机读写trim
:trimwrite
:
5.1.2 Block size¶
blocksize=int[,int][,int] 或 bs=int[,int][,int]
: 设置 blocksize,指定大小,默认 4096bs=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 一定是最小值的整数倍,逗号分割规则同 blocksizebsrange=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,通常设置为 1unlink=bool
: 执行完 job 后是否删除测试文件
5.1.7 thread、process、job¶
thread
:fio 默认使用 fork 创建进程,此选项在 linux 下会采用 pthread_create 常见线程nice=int
: 设置进程的优先级,同 linux 下 niceprio=int
: 设置当前 job 的 io 的优先级,同 linux 下 ionice,范围 0-7,linux 下默认 4group_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