Schrift
[thread]3155[/thread]

Shared Memory zu klein (fork)

Leser: 1


<< >> 6 Einträge, 1 Seite
pq
 2005-07-25 17:35
#31142 #31142
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
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.

Code: (dl )
1
2
3
4
5
6
7
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:
Code: (dl )
1
2
3
4
5
----- 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-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
ptk
 2005-07-25 21:42
#31143 #31143
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
shm* ist eigentlich SysV-Shared memory (das Zeug, das man sich mit "ipcs" anzeigen lassen kann) und hat normalerweise nichts mit mittels fork erzeugtem Shared memory zwischen Prozessen zu tun.
pq
 2005-07-25 22:16
#31144 #31144
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ah, ok. da habe ich dann an der falschen stelle gesucht. du hast aber auch
keinen tip, warum hier nichts geshared wird? oder wo ich noch nachschauen
könnte?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
ptk
 2005-07-25 22:32
#31145 #31145
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Vielleicht ist es Kernel 2.4 vs. 2.6?
Oder liegt es gar an amd64?
pq
 2005-07-25 22:43
#31146 #31146
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hoffentlich nicht... muss morgen noch mal etwas genauer schauen,
habe eine chroot-umgebung, die das system von rechner A zum großen teil simuliert.
der effekt tritt aber sowohl im 64bit-system auf als auch im chroot... vielleicht ist es irgend eine c-library...
als workaround werde ich wohl erst mal Apache::SizeLimit ausschalten bzw. höher schalten, aber auf
dauer muss ich das rausfinden.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2005-07-26 19:28
#31147 #31147
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hat sich teilweise erledigt.
http://www.perlmonks.com/?node_id=478203

fakt ist, ich sollte mich nicht auf das shared memory reporting verlassen.
ich darf allerhöchstens auf das wirklich verbrauchte RAM via free z.B. schauen.
das bedeutet, ich kann bei Apache::SizeLimit nicht mehr
MAX_UNSHARED_SIZE benutzen, höchstens MAX_PROCESS_SIZE.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 6 Einträge, 1 Seite



View all threads created 2005-07-25 17:35.