无法为systemd临时scope设置文件描述符限制,该如何解决?
为systemd临时scope单元调整文件描述符限制的解决方案
问题背景
尝试为Azure依赖代理的临时scope单元 enable_e0d20b64-6e48-4e38-a718-6ae53745eddb.scope 提升打开文件描述符限制(LimitNOFILE),但通过修改父slice单元 azure.slice 的方式失败——systemd提示slice单元不支持LimitNOFILE指令,添加[Service]段也被忽略。
单元层级结构:
├─azure.slice │ ├─waagent.service │ │ ├─18305 /usr/bin/python -u /usr/sbin/waagent -daemon │ │ ├─27946 python -u bin/WALinuxAgent-2.9.0.4-py2.7.egg -run-exthandlers │ │ ├─28127 /bin/bash /var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-1.0.5/bin/applicationhealth-shim enable │ │ ├─28129 tee -ia /var/log/azure/applicationhealth-extension/handler.log │ │ └─28144 /var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-1.0.5/bin/applicationhealth-extension enable │ └─azure-vmextensions.slice │ └─azure-vmextensions-Microsoft.Azure.Monitoring.DependencyAgent.DependencyAgentLinux_9.10.13.19190.slice │ └─enable_e0d20b64-6e48-4e38-a718-6ae53745eddb.scope │ ├─18431 /bin/sh /opt/microsoft/dependency-agent/bin/microsoft-dependency-agent-manager │ └─18515 /opt/microsoft/dependency-agent/bin/microsoft-dependency-agent
失败原因
systemd的slice单元属于资源分组容器,仅支持CPU、内存等全局资源限制(参考systemd.resource-control),而LimitNOFILE这类进程级ulimit限制,属于service/scope等进程执行单元的配置项,slice本身无法直接设置。
解决方案
方案1:直接修改目标scope的临时配置
临时scope虽为动态生成,但可通过systemd的drop-in目录添加持久化配置:
- 创建scope的drop-in目录:
mkdir -p /etc/systemd/system/enable_e0d20b64-6e48-4e38-a718-6ae53745eddb.scope.d - 创建配置文件
override.conf:[Scope] LimitNOFILE=4096 - 重载systemd并重启scope:
systemctl daemon-reload systemctl restart enable_e0d20b64-6e48-4e38-a718-6ae53745eddb.scope
注意:临时scope名称可能随代理更新变化,此方法仅适用于当前实例。
方案2:从父service层面配置(持久化)
该scope由Azure依赖代理的manager进程启动,可修改父service的配置,让子scope继承限制:
- 查找对应service单元:
systemctl list-units | grep DependencyAgent - 编辑service的drop-in配置:
systemctl edit azure-vmextensions-Microsoft.Azure.Monitoring.DependencyAgent.DependencyAgentLinux_9.10.13.19190.service - 在编辑器中添加:
[Service] LimitNOFILE=4096 - 重启service:
systemctl restart azure-vmextensions-Microsoft.Azure.Monitoring.DependencyAgent.DependencyAgentLinux_9.10.13.19190.service
验证配置生效
- 查看进程实际限制:
cat /proc/18431/limits | grep "Max open files" cat /proc/18515/limits | grep "Max open files" - 查看scope的systemd配置:
systemctl show enable_e0d20b64-6e48-4e38-a718-6ae53745eddb.scope | grep LimitNOFILE
内容的提问来源于stack exchange,提问作者victorbrca
相关产品推荐
相关产品推荐

