2017-12-05 3 views
1

Ich versuche, meinen Container zu begrenzen, so dass es nicht den gesamten RAM auf dem Host belegt. Von the Docker docs Ich verstehe, dass --memory begrenzt den RAM und --memory-swap Grenzen (RAM + Swap). Von the docker-compose docs sieht es aus wie die Bedingungen für diejenigen, sind mem_limit und memswap_limit, so dass ich die folgende Docker-compose Datei aufgebaut haben:Fähig zu malloc mehr als docker-komponieren mem_limit

> cat docker-compose.yml 
version: "2" 

services: 
    stress: 
     image: progrium/stress 
     command: '-m 1 --vm-bytes 15G --vm-hang 0 --timeout 10s' 

     mem_limit: 1g 
     memswap_limit: 2g 

Die progrium/stress image nur stress läuft, die in diesem Fall einen einzigen Thread laicht die 15GB fordert RAM und hält es für 10 Sekunden.

Ich würde erwarten, dass dies abstürzen wird, seit 15> 2. (Es ist abstürzen, wenn ich für mehr RAM fragen, als der Wirt hat.)

Der Kernel hat cgroups aktiviert und docker stats zeigt, dass die Grenze erkannt wird:

> docker stats 
CONTAINER  CPU %  MEM USAGE/LIMIT  MEM %  NET I/O  BLOCK I/O  PIDS 
7624a9605c70 0.00%  1024MiB/1GiB  99.99%  396B/0B  172kB/0B  2 

Also, was ist los? Wie beschränke ich den Container eigentlich?

Update: free Zusehen, es sieht aus wie die RAM-Auslastung effektiv begrenzt ist (nur 1 GB RAM verwendet wird), aber die Swap ist nicht: Der Behälter wird nach und nach Swap-Nutzung erhöhen, bis sie, obwohl alle des Swap gegessen und stress stürzt ab (es dauert etwa 20 Sekunden, um 5 GB Swap auf meinem Rechner zu bekommen).

Update 2: mem_swappiness: 0 Einstellung bewirkt einen sofortigen Absturz, wenn mehr Speicher als mem_limit, unabhängig von memswap_limit anfordert.

Antwort

0

docker info Lauf zeigt WARNING: No swap limit support

zu https://docs.docker.com/engine/installation/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities Nach dieser standardmäßig deaktiviert ist („Memory und Swap einen Overhead von etwa 1% des gesamten verfügbaren Speicher und eine 10% Gesamtleistung Abbau Bilanzierung entstehen.“) Sie können ermöglichen es durch bearbeiten der /etc/default/grub Datei:

hinzufügen oder bearbeiten sie die GRUB_CMDLINE_LINUX Linie die folgenden zwei Schlüssel-Wert-Paare hinzuzufügen: GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" dann GRUB mit update-grub und Neustart aktualisieren.

Verwandte Themen