我想在 docker 内使用 ulimit 设置无限的核心文件大小。我不能这样做
ulimit -c unlimited
因为docker的参数是由框架设置的,所以不接受unlimited
参数。所以我需要通过直接传递值来设置它。我发现 9223372036854775807 是最大值,但是当我设置它时,我得到:
ulimit: 9223372036854775807: limit out of range
如何找到可以传递的最大值ulimit -c
?
答案1
在 Linux 上,RLIMIT_CORE
限制(参见setrlimit(2)
手册页)以字节为单位表示。而对于ulimit
ofbash
和大多数其他 shell,它以千字节为单位表示。
RLIMIT_CORE
您可以在 Linux 上传递给的最大值(以字节setrlimit()
为单位)将是最大的无符号 64 位整数(18446744073709551615),请记住它实际上是 的特殊值RLIM_INFINITY
,您可以传递给 bash 的最大值ulimit
将除以1024, 18014398509481983,但是,这不会将限制设置为RLIMIT_INFINITY
18446744073709550592 18014398509481983 * 1024
,它比 1023 短RLIM_INFINITY
。
答案2
您可以使用该标志设置 Docker 运行时容器的限制--ulimit
。
docker run --ulimit core=<size> ...
请注意,“unlimited”不是受支持的值,因为它实际上不是实际值,但 -1 相当于它:
$ docker run -it --ulimit core=-1 ubuntu:18.04 sh -c 'ulimit -a | grep core'
coredump(blocks) unlimited