OpenVZ - failcounts privvmpages

tomic

New Member
Hallo Zusammen,

ich habe einen Rootserver auf dem ich ca. 10 VE's habe.
Genau einer davon hat laut /proc/user_beancounters immer wieder failcounts. Es handelt sich um einen Webserver mit apache2, php, proftpd, fail2ban und memcached. Ansonsten ist es eine Standardinstallation von Debian Squeeze (netinst).

Nun habe ich Munin am laufen und sehe, dass von den 16GB RAM immer mind. 10 GB frei sind. Außerdem habe ich mal einen Lauscher gebastelt, der jede Minute den freien Speicher in eine Log schreibt - über einige Tage. Es war immer mehr als 10 GB RAM frei. vzcfgvalidate zeigt keine Fehler.

#cat /proc/user_beancounters
privvmpages 935476 4404908 4194304 4404019 18251

Die Config der VE
Code:
PRIVVMPAGES="4194304:4404019"
KMEMSIZE="773094113:858993459"
DISKSPACE="314572800:314572800"
DISKINODES="15000000:16500000"
NUMTCPSOCK="2550:2550"
NUMOTHERSOCK="2550:2550"
VMGUARPAGES="2097152:9223372036854775807"
OOMGUARPAGES="2097152:9223372036854775807"
TCPSNDBUF="14880000:22320000"
TCPRCVBUF="14880000:22320000"
OTHERSOCKBUF="14400000:21600000"
DGRAMRCVBUF="13440000:13440000"
NUMFILE="52736:52736"
DCACHESIZE="115964116:128849018"
NUMPROC="2600:2600"
SHMPAGES="524288:524288"
LOCKEDPAGES="2059:2059"
PHYSPAGES="0:9223372036854775807"
NUMFLOCK="1000:1000"
NUMSIGINFO="1024:1024"
NUMIPTENT="9223372036854775807:9223372036854775807"
NUMPTY="102:102"
CPUUNITS="150000"

Das Rootsystem:
2 x Intel Xeon CPU
64GB ECC RAM
5 x 500 GB Raid 5

Auf keiner der anderen VE's habe ich diese Probleme. Der einzige Unterschied zu diesem Server ist, dass apache memcached installiert ist. memcached habe ich max 4096MB zugeteilt.

Hat dazu jemand eine Idee?
 
Du hast in der VM bisher max 4404908 genutzt, also erhöhe in der Config bei
PRIVVMPAGES="4194304:4404019" auf min >4404908.

Gruß Sven
 
Du hast in der VM bisher max 4404908 genutzt, also erhöhe in der Config bei
PRIVVMPAGES="4194304:4404019" auf min >4404908.

Gruß Sven

Laut Munin und meinem Batch-Lauscher war jedoch zu keiner Zeit mehr als 50 % des Speichers voll. Irgendwas stimmt nicht - denn zu "keiner" Zeit waren "4404908" benutzt. Der Wert von privvmpages beschreibt doch den zugeteilten "Arbeitsspeicher", welchen auch als shared memory bezeichnet werden kann und somit anderen VE's ebenfalls zur Verfügung steht. Oder sehe ich hierbei etwas falsch?

Bekommt man irgendwie raus, zu welcher Zeit die failcounts aufgetreten sind?
 
privvmpages limitiert die Summe des virtuellen Speichers in den VEs. Nicht jede Anforderung von Speicher durch einen Prozess führt sofort zu einer kompletten Nutzung dieses Speichers. Ein Prozess kann z.B. 10 MB leeren Speicher anfordern, die einzelnen Seiten werden aber erst dann im realen Speicher bereitgestellt, wenn der Prozess das erste Mal darauf zugreift. Ebenfalls kann das Betriebsystem selten genutzte Speicherteile dem Prozess wieder entziehen. Handelt es sich um Code, kann der Speicher durch erneutes Einlesen der relevanten Bereiche aus dem auf Platte liegendem Executable neu aufbauen; bei Daten werden diese vorher in den Swap geschrieben. Deshalb stellt der virtuelle Speicher immer den maximal vom Prozess ansprechbaren Speicher dar, während der real genutzte RAM nur einen Teil dessen ausmacht.

Man muss also den virtuell zugeteilten Speicher und den real genutzten Speicher unterscheiden. Die beiden Werte kann man sich pro Prozess ansehen. Beispiel:

Code:
# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     23764  0.0  0.2  14568  2236 pts/0    Ss   21:10   0:00 -bash
root     23775  0.0  0.1  11424  1072 pts/0    R+   21:10   0:00 ps u

Die Spalte VSZ ist die Größe des virtuellen Speichers und RSS die derzeit wirklich im RAM belegte Größe. Und da kann (insbesondere bei Verwendung von Threads) ein ziemlicher Unterschied drin sein (14MB zu 2MB bzw. 11MB zu 1MB).

Für privvmpages ist VSZ aller laufenden Prozesse zu betrachten.
 
Back
Top