我想在进程启动时对其进行离子化。
在我们的托管环境中,我们使用旧的 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
如果有人有改进建议,请告诉我。