如何防止 OpenBSD 上的中继使用所有内存

如何防止 OpenBSD 上的中继使用所有内存

我有一个带有中继的 OpenBSD“防火墙”,其中中继开始消耗所有可用内存,直至系统完全无响应。当用户启动非常大的文件传输时会发生这种情况(relayd 设置为 MinIO 集群的负载平衡器)

解决中继问题是一个需要解决的单独问题。

如何限制中继及其所有子进程可以使用的内存量,以防止其导致系统挂起?

答案1

默认情况下,基于 的守护进程使用以下部分/etc/rc定义的限制启动:daemonlogin.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,等等。

相关内容