echo 4G > 内存.max: 内存.max 始终为 0

echo 4G > 内存.max: 内存.max 始终为 0

我正在尝试使用以下命令设置 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
...

相关内容