# 进程测试
# time
time <command> # 执行一条命令,并统计其占用的 CPU 时长
- 例:
[[email protected] ~]# time sleep 1 real 0m1.001s user 0m0.001s sys 0m0.000s
- real time :该命令实际的运行时长。
- user time :该命令占用的用户态 CPU 时长。
- sys time :该命令占用的内核态 CPU 时长。
- user time 、sys time 是 CPU 多核的累计值,因此可认为该命令的
占用 CPU 核数 = ( user + sys ) / real
。
# timeout
timeout <duration> <command> # 以子进程的形式执行一条命令,并限制其运行时长,超时之后则终止命令
-s <signal> # --signal ,超时时发送的信号,默认为 SIGTERM
-k <duration> # --kill-after ,发送 signal 信号之后,最多等待 duration 时长,如果进程依然运行,则发送 SIGKILL 信号
--preserve-status # 如果超时,timeout 命令的退出码默认为 124 。启用该参数,则会让退出码与目标命令一致
- duration 是浮点数,单位可以是 s、m、h、d ,默认为 s 即秒。
- 如果设置为 0 ,则不限制。
- 如果目标命令在 duration 之前结束,则 timeout 命令的退出码与该命令一致。
- 例:
timeout 3.5s ping localhost
# strace
strace <command> # 执行一条命令并跟踪它
-c # 统计每种系统调用的次数、用时
-e read,write,open # 只显示某些系统调用的信息
-e trace=file # 只显示某类系统调用的信息
-tt # 在每行的开头显示时间
-T # 在每行的末尾显示这次系统调用的耗时,比如<0.000007>
strace -p <pid> # 跟踪一个进程
- 例:
[[email protected] ~]# strace -e trace=file echo hello execve("/usr/bin/echo", ["echo", "hello"], [/* 22 vars */]) = 0 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 hello +++ exited with 0 +++
# watch
watch <command> # 周期性地执行一条命令,显示其 stdout 和 stderr
-d # 如果输出与上一次执行不同,则将差异部分高亮显示
-e # 如果命令的返回码不为 0 ,则停止执行
-n 2 # 每隔几秒执行一次(默认是 2 秒)
-t # 不显示 watch 窗口的标题
- 例:
watch -d -n 1 ping localhost