2017-03-01 7 views
1
erzwungen

Ich bin mit systemd Version 219. root @ EVOvPTX1_RE0-RE0:/var/log # systemctl --Version systemd 219 + PAM -AUDIT -SELINUX + IMA -APPARMOR + SMACK + sysvinit + utmp -LIBCRYPTSETUP -GCRYPT + GNUTLS + ACL + XZ -LZ4 -SECCOMP + BLKID -ELFUTILS + KMOD-IDNsystemd Memory nicht

Ich habe einen Dienst, nennen wir es foo.service, der folgendes hat.

[Service] Memory = 1G

Ich habe Code absichtlich hinzugefügt 1M Speicher 4096 mal zuzuteilen, die 4G Speicher alloc verursacht, wenn ein bestimmtes Ereignis empfangen wird. Die Idee ist, dass nach der Prozess 1G Adressraum verbraucht, Speicherzuweisung würde fehlschlagen. Dies scheint jedoch nicht der Fall zu sein. Ich bin in der Lage, 4G Speicher ohne Probleme zuzuweisen. Das sagt mir, dass das Speicherlimit, das in der -Servicedatei angegeben wird, nicht erzwungen wird.

Kann mir jemand sagen, was ich vermisse?

Ich schaute auf das Proc-Dateisystem - Datei namens Grenzen. Dies zeigt, dass der maximale Adressraum unbegrenzt ist, was auch bestätigt, dass das Speicherlimit nicht erzwungen wird.

Antwort

0

Diese Unterscheidung ist, dass Sie Speicher zugewiesen haben, aber Sie haben es nicht tatsächlich verwendet. In der Ausgabe von top ist dies der Unterschied zwischen der Speicherspalte "VIRT" (zugeordnet) und der tatsächlich verwendeten Spalte "RES".

Versuchen Sie, Ihr Experiment zu ändern, um Elementen eines großen Arrays Werte zuzuweisen, anstatt nur Speicher zuzuweisen und festzustellen, ob Sie das Speicherlimit auf diese Weise erreichen.

Referenz: Resident and Virtual memory on Linux: A short example

+0

Danke für dieses Beispiel. Ich sehe, dass das Zuweisen von 4G ohne Verwendung von RES so bleibt. Nur nachdem ich den Speicher benutzt habe, sehe ich, dass RES zu 4G geht. Aber selbst mit "MemoryLimit = 1G" in der Servicedatei kann VIRT und RES beide 4G erreichen. Ich benutze Systemd 219, das ein bisschen alt ist. Ist systemd 219 nicht in der Lage Ressourcenmanagement zu unterstützen? –