Re: jail und Resourcen

From: Oliver Fromme <olli(at)secnetix.de>
Date: Sat, 7 Sep 2002 12:26:12 +0200 (CEST)

Peter Rossini <prossini(at)firemail.de> wrote:
> Ist es wirklich praktikabel, auf einer Maschine mehr als eine Handvoll
> (sagen wir mal: 50) Apachen im Gefaengnis zu haben?

Durchaus. Du solltest natürlich genug RAM haben. Und da
jeder Apache auf Port 80 binden will, brauchst Du auch für
jeden eine eigene IP-Adresse. Name-based virtual hosts ist
da prinzipbedingt nicht drin.

Alternativ könnte man den Apache-Source so hacken, daß er
nach Entgegennahme einer Verbindung in das zugehörige Jail
reingeht. Vorteil: Man braucht nicht so viele IPs, und
es laufen weniger Prozesse (d.h. weniger RAM-Bedarf).
Nachteil: Bastelaufwand, schwerer zu pflegen, möglicher-
weise nicht ganz so sicher.

Prozesse an sich sind eine »billige« Resource. Es macht
überhaupt nichts, wenn einige tausend Prozesse laufen. Es
gibt auch Patches, die das Default-Limit von 100.000 Pro-
zessen erhöhen.

Die eigentliche Begrenzung ist also nur der RAM, denn Du
möchtest nicht wirklich, daß die Kiste ins Swappen kommt.

> Ich habe mir gestern den Apachen unter Linux angeguckt. Dort scheint
> das PHP-Modul dafuer verantwortwortlich zu sein, 64 MB geteilten
> Speicher (Shared Memory) zu allozieren, die sich physisch erst einmal
> in einer /tmp-Datei wiederfinden (Nebenbei: Grossartige Idee, dann nur
> eine kleine Wurzelpartition zu haben..)

Öhm, /tmp legt man selbstverständlich _nicht_ in die root-
Partition. Es sollte grundsätzlich ein eigenes Filesystem
sein. Ausreichend RAM vorausgesetzt, bietet sich ein MFS
an (Memory Filesystem); ansonsten tut's eine normale Par-
tition mit Soft-updates oder async.

> Teilen sich die Apachen da etwas? Wenn jeder Apache mit PHP 64MB
> fuer sich haben will, koennte es leicht etwas eng werden.

Wie gesagt, kommt auf Deinen RAM an, und wie Du die Jails
organisierst.

Prinzipiell wird natürlich aller Code geshared, der aus
denselben Dateien kommt (Binaries, Shared-libraries). Wenn
Du hundert Apachen startest (das gleiche Binary), dann ist
der Code nur einmal im Speicher. Das funktioniert auch
dann, wenn es Hardlinks sind (d.h. verschiedene Namen der
gleichen Datei, also gleiche inode-Nummer; siehe »ls -i«).
Wenn Du also Deine Jails aus Hardlinks untereinander auf-
baust, geht das. Spart außerdem jede Menge Plattenplatz.

Wenn es aber unterschiedliche Binaries sind (verschiedene
Dateien), dann geht das nicht, selbst wenn sie den gleichen
Inhalt haben. Der Kernel kann das ja nicht wissen. Wenn
Du also die Jails auch von den Dateien her komplett sepa-
rierst (wofür es gute Gründe geben mag), dann brauchst Du
definitiv mehr RAM.

Davon abgesehen brauchen die (variablen) Daten der Prozesse
natürlich grundsätzlich eigenen Speicher. Wie stark sich
das bemerkbar macht, hängt davon ab, wie verschwenderisch
die Programme mit ihren Datenstrukturen umgehen.

> Ich bin mir im obigen Fall nicht sicher, ob der Geteilte Speicher nur fuer
> die Kinder des Apachen oder aber auch anderen Apachen zur
> Verfuegung steht und ob auch die Eingesperrten sich was teilen duerfen.

Kommt drauf an, was für eine Art Shared-memory das PHP ver-
wendet. Zwei Möglichkeiten:

1. SysV IPC Shared-memory. Dieser ist _nicht_ nach Jails
aufgeteilt, d.h. Prozesse in unterschiedlichen Jails können
darüber miteinander kommunizieren, und auch mit Prozessen
im Host-System. Da Jails aber dazu dienen, Prozesse vor-
einander abzuschotten, ist SysV IPC in Jails per Default
ausgeschaltet. Man kann es per sysctl einschalten, wenn
man will (und wenn man weiß, was man tut).

2. mmap() Shared-memory. Dies funktioniert generell nur
zwischen »verwandten« Prozessen, d.h. ein Shared-memory-
Segment wird von einem Parent-Prozeß angelegt und kann dann
an seine Children vererbt werden. Da Prozesse in unter-
schiedlichen Jails nicht auf diese Weise miteinander ver-
wandt sind, können sie sich solchen Speicher nicht teilen.
Ich vermute, daß das im Fall von PHP auch gar nicht funk-
tionieren würde, da in dem Speicher sicherlich Server-spe-
zifische Daten liegen.

Wenn PHP für den Shared-memory eine Datei in /tmp verwen-
det, klingt das eher nach der zweiten Möglichkeit, denn
SysV-Shared-memory hat keine Repräsentation im Dateisystem.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"All that we see or seem is just a dream within a dream" (E. A. Poe)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Sat 07 Sep 2002 - 12:26:19 CEST

search this site