答案1
看起来在 Nexus 文档中有所解释https://help.sonatype.com/repomanager3/system-requirements#SystemRequirements-AdequateFileHandleLimits
在大多数 Linux 系统上,可以通过编辑 /etc/security/limits.conf 文件为特定用户设置持久限制。要将 nexus 用户的软限制和硬限制的最大打开文件数设置为 65536,请在 /etc/security/limits.conf 文件中添加以下行,其中“nexus”应替换为用于运行存储库管理器的用户 ID:
nexus - 无文件 65536
此更改仅在 nexus 进程用户下次打开新会话时生效。这实际上意味着您需要重新启动 NXRM。
在 Ubuntu 系统上有一个警告:Ubuntu 会忽略由 init.d 启动的进程的 /etc/security/limits.conf 文件。
因此,如果使用 init.d 启动 NXRM,请编辑 /etc/pam.d/common-session 并取消注释以下行(删除行开头的井号 # 和空格):
# 会话需要 pam_limits.so
有关更多信息,请参阅特定操作系统的文档。
如果您使用 systemd 启动服务器,则上述操作将不起作用。相反,请修改配置文件以添加 LimitNOFILE 行:
[单元] 描述=nexus 服务 之后=网络.目标 [服务] 类型=分叉 限制NOFILE=65536 ExecStart=/opt/nexus/bin/nexus 启动 ExecStop=/opt/nexus/bin/nexus 停止 用户=nexus 中止时重新启动 [安装] WantedBy=多用户.目标
答案2
OP 询问如何增加 Docker 容器(在本例中为 Nexus Repository 服务器)内运行的进程的 ulimit。虽然上面给出的答案涵盖了一些增加在 init 系统(如 systemd)下运行的进程的 ulimit 的场景,但 Docker 的机制有所不同。
要增加容器内的句柄数量,您需要在容器的 Dockerfile 中执行“ulimit”命令
RUN ulimit 65536
或者,如果您不能/不想构建自己的容器,那么您可以在启动容器的命令--ulimit nofile=65536:65536
上将其作为参数传递。docker run
在 kubernetes 中,你可以通过向容器的 pod 规范中添加“资源”部分来完成同样的事情,如下所示:
...
spec:
containers:
- name: Nexus
image: sonatype/nexus3:3.7.1
resources:
limits:
nofile: 65536 # Set the maximum number of file handles