日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 找出耗io的,linux根据io消耗找进程

發布時間:2025/3/20 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 找出耗io的,linux根据io消耗找进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本方法通過perl腳本對io情況進行實時抓取,非常方便。

perl腳本下載:

wget http://aspersa.googlecode.com/svn/trunk/iodump

可將該腳本命名為iodump.sh,內容如下:

=pod

=head1 NAME

iodump - Compute per-PID I/O stats for Linux when iotop/pidstat/iopp are not available.

=head1 SYNOPSIS

Prepare the system:

dmesg -c

/etc/init.d/klogd stop

echo 1 > /proc/sys/vm/block_dump

Start the reporting:

while true; do sleep 1; dmesg -c; done | perl iodump

CTRL-C

Stop the system from dumping these messages:

echo 0 > /proc/sys/vm/block_dump

/etc/init.d/klogd start

=head1 AUTHOR

Baron Schwartz

=cut

use strict;

use warnings FATAL => 'all';

use English qw(-no_match_vars);

use sigtrap qw(handler finish untrapped normal-signals);

my %tasks;

my $oktorun = 1;

my $line;

while ( $oktorun && (defined ($line = <>)) ) {

my ( $task, $pid, $activity, $where, $device );

( $task, $pid, $activity, $where, $device )

= $line =~ m/(\S+)\((\d+)\): (READ|WRITE) block (\d+) on (\S+)/;

if ( !$task ) {

( $task, $pid, $activity, $where, $device )

= $line =~ m/(\S+)\((\d+)\): (dirtied) inode \(.*?\) (\d+) on (\S+)/;

}

if ( $task ) {

my $s = $tasks{$pid} ||= { pid => $pid, task => $task };

++$s->{lc $activity};

++$s->{activity};

++$s->{devices}->{$device};

}

}

printf("%-15s %10s %10s %10s %10s %10s %s\n",

qw(TASK PID TOTAL READ WRITE DIRTY DEVICES));

foreach my $task (

reverse sort { $a->{activity} <=> $b->{activity} } values %tasks

) {

printf("%-15s %10d %10d %10d %10d %10d %s\n",

$task->{task}, $task->{pid},

($task->{'activity'} || 0),

($task->{'read'} || 0),

($task->{'write'} || 0),

($task->{'dirty'} || 0),

join(', ', keys %{$task->{devices}}));

}

sub finish {

my ( $signal ) = @_;

if ( $oktorun ) {

print STDERR "# Caught SIG$signal.\n";

$oktorun = 0;

}

else {

print STDERR "# Exiting on SIG$signal.\n";

exit(1);

}

}

給執行權限

# chmod +x /root/iodump.sh

執行腳本

# while true; do sleep 1; dmesg -c; done | perl /root/iodump.sh

等待一段時間,然后通過ctrl+c來結束腳本,就可以得到詳細的進程對應io信息。

如:

# while true; do sleep 1; dmesg -c; done | perl /root/iodump.sh

# Caught SIGINT.

TASK ? ? ? ? ? ? ? ? ? PID ? ? ?TOTAL ? ? ? READ ? ? ?WRITE ? ? ?DIRTY DEVICES

oracle ? ? ? ? ? ? ? 10941 ? ? ? 9645 ? ? ? 9645 ? ? ? ? ?0 ? ? ? ? ?0 sdb1

oracle ? ? ? ? ? ? ? 25019 ? ? ? 1726 ? ? ? ? 10 ? ? ? 1716 ? ? ? ? ?0 sdb1

oracle ? ? ? ? ? ? ? 10552 ? ? ? ?970 ? ? ? ?272 ? ? ? ?698 ? ? ? ? ?0 sdb1

kjournald ? ? ? ? ? ? 6356 ? ? ? ?613 ? ? ? ? ?0 ? ? ? ?613 ? ? ? ? ?0 sdb1

kjournald ? ? ? ? ? ? 2601 ? ? ? ?487 ? ? ? ? ?0 ? ? ? ?487 ? ? ? ? ?0 sda3

oracle ? ? ? ? ? ? ? 26100 ? ? ? ?415 ? ? ? ?415 ? ? ? ? ?0 ? ? ? ? ?0 sdb1

pdflush ? ? ? ? ? ? ? 1502 ? ? ? ?301 ? ? ? ? ?0 ? ? ? ?301 ? ? ? ? ?0 sdb1, sda3

oracle ? ? ? ? ? ? ? 10554 ? ? ? ?132 ? ? ? ? 33 ? ? ? ? 99 ? ? ? ? ?0 sdb1

oracle ? ? ? ? ? ? ? 26265 ? ? ? ? 55 ? ? ? ? 54 ? ? ? ? ?1 ? ? ? ? ?0 sdb1

oracle ? ? ? ? ? ? ? 10550 ? ? ? ? 14 ? ? ? ? ?0 ? ? ? ? 14 ? ? ? ? ?0 sdb1

oracle ? ? ? ? ? ? ? 10548 ? ? ? ? 12 ? ? ? ? ?0 ? ? ? ? 12 ? ? ? ? ?0 sdb1

oracle ? ? ? ? ? ? ? 10542 ? ? ? ? ?6 ? ? ? ? ?0 ? ? ? ? ?6 ? ? ? ? ?0 sdb1

oracle ? ? ? ? ? ? ? 10546 ? ? ? ? ?6 ? ? ? ? ?0 ? ? ? ? ?6 ? ? ? ? ?0 sdb1

oracle ? ? ? ? ? ? ? 10544 ? ? ? ? ?6 ? ? ? ? ?0 ? ? ? ? ?6 ? ? ? ? ?0 sdb1

oracle ? ? ? ? ? ? ? 10540 ? ? ? ? ?5 ? ? ? ? ?0 ? ? ? ? ?5 ? ? ? ? ?0 sdb1

參考:

總結

以上是生活随笔為你收集整理的linux 找出耗io的,linux根据io消耗找进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。