ist vielleicht nicht unbedingt ein mod_perl-problem an sich, aber dort ist
es aufgefallen.
auf rechner A laufen meine apache-prozesse mit 75MB shared und 25MB
unshared. also jeder prozeß hat 100MB, aber 75MB werden geteilt.
nun habe ich einen neuen rechner B, auf dem sind die prozesse auch
100MB groß, aber leider werden nur ca. 3.5MB geshared (was bei 2GB RAM
nicht schlimm ist, aber eben ärgerlich. vergleiche zwischen A und B sind
schwierig).
apache (1.3.29) und perl (5.6.1) ist komplett gleich, ich habe nur ein paar wenige
unterschiede in der config gefunden (-D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64 z.B.)
ich kann das ganze mit einem simplen perl-einzeiler reproduzieren.
my $s = "_" x 10000000;
if (my $pid = fork) {
print "parent";
}
else {
# $s = "(".$s.")"; # <---
}
dieses skript erzeugt auf rechner A zwei prozesse mit je 20MB, und
shared sind davon ca. 20MB.
kommentiere ich die zeile aus, verändere also $s, dann hat jeder
prozeß wirkliche 20MB.
auf rechner B jedoch werden niemals 20MB geshared, immer nur ca. 1MB.
ich vermute einfach nur eine falsche konfiguration, ich habe schon per
hand die werte in /proc/sys/kernel/shmmax und /proc/sys/kernel/shmall
erhöht, aber kein effekt.
system: 2.6.10-5-amd64-xeon #1 SMP Fri May 20 13:59:46 UTC 2005 x86_64 unknown
OS: debian 3.0 (ubuntu)
ipcs -ml:
----- Gemeinsamer Speicher: Grenzen -----
Maximale Anzahl der Segmente = 4096
Maximale Segmentgröße (KByte) = 327680
Maximaler gesamter gemeinsamer Speicher (Seiten) = 20971520
Minimale Segmentgröße (Bytes) = 1
\n\n
<!--EDIT|pq|1122298605-->