我正在运行systemd版本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 -IDN
我有服务,请将其称为foo.service,其中包含以下内容。
[服务] 的memoryLimit = 1G
我故意添加代码以分配1M内存4096次,这是导致的 收到某个事件时的4G内存分配。之后的想法是 该进程占用1G的地址空间,内存分配将开始失败。 但是,情况似乎并非如此。我能够分配4G内存 没有任何问题。这告诉我指定的内存限制 服务文件未强制执行。
有谁能让我知道我错过了什么?
我查看了proc文件系统 - 名为limits的文件。这说明了 最大地址空间为无限制,这也确认了内存限制 没有得到执行。
答案 0 :(得分:1)
这个区别在于您已经分配了内存,但实际上并没有使用它。在top
的输出中,这是“VIRT”存储器列(已分配)与“RES”列(实际使用)之间的差异。
尝试修改实验,为大型数组的元素赋值,而不是仅仅分配内存,看看是否达到内存限制。