Thread Enorme Speicherauslastung (11 answers)
Opened by Knochen at 2011-01-25 10:47

torsten
 2011-01-26 09:31
#145025 #145025
User since
2010-08-16
45 Artikel
BenutzerIn
[Homepage] [default_avatar]
Der eine, der nur faul im Speicher rumliegt, überwacht den anderen. Beendet sich dieser aus Versehen, wird ein neuer Prozess gestartet.

Zu modperl mit einem threaded MPM ist viel geschrieben worden. Fazit, Du brauchst VIEL RAM. Der Grund: modperl verwaltet einen Pool von Perl-Interpretern. In deinem Worker-Prozess läuft also nicht nur ein Perl sondern mehrere. Jeder Perl Interpreter lädt und kompiliert nun alle Module, die Deine Programme benötigen. Kompilierter Perl Code ist groß. Unter Linux kannst Du das ganz gut mit Linux::Smaps messen. Als Beispiel-Code eignet sich CGI.pm. Das kompiliert die meisten Funktionen nämlich on-demand. Auf meinem aktuellen System ergibt das folgendes:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ perl -MLinux::Smaps -Mstrict -le '
  my $s=Linux::Smaps->new;
  my $p;
  sub p {
    $s->update;
    my $c=$s->private_dirty+$s->private_clean;
    print $_[0], ": ", $c-$p;
    $p=$c;
  }
  p "start";
  p "start2";
  require CGI;
  p "required";
  CGI->compile(":all");
  p "compiled";
  p "end"
'
start: 1296
start2: 8
required: 1036
compiled: 2240
end: 0

Die Angaben sind in Kilobytes. Nach dem Start belegt der Perl Prozess also fast 1.3 MB. Für die erste Ausgabe kommen nochmal 8 kB dazu. Das Einbinden des CGI Moduls braucht ca. 1 MB, der kompilierte Code jedoch 2.2 MB.

Nun multipliziere ein wenig und schon kommen Dir Deine Zahlen realistischer vor.

View full thread Enorme Speicherauslastung