[Postfixbuch-users] Speicherverbrauch POP/IMAP-Sitzung bei Courier/ Mails in Amavis/Postfix
Andreas Meyer
anmeyer at anup.de
Mi Nov 28 12:12:08 CET 2007
Thomas Schwenski <postfixbuch at thomas-schwenski.de> schrieb:
>
> Hallo,
>
> da Peer vor kurzem hier mit der Aussage zitiert wurde eine Courier
> IMAP-Sitzung würde permanent (solange offen) 1MB Arbeitsspeicher
> verbraten, wollte ich mal nachfragen, wie man dies ermitteln/belegen kann.
>
> Ich brauche für eine Dokumentation leider einen für einen außenstehenden
> glaubhaften Messwert/Nachweis.
> Also wie kann ich das messen?
> (Oder ist der Verbrauch irgendwo dokumentiert.)
>
> Dasselbe gilt für den Amavisd-New- (mit SpamAssassin & ClamAV) und
> Postfix-Verbrauch pro Mail
> Wie lässt der sich ermitteln/berechnen?
Vielleicht ist das nachfolgende perl-script was für Dich:
#!/usr/bin/perl -w
# by Kristian K.hntopp
# made more robust by David Haller <david at dhaller.de>
#
# USAGE: memuse.pl PID
#
# e.g.:
# $ ps axuwww| awk '/[k]deinit/{print $2;}' | xargs -i memuse.pl {}
# or:
# $ ls -d /proc/[0-9]* | sed 's at .*/\([0-9]*\)@\1@' | sort -n \
# | xargs -i memuse.pl {} 2>&1 | less
#no warnings qw(once);
use strict;
die "Usage: $0 PID\n" unless $ARGV[0] > 0;
my ($share, $total);
my $file = sprintf "/proc/%s/cmdline", $ARGV[0];
if(!-e $file) {
print STDERR "No such file: $file\n";
exit(1);
} else {
open IN, "<$file" or print STDERR "Cannot open $file: $!";
}
(my $line = <IN>) =~ s/\0/ /g;
close IN;
printf "[$ARGV[0]] %s\n", $line ? $line : "kernel pseudo-process";
$file = sprintf "/proc/%s/maps", $ARGV[0];
if(!-e $file) {
print STDERR "No such file: $file\n";
exit(1);
}
open IN, "<$file" or die "$!";
while(<IN>) {
my ( $mem, $prot, $offset, $dev, $inode) = split;
my ( $start, $stop ) = split "-", $mem;
my $size = hex($stop) - hex($start);
$total += $size;
my $able = " ";
if ($prot =~ /^r-/ and $inode != 0) {
$share += $size;
$able = "s";
}
}
close IN;
printf "share = %12d (%8.2f MB)\n", $share, $share/1048576;
printf "private = %12d (%8.2f MB)\n", $total-$share, ($total-$share)/1048576;
printf "total = %12d (%8.2f MB) (%6.2f %% shareable)\n", $total,
$total/1048576, ( $total != 0 ? $share/$total*100 : 0);
Da kommt dann sowas dabei raus:
[1420] kernel pseudo-process
share = 4030464 ( 3.84 MB)
private = 532480 ( 0.51 MB)
total = 4562944 ( 4.35 MB) ( 88.33 % shareable)
--
Andreas Meyer
Mein öffentlicher GPG-Schlüssel unter:
http://gpg-keyserver.de/pks/lookup?search=anmeyer&fingerprint=on&op=index
Mehr Informationen über die Mailingliste Postfixbuch-users