在Unix / Linux上限制内存使用并尽量减less交换抖动

我有一些机器,我用来运行大量的作业,我试图限制作业的数量,以便不超过机器的可用RAM。 偶尔我会估计一些作业将花费多less内存,并且机器开始抖动交换文件。 我通过发送kill -s STOP来解决这个问题,以便它能够被换出。

有谁知道一个实用程序将监视一个特定名称的进程的服务器,然后暂停最小的内存占用是一个所需的内存消耗达到一个理想的门槛,使较大的人可以运行和完成的最低交换文件抖动? 暂停的过程需要在一些现有的过程完成后恢复。

看看thrash-protect (用Python编写的守护进程)

  • 它不会完全按照你想要的方式进行,但是它确实在整个服务器中识别交换抖动行为,然后尝试识别导致这种情况的进程,并向它们发送STOP信号以冻结它们。
  • 然后再发送一个CONT信号来解冻它们。

如果您不想按原样使用它,则可能是自定义脚本的基础,该脚本会以最小的内存占用来暂停进程。

手工操作

对于那些不喜欢自动化工具的用户,可以使用htop来查找百分比最高的内存使用情况,并使用kill -s STOP <pid>发送STOP信号。 之后,您可以发送kill -s CONT <pid>以恢复它们。 但是,当服务器发生抖动时,您可能需要等待很长时间才能执行htop和kill。

问题

当机器由于内存压力而发生抖动时,尽pipeCPU利用率很低,但通常情况下仍然会看到非常差的吞吐量。

为了诊断这一点:

  • 运行一个简单的shell命令需要几十秒甚至几分钟吗?
  • top还是htop ,是否有较高的交换使用率,高负载平均和较低的CPU使用率?
  • 有很高的换入/换出率吗? 运行vmstat 1并查找si等值,特别是每秒钟2到4位数字,没有零交换秒。