LINUX.ORG.RU
решено ФорумAdmin

Как узнать, сколько места в свопе занимают файлы из tmpfs?

 ,


2

2

Потребление свопа программами посмотреть просто: достаточно запустить, например, smem -s swap, или своим скриптом распарсить /proc/$PID/smaps интересующих процессов и просуммировать засвопленное.

Но в моём случае smem -s swap показывает нули, и своп, по всей видимости, потребляют файлы из tmpfs (идёт расчёт и их там много). Есть ли какой-то способ получить статистику, какие файлы и по скольку занимают в свопе? Будет достаточно наводки на файлы из /proc или /sys, которые можно самому распарсить, если таковые имеются.

UPD: Пока я заметил, что у tmpfs при вытеснении файлов в своп уменьшается Used в df, так что можно отследить общую сумму. Неа, показалось

★★★★★

Последнее исправление: annulen (всего исправлений: 3)

Придумал такой костыль: мапить файл в левый процесс, после чего смотреть Swap в /proc/PID/smaps. Демонстрация технологии:

#!/usr/bin/env perl

use File::Spec;
use Sys::Mmap;

use strict;
use warnings;

my $filename = shift @ARGV;
open my $fh, '<', $filename or die "Failed to open file '$filename': $!";
mmap my $mh, 0, PROT_READ, MAP_SHARED, $fh or die "Failed mmap: $!";

$filename = File::Spec->rel2abs($filename);

open my $smaps, '<', "/proc/$$/smaps";
my $curObject;
my $swapped = 0;
while (<$smaps>) {
    my @F = split ' ';
    if (@F == 6) {
        $curObject = $F[5];
    }
    if ($curObject eq $filename && $F[0] eq 'Swap:') {
        print "$curObject found\n";
        $swapped += $F[1];
    }
}
print "$filename swapped $swapped kB\n";
$ ./mmap.pl /home/scratch/cfour_w9_4ring.mp2.nmr_IIII 
/home/scratch/cfour_w9_4ring.mp2.nmr_IIII found
/home/scratch/cfour_w9_4ring.mp2.nmr_IIII swapped 4194296 kB
annulen ★★★★★
() автор топика
Последнее исправление: annulen (всего исправлений: 2)