【发布时间】:2020-09-07 06:56:13
【问题描述】:
我们有一个使用 POSIX 消息队列在进程之间传递数据的库,并且需要将 msgqueue 内核参数设置为无限制,否则该进程将返回错误 too many open files。通常我们使用ulimit -q 和ulimit -q unlimited 来查看/设置它,但是对于一些Kubernetes 容器,我们希望能够通过go 代码直接设置它。
我们已经确认 pod 规范允许更改 mqueue 设置(通过 Kubernetes 1.14+ 的 securityContext)并且特定容器可以调整资源设置:
...
kind: Deployment
...
spec:
template:
spec:
securityContext:
sysctls:
- name: fs.mqueue.msg_max
value: "10000"
- name: fs.mqueue.msgsize_max
value: "102400"
containers:
- name: testing
securityContext:
capabilities:
add:
- SYS_RESOURCE
...
如果没有这些设置,即使 ulimit -q unlimited 也会出错:
bash: ulimit: POSIX 消息队列:无法修改限制:不允许操作
但是我们如何使用syscall.Setrlimit 来调整我们代码中的限制值呢?
【问题讨论】:
标签: go message-queue setrlimit