tag:blogger.com,1999:blog-4175284689069343938.post1006093332953933980..comments2023-06-30T06:38:53.282-07:00Comments on Linux, Devops etc: IO wait load tracking to a process.Unknownnoreply@blogger.comBlogger2125tag:blogger.com,1999:blog-4175284689069343938.post-32485096359569292832012-09-18T02:26:42.126-07:002012-09-18T02:26:42.126-07:00I wrote a small program:
-------------------------...I wrote a small program:<br />--------------------------------------<br />#!/usr/local/bin/perl<br /><br />use strict;<br /><br />sub usage<br />{<br /> warn("Usage:<br /> $0<br /> $0 {start|stop}<br />\n");<br /> exit 2;<br />}<br /><br />if (defined $ARGV[0] && $ARGV[0] ne ''){<br /> if ($ARGV[0] eq 'start'){<br /> my $cmd = 'echo 1 > /proc/sys/vm/block_dump';<br /> warn("Execute: $cmd\n");<br /> qx($cmd);<br /> }elsif ($ARGV[0] eq 'stop'){<br /> my $cmd = 'echo 0 > /proc/sys/vm/block_dump';<br /> warn("Execute: $cmd\n");<br /> qx($cmd);<br /> }else{<br /> &usage;<br /> }<br /> exit;<br /> ### NOT REACHED<br />}<br /><br />unless (open(FD, q(dmesg | egrep 'READ|WRITE|dirtied' | awk '{print $2}' | sort | uniq -c | sort -rn |))){<br /> die("Cannot open cmd: $!");<br />}<br /><br />my @p = ();<br />chomp(@p);<br />close(FD);<br /><br />my $i;<br />foreach my $f (@p){<br /> my $pid = $f;<br /> $pid =~ s/^.*\((\d+)\).*$/$1/;<br /> if (defined $pid && $pid =~ m/^\d+$/){<br /> #warn("kill -0 $pid\n");<br /> if (kill(0,$pid)){<br /> $pid = `ps -p $pid -o user,pid,ppid,stime,time| tail -1`;<br /> }else{<br /> $pid = "No process\n";<br /> }<br /> }else{<br /> $pid = "No PID\n";<br /> }<br /> printf("%-40s %s", $f, $pid);<br /> last if (++$i > 35);<br />}<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-4175284689069343938.post-70697328329046806932011-05-24T12:41:55.412-07:002011-05-24T12:41:55.412-07:00Thank you for posting this, I'm still debuggin...Thank you for posting this, I'm still debugging my iowait-problem but you got me a leap forward. Here is some awk magic to get the complete process names from dmesg:<br /><br />dmesg | awk '/READ|WRITE|dirtied/ {sub(/\(.*\):/,"",$2); print $2}' | sort | uniq -c | sort -rn | head<br /><br />Hajo Skwirblies[hjo]https://www.blogger.com/profile/15808851730850024238noreply@blogger.com