Linux 性能分析工具 strace

strace 命令示例,详细使用说明请参考 man strace

# strace ls
execve("/usr/bin/ls", ["ls"], 0x7ffe75aa9350 /* 12 vars */) = 0
brk(NULL) = 0x556c51ed9000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffc20fecaf0) = -1 EINVAL (Invalid argument)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2b1b0a2000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=34211, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 34211, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2b1b099000
close(3) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
...

strace 跟踪输出中包含

  • Syscall Name ,如 execveopenat
  • Arguments , 系统调用使用的参数,如 "/usr/bin/ls"AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC
  • Return Value ,系统调用的返回值以及简要说明信息, 如 = -1 EINVAL (Invalid argument)-1 ENOENT (No such file or directory)= 0

strace 命令常用选项

选项 说明 示例
-o filename
--output=filename
将跟踪内容写入指定文件而不是 STDOUT(默认值)
-p pid
--attach=pid
追踪 PIDs 对应的进程,Ctrl + C 结束追踪。 支持 , 、 空格 ( ) 、 TAB 键( \t )分割的多个 PID
-e expr 追踪表达式匹配的系统调用,表达式语法请参考 man strace
-c
--summary-only
仅输出调用的统计数据,不输出常规跟踪内容
-C
--summary
输出常规跟踪内容后,输出统计信息