你只需要除以正在共享此虛擬內存區域進程的數量Swap
值。
其實,我沒有找到如何獲取進程共享VMA的數量。但是,有時可以通過RSS
和PSS
來計算。當然,只有在PSS != 0
的情況下才有效。
Finaly,您可以使用此Perl代碼(通過smap
文件作爲參數):
#!/usr/bin/perl -w
my ($rss, $pss);
my $total = 0;
while(<>) {
$rss = $1 if /Rss: *([0-9]*) kB/;
$pss = $1 if /Pss: *([0-9]*) kB/;
if (/Swap: *([0-9]*) kB/) {
my $swap = $1;
if ($swap != 0) {
if ($pss == 0) {
print "Cannot get number of process using this VMA\n";
} else {
my $swap = $swap * $rss/$pss;
print "P-swap: $swap\n";
}
$total += $swap;
}
}
}
print "Total P-Swap: $total kB\n"
你認爲它可能是有用的你的目的來分析'top'或'htop'的輸出?他們似乎有很多關於'swap'和共享內存使用的選項...... – Hastur 2014-12-15 07:58:08
我不認爲top或htop提供了我需要的具體信息(比例交換)。 – 2014-12-17 14:09:26
嘗試在http://superuser.com/ – 2014-12-22 10:49:28