OpenVZ Forum


Home » International » German » Cannot allocate memory - Error - failcnt privvmpages
Cannot allocate memory - Error - failcnt privvmpages [message #37610] Wed, 30 September 2009 17:03 Go to next message
afaber is currently offline  afaber
Messages: 7
Registered: September 2009
Junior Member
Hallo zusammen!

auf meinen Server betreibe ich verschiedene Vzs und hier ist mir aufgefallen, das ich immer wieder über "Cannot allocate memory" stolpere, was ich mir noch nicht ganz so erklären kann.

Test VE:
Debian 5 VZ, mit 256 MB RAM.

Die Config:
KMEMSIZE="11055923:11377049"
LOCKEDPAGES="256:256"
PRIVVMPAGES="65536:69632"
SHMPAGES="21504:21504"
NUMPROC="240:240"
PHYSPAGES="0:9223372036854775807"
VMGUARPAGES="33792:9223372036854775807"
OOMGUARPAGES="26112:9223372036854775807"
NUMTCPSOCK="360:360"
NUMFLOCK="188:206"
NUMPTY="16:16"
NUMSIGINFO="256:256"
TCPSNDBUF="1720320:2703360"
TCPRCVBUF="1720320:2703360"
OTHERSOCKBUF="1126080:2097152"
DGRAMRCVBUF="262144:262144"
NUMOTHERSOCK="360:360"
DCACHESIZE="3409920:3624960"
NUMFILE="9312:9312"
AVNUMPROC="180:180"
NUMIPTENT="128:128"


Auf dem Test VE laufen nur Standartdienste die kaum Speicher brauchen - TOP :

top - 18:52:37 up 1:02, 0 users, load average: 0.00, 0.00, 0.00
Tasks: 19 total, 1 running, 18 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 262144k total, 90336k used, 171808k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 10312 740 616 S 0 0.3 0:00.68 init
345 root 20 0 5904 704 544 S 0 0.3 0:00.02 syslogd
358 bind 20 0 137m 13m 2232 S 0 5.1 0:00.00 named
370 root 20 0 48864 1204 704 S 0 0.5 0:00.08 sshd
375 nagios 20 0 22496 1024 592 S 0 0.4 0:00.12 nrpe
380 nobody 20 0 30124 3068 892 S 0 1.2 0:00.00 nagios-statd
383 nagios 20 0 122m 8792 1584 S 0 3.4 0:00.02 nagiosgrapher
400 root 20 0 19264 928 724 S 0 0.4 0:00.00 xinetd
426 root 20 0 51172 2000 572 S 0 0.8 0:00.06 sendmail-mta
469 nagios 25 5 26040 1748 760 S 0 0.7 0:01.90 nagios3
472 daemon 20 0 16356 444 296 S 0 0.2 0:00.00 atd
487 root 20 0 18548 952 728 S 0 0.4 0:00.02 cron
496 root 20 0 117m 2948 1204 S 0 1.1 0:00.04 apache2
497 www-data 20 0 117m 2360 604 S 0 0.9 0:00.00 apache2
510 root 20 0 18540 520 340 S 0 0.2 0:00.00 vzctl
511 root 20 0 17448 1740 1292 S 0 0.7 0:00.00 bash
2500 root 20 0 18540 524 340 S 0 0.2 0:00.00 vzctl
2501 root 20 0 17440 1700 1256 S 0 0.6 0:00.00 bash
2510 root 20 0 18820 1100 856 R 0 0.4 0:00.00 top

So, jetzt wird es interessant:

wenn ich auf diesem ruhigen System z.B. dselect starte, und dann auf "Select" gehe, stürzt dselect mit einem unfreundlichem "dselect: failed to create baselist pad: Cannot allocate memory" ab.

Warum geht ihm da privvmpages aus? Ich denke auf einem Physikalischen Server mit 260 MB kann man sehr wohl dselect ausführen, ohne das er gleich auf den Latschen kippt.
Dieses Phänomen habe ich bei verschiedenen Servern, das diese über ihre privvmpages heraus schießen und sich dann Prozesse verabschieden.

Hier der passende Userbeamcounter:

uid resource held maxheld barrier limit failcnt
203: kmemsize 4018989 5298859 11055923 11377049 0
lockedpages 0 0 256 256 0
privvmpages 22520 69633 65536 69632 27
shmpages 18 690 21504 21504 0
dummy 0 0 0 0 0
numproc 25 33 240 240 0
physpages 8760 55930 0 9223372036854775807 0
vmguarpages 0 0 33792 9223372036854775807 0
oomguarpages 8760 55930 26112 9223372036854775807 0
numtcpsock 12 15 360 360 0
numflock 4 9 188 206 0
numpty 2 2 16 16 0
numsiginfo 0 2 256 256 0
tcpsndbuf 209280 223384 1720320 2703360 0
tcprcvbuf 196608 221712 1720320 2703360 0
othersockbuf 13872 37968 1126080 2097152 0
dgramrcvbuf 0 4360 262144 262144 0
numothersock 26 33 360 360 0
dcachesize 237567 291317 3409920 3624960 0
numfile 752 955 9312 9312 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 10 10 128 128 0

failcnt taucht nur bei privvmpages auf.
Wo habe ich hier den Denkfehler?
Kann man das System nicht noch anderweitig begrenzen, so das es freiwillig unter privvmpages bleibt?

Ach ja, vzcfgvalidate brint keinen Fehler bei dieser Konfiguration.

Für Hinweise wäre ich dankbar,

Andy

[Updated on: Wed, 30 September 2009 17:04]

Report message to a moderator

Re: Cannot allocate memory - Error - failcnt privvmpages [message #37612 is a reply to message #37610] Wed, 30 September 2009 20:55 Go to previous messageGo to next message
dr4g0nl0rd is currently offline  dr4g0nl0rd
Messages: 17
Registered: May 2008
Junior Member
Quote:
Für Hinweise wäre ich dankbar

Quote:
358 bind 20 0 137m 13m 2232 S 0 5.1 0:00.00 named
383 nagios 20 0 122m 8792 1584 S 0 3.4 0:00.02 nagiosgrapher
426 root 20 0 51172 2000 572 S 0 0.8 0:00.06 sendmail-mta
496 root 20 0 117m 2948 1204 S 0 1.1 0:00.04 apache2
370 root 20 0 48864 1204 704 S 0 0.5 0:00.08 sshd

Deine VE hat 256 MB Ram. Rechne nun alles ROT Markierte zusammen.
Entweder Ram erhöhen, Services optimieren (apache-mpm-worker zu apache2-mpm-prefork wechseln, NAMED ausschalten oder wird ein Nameserver betrieben?) Wenn es sich um 64Bit OS handelt, zu 32Bit wechseln, weil 64Bit doppelten Speicher alloziert.
PS: Wundert mich etwas das die Services gestartet sind.
Quote:
VMGUARPAGES="33792:9223372036854775807"

Stell dort die Werte so wie die privvmpages ein.

[Updated on: Wed, 30 September 2009 20:56]

Report message to a moderator

Re: Cannot allocate memory - Error - failcnt privvmpages [message #37613 is a reply to message #37612] Wed, 30 September 2009 21:05 Go to previous messageGo to next message
afaber is currently offline  afaber
Messages: 7
Registered: September 2009
Junior Member
Danke für die Antwort!

Wie gesagt ist das eine Testinstallation, die sinnbildlich für das Problem steht.

Meine Frage ist, warum werden Prozesse dann mit "Cannot allocate memory" brutal abgewürgt und nicht z.B. ein Swapspeicher verwendet?

Wenn die diese Installation auf einer Physischen Kiste installiere, bin ich mir sicher das ich dselect zusätzlich ohne Absturz ausführen kann.

Mir geht es hier um das Verhalten bei erreichen der Speichergrenze und dessen richtige Definition. Ein "Cannot allocate memory" kann bei Produktivsystemen grade z.B. Datenbanken verherende Auswirkungen haben.

Gibt es vielleicht hier weitere Configpunkte mit denen man das richtig konfigurieren kann?

Gruß,

Andy

[Updated on: Wed, 30 September 2009 21:07]

Report message to a moderator

Re: Cannot allocate memory - Error - failcnt privvmpages [message #37618 is a reply to message #37613] Thu, 01 October 2009 16:50 Go to previous messageGo to next message
dr4g0nl0rd is currently offline  dr4g0nl0rd
Messages: 17
Registered: May 2008
Junior Member
Stell den Ram höher auf min. 800MB dann gibt es auch kein Abbruch
oder stoppe überflüssige Services wie NAMED ect.
Deine VE verbraucht 700MB Speicher, wenn du 768MB als Maximum
zugeteilt hast (dynamic), kann kein Freier Speicher alloziert werden.
Also entweder mehr Speicher oder Services Optimieren so wie ich es geschrieben habe.
Re: Cannot allocate memory - Error - failcnt privvmpages [message #37619 is a reply to message #37618] Thu, 01 October 2009 17:00 Go to previous messageGo to next message
afaber is currently offline  afaber
Messages: 7
Registered: September 2009
Junior Member
Hallo,

heisst das, es gibt keine andere Möglichkeit bei OpenVZ friedlich den Speicher zu begrenzen? Muss ein überschreiten der Limits immer mit "Cannot allocate memory" = Absturz des Prozesses enden?

Mit welchen Parametern definiere ich den "Dynamischen" Speicher den Du erwähnt hast?

(----Basic MEM-------)(Dynamischen-Mem---)
(----------------privvmempages(?)------------)

Bisher habe ich den möglichen Gesammtspeicher mit privvmempages vorgegeben.

Gruß&Danke,

Andy

[Updated on: Thu, 01 October 2009 17:01]

Report message to a moderator

Re: Cannot allocate memory - Error - failcnt privvmpages [message #37622 is a reply to message #37619] Fri, 02 October 2009 00:28 Go to previous message
dr4g0nl0rd is currently offline  dr4g0nl0rd
Messages: 17
Registered: May 2008
Junior Member
Mal ein Beispiel eines VE mit 512MB festen Ram und bis zu 768MB dynamic:
# UBC parameters (in form of barrier:limit)
KMEMSIZE="9223372036854775807:9223372036854775807"
LOCKEDPAGES="768:768"
PRIVVMPAGES="196608:196608"
SHMPAGES="196608:196608"
NUMPROC="768:768"
PHYSPAGES="0:9223372036854775807"
VMGUARPAGES="196608:196608"
OOMGUARPAGES="131072:196608"
NUMTCPSOCK="768:768"
NUMFLOCK="768:768"
NUMPTY="128:128"
NUMSIGINFO="768:768"
TCPSNDBUF="9223372036854775807:9223372036854775807"
TCPRCVBUF="9223372036854775807:9223372036854775807"
OTHERSOCKBUF="9223372036854775807:9223372036854775807"
DGRAMRCVBUF="9223372036854775807:9223372036854775807"
NUMOTHERSOCK="768:768"
DCACHESIZE="9223372036854775807:9223372036854775807"
NUMFILE="30000:30000"
AVNUMPROC="300:300"
NUMIPTENT="768:768"

PRIVVMPAGES und VMGUARPAGES entsprechen den maximalen Ram von 768MB (dynamic).
Ist dieser Wert erreicht, brechen Service ab weil kein Speicher frei ist und das Limit erreicht wurde.
OOMGUARPAGES ist der fest zugewiesene Ram vom 512MB. Ist dieser Wert erreicht, kann noch zusätzlicher Speicher
von bis zu 256MB alloziert werden. (512MB+256MB dynamic = 768MB Maximum.)
Wie ich schon erwähnt habe, musst du die Services optimieren oder abschalten um Speicher zu sparen.

[Updated on: Fri, 02 October 2009 00:29]

Report message to a moderator

Previous Topic: swap file
Next Topic: einen laufenden Rechner nach OpenVZ migrieren?
Goto Forum:
  


Current Time: Fri Oct 18 04:41:38 GMT 2024

Total time taken to generate the page: 0.05124 seconds