echo 4G > memory.max: memory.max는 항상 0입니다.

echo 4G > memory.max: memory.max는 항상 0입니다.

다음을 사용하여 cgroup2의 메모리 제한을 설정하려고 합니다.

echo 4G > memory.max

이것은 내 노트북에서는 잘 작동하지만 내 서버에서는 무엇을 쓰든(쓰기가 작동하지 않더라도) 항상 반환합니다 cat memory.max.0max0

여기서 무슨 일이 일어나고 있으며 어떻게 해결할 수 있습니까?

답변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
...

관련 정보