以下を使用して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
...