自动 ionice 每个 imap 进程

自动 ionice 每个 imap 进程

我想在进程启动时对其进行离子化。

在我们的托管环境中,我们使用旧的 Parallels Confixx 服务器。 (是的,我知道,Confixx 已经过时了,但这不是问题所在)。

我们使用快递来发送邮件,有时会出现该/usr/bin/imap Maildir进程耗尽整个 I/O 的情况,这也会导致 CPU 负载过高。我们总是手动离子化 ( ionice –c 3 –p [PID]) 进程,并且 I/O 下降。自动 ionice 每个 imap 进程的最佳方法是什么?我对快递邮件服务器不是很有经验。

答案1

ionice只需在 IMAP 主进程上运行即可。该设置由子进程继承。

也许它还有助于find /path -printf""每分钟左右在所有邮件目录上运行一次,以将元数据保留在页面缓存中(除非数据太多,并且您需要更多缓存来存储其他内容)。

答案2

作为另一种解决方案,您可以将快递过程分开组组层次结构并指定参数(在您的情况下为 IO 带宽)块IO控制器

我发现可以从中得到的特别简单的例子这个链接

此外,您还可以指定其他控制器参数,例如 cpuact、内存、net_prio。您可以在以下位置找到更多内容Linux 内核文档

答案3

主进程上的 ionice 似乎不起作用,所以我修改了“courier-imap”和“courier-imap-ssl”的初始化脚本,这似乎起作用了:

case "$1" in
    start)
    if [ "$START" = "yes" ]; then
            log_daemon_msg "Starting $PROGRAM" "$DAEMON"
            umask $IMAP_UMASK
            ulimit -v $IMAP_ULIMITD
            /usr/bin/env - /bin/sh -c " set -a; \
            bindir=${bindir}; \
            . ${sysconfdir}/imapd; \
            if [ "$SSLCONFIG" ]; then . ${sysconfdir}/imapd-ssl; fi; \
            IMAP_STARTTLS=$IMAPDSTARTTLS ; export IMAP_STARTTLS ; \
            PROXY_HOSTNAME=$PROXY_HOSTNAME;
            TLS_PROTOCOL=$TLS_STARTTLS_PROTOCOL ; \

            ionice -c3 /usr/sbin/courierlogger -pid=$PIDFILE -start $LOGGEROPTS \

            $TCPD -address=$ADDRESS \
                    -maxprocs=$MAXDAEMONS -maxperip=$MAXPERIP \
                    $TCPDOPTS \
                    $PORT ${libexecdir}/courier/imaplogin \
                            ${bindir}/imapd $MAILDIRPATH"
            log_end_msg 0
    fi

如果有人有改进建议,请告诉我。

相关内容