straceコマンド
概要
プロセスの調査などに使える。
プロセスが呼び出すシステムコールをトレースすることができる。
その内容を確認することで、エラー箇所の確認やプロセスの状況(ハング等)の判断材料とすることができる。
プロセスが呼び出すシステムコールをトレースすることができる。
その内容を確認することで、エラー箇所の確認やプロセスの状況(ハング等)の判断材料とすることができる。
使い方
strace (command)
strace -p (対象プロセスID)
strace -p (対象プロセスID)
使用例
– コマンドのシステムコールをトレース
# strace ls -l
# strace ls -l
– プロセスのシステムコールをトレース
# strace -f -p (対象プロセスID) -o /tmp/strace_log_201508050000.log
# strace -f -p (対象プロセスID) -o /tmp/strace_log_201508050000.log
表示例
# strace lsexecve("/bin/ls", ["ls"], [/* 22 vars */]) = 0brk(0) = 0x239e000mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2e354b5000access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)open("/etc/ld.so.cache", O_RDONLY) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=36014, ...}) = 0mmap(NULL, 36014, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2e354ac000close(3) = 0open("/lib64/libselinux.so.1", O_RDONLY) = 3read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0PX\300\2011\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=124624, ...}) = 0mmap(0x3181c00000, 2221912, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3181c00000mprotect(0x3181c1d000, 2093056, PROT_NONE) = 0mmap(0x3181e1c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c000) = 0x3181e1c000mmap(0x3181e1e000, 1880, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x3181e1e000close(3) = 0open("/lib64/librt.so.1", O_RDONLY) = 3read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@!\200\2011\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=47112, ...}) = 0mmap(0x3181800000, 2128816, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3181800000mprotect(0x3181807000, 2093056, PROT_NONE) = 0mmap(0x3181a06000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x3181a06000close(3) = 0open("/lib64/libcap.so.2", O_RDONLY) = 3read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\23\300\2031\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=19016, ...}) = 0mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2e354ab000mmap(0x3183c00000, 2111776, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3183c00000mprotect(0x3183c04000, 2093056, PROT_NONE) = 0mmap(0x3183e03000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x3183e03000close(3) = 0open("/lib64/libacl.so.1", O_RDONLY) = 3read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\36@\2031\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=33816, ...}) = 0mmap(0x3183400000, 2126416, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3183400000mprotect(0x3183407000, 2093056, PROT_NONE) = 0mmap(0x3183606000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x3183606000close(3) = 0open("/lib64/libc.so.6", O_RDONLY) = 3read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\356A\2001\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=1926760, ...}) = 0mmap(0x3180400000, 3750152, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3180400000mprotect(0x318058a000, 2097152, PROT_NONE) = 0mmap(0x318078a000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x18a000) = 0x318078a000mmap(0x318078f000, 18696, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x318078f000close(3) = 0open("/lib64/libdl.so.2", O_RDONLY) = 3read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\r\300\2001\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=22536, ...}) = 0mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2e354aa000mmap(0x3180c00000, 2109696, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3180c00000mprotect(0x3180c02000, 2097152, PROT_NONE) = 0mmap(0x3180e02000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x3180e02000close(3) = 0open("/lib64/libpthread.so.0", O_RDONLY) = 3read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340]\200\2001\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=145896, ...}) = 0mmap(0x3180800000, 2212848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3180800000mprotect(0x3180817000, 2097152, PROT_NONE) = 0mmap(0x3180a17000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x3180a17000mmap(0x3180a19000, 13296, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x3180a19000close(3) = 0open("/lib64/libattr.so.1", O_RDONLY) = 3read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\23@\2051\0\0\0"..., 832) = 832fstat(3, {st_mode=S_IFREG|0755, st_size=21152, ...}) = 0mmap(0x3185400000, 2113888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3185400000mprotect(0x3185404000, 2093056, PROT_NONE) = 0mmap(0x3185603000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x3185603000close(3) = 0mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2e354a9000mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2e354a7000arch_prctl(ARCH_SET_FS, 0x7f2e354a77a0) = 0mprotect(0x3181e1c000, 4096, PROT_READ) = 0mprotect(0x3181a06000, 4096, PROT_READ) = 0mprotect(0x3183606000, 4096, PROT_READ) = 0mprotect(0x318078a000, 16384, PROT_READ) = 0mprotect(0x3180e02000, 4096, PROT_READ) = 0mprotect(0x318021f000, 4096, PROT_READ) = 0mprotect(0x3180a17000, 4096, PROT_READ) = 0mprotect(0x3185603000, 4096, PROT_READ) = 0munmap(0x7f2e354ac000, 36014) = 0set_tid_address(0x7f2e354a7a70) = 3164set_robust_list(0x7f2e354a7a80, 0x18) = 0futex(0x7fffc4c2a27c, FUTEX_WAKE_PRIVATE, 1) = 0futex(0x7fffc4c2a27c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7f2e354a77a0) = -1 EAGAIN (Resource temporarily unavailable)rt_sigaction(SIGRTMIN, {0x3180805c60, [], SA_RESTORER|SA_SIGINFO, 0x318080f710}, NULL, 8) = 0rt_sigaction(SIGRT_1, {0x3180805cf0, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x318080f710}, NULL, 8) = 0rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0getrlimit(RLIMIT_STACK, {rlim_cur=10240*1024, rlim_max=RLIM_INFINITY}) = 0statfs("/selinux", {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=51026379, f_bfree=46916420, f_bavail=44324408, f_files=12967936, f_ffree=12741645, f_fsid={2135385419, -447885984}, f_namelen=255, f_frsize=4096}) = 0brk(0) = 0x239e000brk(0x23bf000) = 0x23bf000open("/proc/filesystems", O_RDONLY) = 3fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2e354b4000read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tb"..., 1024) = 304read(3, "", 1024) = 0close(3) = 0munmap(0x7f2e354b4000, 4096) = 0open("/usr/lib/locale/locale-archive", O_RDONLY) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=99154480, ...}) = 0mmap(NULL, 99154480, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2e2f617000close(3) = 0ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0ioctl(1, TIOCGWINSZ, {ws_row=70, ws_col=118, ws_xpixel=736, ws_ypixel=960}) = 0open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3fcntl(3, F_GETFD) = 0x1 (flags FD_CLOEXEC)getdents(3, /* 3 entries */, 32768) = 80getdents(3, /* 0 entries */, 32768) = 0close(3) = 0fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2e354b4000write(1, "test.txt\n", 9test.txt) = 9close(1) = 0munmap(0x7f2e354b4000, 4096) = 0close(2) = 0exit_group(0) = ? |
取り急ぎは、上記コマンドでトレースは可能。
不足の場合は、manを見ること。
不足の場合は、manを見ること。