Limit-Speicher auf einem docker-container funktioniert nicht
Läuft die Letzte version des docker auf der Oberseite von ubuntu 13.04
root@docker:~# docker version
Client version: 0.6.6
Go version (client): go1.2rc3
Git commit (client): 6d42040
Server version: 0.6.6
Git commit (server): 6d42040
Go version (server): go1.2rc3
Last stable version: 0.6.6
Aber wenn ich starten Sie das container -
root@docker:~# docker run -m=1524288 -i -t ubuntu /bin/bash
root@7b09f638871a:/# free -m
total used free shared buffers cached
Mem: 1992 608 1383 0 30 341
-/+ buffers/cache: 237 1755
Swap: 2047 0 2047
Sehe ich keine Einschränkung von jeder Art, und mein kernel cgroups memory limit aktiviert:
kernel /boot/vmlinuz-3.8.0-33-generic ro console=tty0 root=/dev/xvda1 cgroup_enable=memory swapaccount=1
Was offensichtlich, was vermisse ich hier ?
InformationsquelleAutor der Frage Disco | 2013-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
free
nicht zeigen, dass es, wie diese durchgesetzt wird über cgroups. Statt auf dem host (außerhalb des Behälters) können Sie überprüfen, mit/sysfs
und die cgroup-SpeicherSehen es run out of memory Sie können noch etwas laufen, wird mehr Arbeitsspeicher verwenden als die, die Sie zuordnen, - z.B.:
In
dmesg
sollten Sie die container-und Prozess getötet:InformationsquelleAutor der Antwort
Verlinkung zu diesem schöner Beitrag wieder betont container Speichernutzung. Hier ist die Zusammenfassung, ein bisschen modifiziert, um die Arbeit für die Hafenarbeiter, anstatt Allgemeine LXC:
Start-container mit einem memory limit:
Erstellen Sie eine Datei
foo.c
im inneren des Behälters mit den folgendenKompilieren Sie die Datei
Öffnen Sie ein neues terminal zur überwachung des container-Speichers Verwendung:
Starten Sie den Speicher-Verbrauch in den container
Nun sehen Sie Ihre Behälter max. Hinweis: Wenn Sie out-of-memory malloc beginnen zu scheitern, aber ansonsten ist der container wird allein gelassen. Normalerweise wird die software im inneren des Containers wird der Absturz durch die fehlerhafte mallocs, aber software, die elastisch ist weiter zu betreiben
Letzte Anmerkung: Docker ' s -m-flag nicht zählen, swap und ram getrennt. Wenn Sie
-m 512M
dann einige, die 512 werden swap-Speicher, nicht RAM. Wenn Sie möchten, dass nur RAM, die Sie benötigen, um LXC-Optionen direkt (das heißt, Sie müssen zum ausführen von docker mit der LXC-Ausführung-Treiber anstelle von libcontainer)Es ist ein bemerkenswerter Unterschied zwischen der Verwendung von swap-als Teil des gesamten und nicht - mit-swap-die foo Programm vor erreichen von ~450M schnell und dann langsam verbraucht, der Rest, in der Erwägung, dass nur mit RAM, es springt sofort an 511M für mich. Mit swap-container Speicherverbrauch ist markiert bei ~60M sobald ich in den container - das ist im Grunde die swap gezählt wird als "Verwendung". Ohne meine swap-Speicher-Auslastung <10M, wenn ich in den container
InformationsquelleAutor der Antwort
Wenn Sie eine neuere version von docker, dann der Ort zu suchen, die info ist
/sys/fs/cgroup/memory/docker/<container_id>/memory.limit_in_bytes
:InformationsquelleAutor der Antwort Komu