vServer kmemsize failure / exim failure

Sirakor

New Member
Hallo,

ich habe folgendes Problem mit einem vPowerserver von Strato: Sobald exim zu viele Mails verschicken soll, gibt es kmemsize failures, und nach einem kurzen Kampf, streckt exim die Waffen und stirbt. Das Problem laesst sich wohl am besten mit ein paar logfiles beschreiben.

Auf dem Server laeuft Debian Etch, ohne confix/plesk/webmin etc.

Code:
uname -a

Linux h1xx.stratoserver.net 2.6.9-023stab044.16-enterprise #1 SMP Fri Nov 23 20:56:09 MSK 2007 i686 GNU/Linux

Auf dem Server laufen nur Apache 2.2.3-4, mySQL 5.0.32-7 (beide im Jail Root), und exim4 4.63-17. Exim ist nur dazu da Mails von einer PHP5/mySQL Anwendung auf dem lokalen Server zu verschicken, er nimmt keine Mails von aussen an. Ergo ist auch kein Antivirus/Spamassassin etc installiert.

Code:
netstat -tulp

Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address           Foreign Address State       PID/Program name
tcp        0      0 xxx.com:www         *:* LISTEN     25626/apache2
tcp        0      0 hxx.stratoser:smtp  *:* LISTEN     12149/exim4
tcp        0      0 *:22                *:* LISTEN     27781/sshd
tcp        0      0 xxx.com:https       *:* LISTEN     25626/apache2
tcp        0      0 hxx.stratose:mysql  *:* LISTEN     1657/mysqld

Speicher sollte eigentlich genug zur verfuegung stehen, user_beancounters sagt folgendes:

Code:
Version: 2.5
       uid  resource           held    maxheld    barrier      limit  failcnt
   1348704: kmemsize        6940716    7293199   14271433   15723665   136051
            lockedpages           0          0      15200      16384        0
            privvmpages       56933      57362     256256     288768        0
            shmpages           1422       1422     524288     524288        0
            dummy                 0          0          0          0        0
            numproc              74         79        596        596        0
            physpages         26040      26426          0 2147483647        0
            vmguarpages           0          0     192062 2147483647        0
            oomguarpages      26040      26426     216062 2147483647        0
            numtcpsock            9          9       2000       2000        0
            numflock              4          5        800        928        0
            numpty               10         10        256        256        0
            numsiginfo            0          1       2048       2048        0
            tcpsndbuf        223600     214656    9366512   15204912        0
            tcprcvbuf        147456     114688    9366512   15204912        0
            othersockbuf       8500      18672    6012928   16252928        0
            dgramrcvbuf           0          0     960000    1048576        0
            numothersock         12         15       1528       1528        0
            dcachesize       511252     518320    6023656    6072656        0
            numfile            2725       2821      13864      13864        0
            dummy                 0          0          0          0        0
            dummy                 0          0          0          0        0
            dummy                 0          0          0          0        0
            numiptent            14         14        512        512        0

Hier sieht man das Problem - kmemsize zeigt viele Fehler. Ich habe den Fehler nachverfolgen koennen, und zwar tritt er dann auf, wenn exim zu viele Mails verarbeiten muss. Die Mails kommen von einer PHP/mySQL Anwendung, die sich ueber SMTP mit dem MTA verbindet. Die Mails sind alle plaintext, kein HTML, keine Anhaenge, Groesse typischerweise zwischen 1-4kb je Mail. Sobald exim auf einmal mehr als ~100 Mails verschicken soll, geht das im grossen Stil schief. Das exim panic log vor dem Absturz von exim:

Code:
2008-03-10 12:43:36 1JYhLs-0006kF-BK Failed to create spool file /var/spool/exim4/input//1JYhLs-0006kF-BK-D: Cannot allocate memory
2008-03-10 12:43:36 50 select() failures: Cannot allocate memory
2008-03-10 12:43:36 1JYhLs-0006kG-Cs Failed to create spool file /var/spool/exim4/input//1JYhLs-0006kG-Cs-D: Cannot allocate memory
2008-03-10 12:43:36 50 select() failures: Cannot allocate memory
2008-03-10 12:43:36 1JYhLs-0006kH-EO Failed to create spool file /var/spool/exim4/input//1JYhLs-0006kH-EO-D: Cannot allocate memory
2008-03-10 12:43:36 50 select() failures: Cannot allocate memory
2008-03-10 12:43:36 1JYhLs-0006kI-Fv Failed to create spool file /var/spool/exim4/input//1JYhLs-0006kI-Fv-D: Cannot allocate memory
2008-03-10 12:43:36 50 select() failures: Cannot allocate memory
2008-03-10 12:43:36 1JYhLs-0006kJ-HS Failed to create spool file /var/spool/exim4/input//1JYhLs-0006kJ-HS-D: Cannot allocate memory
2008-03-10 12:43:36 50 select() failures: Cannot allocate memory
2008-03-10 12:43:36 1JYhLs-0006kK-J3 Failed to create spool file /var/spool/exim4/input//1JYhLs-0006kK-J3-D: Cannot allocate memory
2008-03-10 12:43:36 50 select() failures: Cannot allocate memory
2008-03-10 12:43:36 1JYhLs-0006kL-KZ Failed to create spool file /var/spool/exim4/input//1JYhLs-0006kL-KZ-D: Cannot allocate memory
2008-03-10 12:43:36 50 select() failures: Cannot allocate memory
2008-03-10 12:43:36 1JYhLs-0006kM-M7 Failed to create spool file /var/spool/exim4/input//1JYhLs-0006kM-M7-D: Cannot allocate memory
2008-03-10 12:43:36 50 select() failures: Cannot allocate memory
2008-03-10 12:43:36 1JYhLs-0006kP-Q2 re-exec of exim (/usr/sbin/exim4) with -Mc failed: Cannot allocate memory
2008-03-10 12:43:37 1JYhLt-0006kZ-1v daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:37 1JYhLs-0006kX-W4 == bdujon@pasteur.fr R=dnslookup T=remote_smtp defer (-1): TCP port "smtp" is not defined for remote_smtp
 transport
2008-03-10 12:43:37 1JYhLt-0006ki-8u == ascherf@pasteur.fr R=dnslookup T=remote_smtp defer (-1): fork failed for remote delivery to pasteur.fr
: Cannot allocate memory
2008-03-10 12:43:37 1JYhLt-0006kl-B1 == georges.baffet@univ-rennes1.fr R=dnslookup T=remote_smtp defer (-1): fork failed for remote delivery t
o univ-rennes1.fr: Cannot allocate memory
2008-03-10 12:43:37 1JYhLt-0006ko-D3 == frederique.hubler@univ-rennes1.fr R=dnslookup T=remote_smtp defer (-1): fork failed for remote deliver
y to univ-rennes1.fr: Cannot allocate memory
2008-03-10 12:43:37 1JYhLt-0006kr-F7 == gilbert.semana@univ-rennes1.fr R=dnslookup T=remote_smtp defer (-1): fork failed for remote delivery t
o univ-rennes1.fr: Cannot allocate memory
2008-03-10 12:43:37 1JYhLt-0006kx-JE daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:37 1JYhLt-0006ku-H8 == alain.nicolas@curie.fr <Alain.Nicolas@curie.fr> R=dnslookup T=remote_smtp defer (-1): fork failed for
remote delivery to curie.fr: Cannot allocate memory
2008-03-10 12:43:37 1JYhLt-0006kz-L0 daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:37 1JYhLt-0006lA-Sv daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLt-0006lC-Uk daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lE-0U daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lH-42 daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lJ-5n daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lL-7b daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lN-9N daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lP-B9 daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lR-Cy daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lT-Ep daemon: delivery process fork failed: Cannot allocate memory
2008-03-10 12:43:38 1JYhLt-0006l7-Qq == anne-marie.mariotte@ujf-grenoble.fr <Anne-Marie.Mariotte@ujf-grenoble.fr> R=dnslookup T=remote_smtp de
fer (-1): fork failed for remote delivery to ujf-grenoble.fr: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lV-HZ == bordas@lasim.univ-lyon1.fr R=dnslookup T=remote_smtp defer (-1): fork failed for remote delivery to la
sim.univ-lyon1.fr: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006lV-HZ spool file open error while delivering: Cannot allocate memory
2008-03-10 12:43:38 1JYhLu-0006li-S5 re-exec of exim (/usr/sbin/exim4) with -Mc failed: Bad file descriptor

Ich bin da im Moment etwas ueberfragt und waere dankbar wenn jemand eine Idee hat, woher das Problem kommt/wie man ihm auf den Grund geht, oder eine Idee hat wie man das loesen koennte.

Vielen Dank,

Sirakor
 
Cannot allocate memory = Kein RAM mehr zur Verfügung.

Mal mit top oder htop schauen, welche Prozesse so viel Speicher verbrauchen.
 
Das der Speicher ausgeht ist mir bewusst. Ich werde naechstes mal mehr Daten mitloggen wenn das Problem auftritt, im Moment ist alles ruhig.

Was mich etwas verwirrt, ist die Aussage von user_beancounters. Wenn der Speicher ausgeht, warum sehe ich das nicht an kmemsize - maxheld ? 'Normaler' RAM ist laut user_beancounters auch genug da (vgl. privvmpages), fail counts zeigt nur der Kernelspeicher, wobei ich nicht verstehe was exim damit zu tun hat ...


Edit: ich mag mich irren - mit vServern habe ich wenig Erfahrung - aber ist es moeglich dass das kmemsize Limit zu klein gesetzt ist, und dass nicht genug Kernelspeicher da ist um die maximale Anzahl an Prozessen unterzukriegen? Oder liegt das Problem ganz wo anders?
 
Last edited by a moderator:
Im Kernel Memory legt das Betriebssystem hauptsächlich die Verwaltungsinformationen ab und der Speicher wird anders als der Bereich für die User-Prozesse behandelt (kann z.B. nicht ausgelagert werden). Da ist für jeden laufenden Prozeß z.B. ein Bereich von vielleicht 50kB erforderlich. Bei deinen 14MB als Barrier kommt man damit auf ein Maximum von so um die 280 Prozesse, die best-case gleichzeitig laufen könnten. Die effektive Anzahl dürfte da wohl einiges drunter liegen, weil z.B. noch andere Verwaltungsinformationen abgelegt werden und auch die Speicherbereiche aus Effizienzgründen nicht eng an eng nebeneinandergepackt werden.

Du solltest versuchen, daß dein exim nur eine sehr begrenzte Anzahl an Prozessen gleichzeitig startet.

PS: Die 14MB sind aus Sicht deines Anbieters offenbar ausreichend. Da hier die Ausgabe von /proc/user_beancounters verschiedener Anbieter gepostet wird, kannst du leicht selber einen Vergleich anstellen, was gängige Werte sind.
 
Back
Top