限制linux服务的CPU / IO使用

我曾经看到EXIM在用户/脚本的10000个电子邮件加载时崩溃了一个系统。 我想知道是否有办法限制它在系统上的使用,并保护系统或服务免受滥用。

exim可以做一些事情来减less负载。

  1. 检测高负载,并对脚本生成的大量传入消息进行进出口队列,而不是尝试传递它。 以下选项与此相关:
     queue_only_load如果负载很高,不立即交付
     queue_only_load_latch不要重新评估每个消息的负载
     queue_only_override允许命令行覆盖
    
  2. 您可能习惯于使用grep或使用exigrep从/var/log/exim/main.log文件(或者为您的发行版命名)中提取信息。 默认情况下,Exim维护此日志的每个消息副本,将每个消息的邮件日志分组到单个文件中,并在邮件发送时将其删除。 您可以使用'exim -Mvl QUEUEID'查看这些消息。 或者关掉它:

    在负载较重的系统上,可能需要禁用每条消息日志,以减less磁盘I / O。 这可以通过设置message_logs选项为false来完成。

  3. 使用syslogtesting而不是本地login到远程服务器。 这会稍微减less磁盘I / O,尽pipe我认为与大量创build电子邮件等产生的I / O相比,它会变得苍白无力。
  4. 当你完成将邮件注入邮件服务器时,负载将会下降。 在这一点上,启动一堆队列跑步者。 Exim以缓慢传递队列中的消息而闻名,但如果负载较低,则启动足够的传递进程以运行队列并更快地传递邮件没有任何问题,直到您的负载变为抑制点(通常表示磁盘I / O利用率达到饱和)。 尝试一次创build10个队列跑步者。 我怀疑你可以做100或150没有过多的负载。 'iostat -x -d 1'是你的朋友,以确保磁盘I / O是或不是瓶颈。
  5. validation出站邮件服务器的DNS是正向还是反向。 validation收件人服务器看到的IP是否与您认为的相同,并且还必须是正向和反向可parsing的,否则当收件人在您的IP(针对其日志等)执行dns查找时,您将会减速。

我build议你检查工具'nice'和'ionice',以减less对CPU使用率和其他要求过程的影响,以减less对IO任务的影响。 (如果您不想使用ionice进行磁盘吞吐量调节,则需要使用CFQ调度程序)

或者,您可以检查内核cgroups子系统。 Cgroups支持创build硬性和软性内存限制以及限制磁盘使用。 (CFQ调度程序需要用于磁盘使用率调节)

你可以用PAM Limits ( /etc/security/limits.conf )或ulimit来完成你所需要的。