iostat for process names
Problem
We want to know which processes are doing the most IO on the system.
Script
global reads, writes, total_io probe kernel.function("vfs_read") { reads[execname()] += $count } probe kernel.function("vfs_write") { writes[execname()] += $count } # print top 10 IO processes every 5 seconds probe timer.s(5) { foreach (name in writes) total_io[name] += writes[name] foreach (name in reads) total_io[name] += reads[name] printf ("%16s\t%10s\t%10s\n", "Process", "KB Read", "KB Written") foreach (name in total_io- limit 10) printf("%16s\t%10d\t%10d\n", name, reads[name]/1024, writes[name]/1024) delete reads delete writes delete total_io print("\n") }
Output
Process KB Read KB Written Xvnc 16831 3 grep 5754 3 sort 2046 0 xterm 718 19 twm 610 15 vncserver 153 0 sshd 128 0 bash 52 0 cat 33 0 yast 29 0
This script is based on SystemTap High-level presentation from Linux World San Francisco August 2006