我有一个带有中继的 OpenBSD“防火墙”,其中中继开始消耗所有可用内存,直至系统完全无响应。当用户启动非常大的文件传输时会发生这种情况(relayd 设置为 MinIO 集群的负载平衡器)
解决中继问题是一个需要解决的单独问题。
如何限制中继及其所有子进程可以使用的内存量,以防止其导致系统挂起?
答案1
默认情况下,基于 的守护进程使用以下部分/etc/rc
定义的限制启动:daemon
login.conf
daemon:\
:ignorenologin:\
:datasize=4096M:\
:maxproc=infinity:\
:openfiles-max=1024:\
:openfiles-cur=128:\
:stacksize-cur=8M:\
:tc=default:
表示tc=default
所有其他设置都是在该类上定义的设置default
(在文件前面定义)。
如果您想更改 的可用内存量relayd
,则需要更改datasize
.默认设置为 4Gb,您可能需要更小的容量,具体取决于您的计算机。当然,这将限制所有其他守护进程的可用内存,但由于问题似乎是内存有限的机器,因此这可能是一个好主意。
如果您想更改限制具体来说对于relayd
,在不更改其他守护进程的情况下,您可以执行一些操作,例如relayd
向文件添加一个新类,并具有其自己的限制(不要忘记:tc=daemon:
在末尾添加,以便该类的所有其他限制都daemon
适用):
relayd:\
:datasize=1024M:\
:tc=daemon:
然后将_relayd
用户添加到relayd
类中:
# usermod -L relayd _relayd
如果你查看整个/etc/login.conf
文件,你会发现这个方法用于允许vmd
有更多的可用内存,让unbound
有更多的内存openfiles
,等等。