A Micro Toolbox

ソフトウェアのニッチな問題の対処記録です

vmstatの出力に時刻を付けてファイル保存(ミリ秒)

Linuxでvmstatの1行ごとに時刻を付けるときにミリ秒まで入れる。

$ vmstat 3 | ruby -ne 'print Time.now.strftime("%X.%3N #{$_}"); STDOUT.flush' | tee vmstat_log.txt
18:44:25.141 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
18:44:25.141  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
18:44:25.141  1  0      0 23715472 133952 2093676    0    0    12   166   34  170  5  1 94  0  0
18:44:27.991  0  0      0 23699344 133952 2093664    0    0     0     0  195 1590  0  0 100  0  0

straceやinotifywaitにも使える。

$ strace sleep 3 |& ruby -ne 'print Time.now.strftime("%X.%3N #{$_}"); STDOUT.flush' | tee trace_sleep3.txt
16:55:38.939 execve("/usr/bin/sleep", ["sleep", "3"], 0x7ffeaad126a8 /* 29 vars */) = 0
16:55:38.939 brk(NULL)                               = 0x55df60aa7000
16:55:38.939 arch_prctl(0x3001 /* ARCH_??? */, 0x7fff72025b60) = -1 EINVAL (Invalid argument)
16:55:38.939 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff2c632a000
16:55:38.939 access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
16:55:38.939 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
16:55:38.939 newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=23031, ...}, AT_EMPTY_PATH) = 0
16:55:38.939 mmap(NULL, 23031, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7ff2c6324000
16:55:38.939 close(3)                                = 0
16:55:38.939 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
16:55:38.939 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\237\2\0\0\0\0\0"..., 832) = 832
16:55:38.939 pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
16:55:38.939 pread64(3, "\4\0\0\0 \0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0"..., 48, 848) = 48
16:55:38.939 pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0i8\235HZ\227\223\333\350s\360\352,\223\340."..., 68, 896) = 68
16:55:38.939 newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=2216304, ...}, AT_EMPTY_PATH) = 0
16:55:38.939 pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
16:55:38.939 mmap(NULL, 2260560, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ff2c60fc000
16:55:38.939 mmap(0x7ff2c6124000, 1658880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x28000) = 0x7ff2c6124000
16:55:38.939 mmap(0x7ff2c62b9000, 360448, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bd000) = 0x7ff2c62b9000
16:55:38.939 mmap(0x7ff2c6311000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x214000) = 0x7ff2c6311000
16:55:38.939 mmap(0x7ff2c6317000, 52816, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff2c6317000
16:55:38.939 close(3)                                = 0
16:55:38.939 mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff2c60f9000
16:55:38.939 arch_prctl(ARCH_SET_FS, 0x7ff2c60f9740) = 0
16:55:38.939 set_tid_address(0x7ff2c60f9a10)         = 26285
16:55:38.939 set_robust_list(0x7ff2c60f9a20, 24)     = 0
16:55:38.939 rseq(0x7ff2c60fa0e0, 0x20, 0, 0x53053053) = 0
16:55:38.939 mprotect(0x7ff2c6311000, 16384, PROT_READ) = 0
16:55:38.939 mprotect(0x55df60214000, 4096, PROT_READ) = 0
16:55:38.939 mprotect(0x7ff2c6364000, 8192, PROT_READ) = 0
16:55:38.939 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
16:55:38.939 munmap(0x7ff2c6324000, 23031)           = 0
16:55:38.939 getrandom("\x7e\xdb\x66\x5e\x19\x12\x13\x89", 8, GRND_NONBLOCK) = 8
16:55:38.939 brk(NULL)                               = 0x55df60aa7000
16:55:38.939 brk(0x55df60ac8000)                     = 0x55df60ac8000
16:55:38.939 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
16:55:38.939 newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=5712208, ...}, AT_EMPTY_PATH) = 0
16:55:38.939 mmap(NULL, 5712208, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7ff2c5b86000
16:55:38.939 close(3)                                = 0
16:55:41.785 clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=3, tv_nsec=0}, 0x7fff72025bb0) = 0
16:55:41.786 close(1)                                = 0
16:55:41.786 close(2)                                = 0
16:55:41.787 exit_group(0)                           = ?
16:55:41.788 +++ exited with 0 +++
$

秒単位よりもう少し細かいタイミングが欲しいときに。