我正在尝试使用以下命令设置 cgroup2 的内存限制:
echo 4G > memory.max
这在我的笔记本电脑上运行良好,但在我的服务器上cat memory.max
总是返回0
.不管我给它写什么(即使写也max
不起作用),它总是0
这里发生了什么以及我该如何解决它?
答案1
该问题是由使用 echo 时的尾随换行符引起的,该换行符被解释为0
.
例如:
$ cat memory.max
max
$ echo 4G > memory.max
$ cat memory.max
0
$ echo -n 4G > memory.max
$ cat memory.max
4294967296
$ echo max > memory.max
$ cat memory.max
0
$ echo -n max > memory.max
$ cat memory.max
max
通常它应该与换行符一起使用,但这取决于哪个库您正在使用的版本。
例如,在带有 glibc 的系统上strace echo 4G
返回以下内容:
...
write(1, "4G\n", 34G
) = 3
...
但是,如果您使用 musl-libc,您会得到以下结果:
...
writev(1, [{iov_base="4G", iov_len=2}, {iov_base="\n", iov_len=1}], 24G
) = 3
...