[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