docker内でulimitを使用して無制限のコアファイルサイズを設定したいと思います。私はこれができません。
ulimit -c unlimited
Dockerのパラメータはフレームワークによって設定されるため、パラメータはunlimited
許可されません。したがって、値を直接渡して設定する必要があります。 9223372036854775807が最大値であることがわかりましたが、設定すると次のような結果が得られます。
ulimit: 9223372036854775807: limit out of range
渡すことができる最大値を見つける方法はulimit -c
?
答え1
Linuxでは、RLIMIT_CORE
制限(setrlimit(2)
manページを参照)はバイト単位で表示されます。他ulimit
のほとんどのシェルはキロバイトbash
として表示されます。
RLIMIT_CORE
Linuxでbashに渡すことができる最大の値(バイト)は、setrlimit()
最大の符号なし64ビット整数(18446744073709551615)です。実際には特別な値であることを覚えておいてください。RLIM_INFINITY
bashに渡すことができる最大の値はulimit
1024で割り、18014398509481983です。ただし、これは1023より短いRLIMIT_INFINITY
18446744073709550592に制限を設定しません。18014398509481983 * 1024
RLIM_INFINITY
答え2
このフラグを使用して、Dockerランタイムコンテナの制限を設定できます--ulimit
。
docker run --ulimit core=<size> ...
「無制限」は実際には実際の値ではないため、サポートされている値ではありませんが、-1はこれと同じです。
$ docker run -it --ulimit core=-1 ubuntu:18.04 sh -c 'ulimit -a | grep core'
coredump(blocks) unlimited