You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Ubuntu至22.04后Dovecot无法启动,如何提升ARG_MAX?

Ubuntu 20.04升级至22.04后Dovecot启动失败:参数列表过长问题解决

问题描述

系统升级后执行启动命令时出现报错:

$ sudo dovecot -F
doveconf: Fatal: execvp(/usr/sbin/dovecot) failed: Argument list too long

当前用户与root用户的ARG_MAX值存在差异:

$ sudo getconf ARG_MAX
2097152
$ getconf ARG_MAX
6291456

已尝试操作

  • 在/etc/security/limits.conf中添加文件描述符限制:
    root    soft    nofile      65535
    root    hard    nofile      65535
    
  • 在dovecot.service中取消注释LimitNOFILE=65536
  • 尝试通过ulimit、sysconf、exec排查问题,但未解决报错

解决方案

1. 提升root用户的ARG_MAX值

ARG_MAX是内核限制的命令行参数与环境变量总大小,可通过以下方式修改:

  • 临时生效:执行命令立即调整
    sudo sysctl -w kernel.arg_max=6291456
    
  • 永久生效:编辑/etc/sysctl.conf文件,添加或修改配置:
    kernel.arg_max=6291456
    
    执行sudo sysctl -p让配置立即生效

2. 排查Dovecot配置导致的参数膨胀

若修改ARG_MAX后仍报错,需检查配置是否存在冗余:

  • 合并重复配置:从doveconf -n输出可见,有两个重复的local_name mail.*.nl块(分别对应imap和pop3),可合并为单个配置块减少参数:
    local_name mail.*.nl {
      ssl_ca = </etc/ssl/certs/ca-certificates.crt
      ssl_cert = </etc/letsencrypt/live/*.nl/fullchain.pem
      ssl_key = # hidden, use -P to show it
      protocol imap {
      }
      protocol pop3 {
      }
    }
    
  • 跳过doveconf直接启动:执行sudo /usr/sbin/dovecot -F,判断是否是doveconf生成参数时导致长度超标
  • 检查systemd服务环境变量:编辑dovecot.service,清理无关环境变量注入

验证操作

修改配置后执行以下命令验证状态:

sudo dovecot -F
sudo systemctl restart dovecot
sudo systemctl status dovecot

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:20:01