跳转至

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:要执行的命令或脚本
  • 示例: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 命令行设置参数

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

5.3 fio参数type和unit

5.3.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.3.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.3.3 bool类型

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

5.4 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.4.1 注释

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

5.4.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