使用 Linux /proc/meminfo 避免通过交换造成服务器过载

使用 Linux /proc/meminfo 避免通过交换造成服务器过载

我正在尝试找到一个指标来告诉我启动另一个估计使用 N 字节内存的进程是否会对系统性能产生不利影响。

我知道可以将/proc/meminfo字段MemFreeBuffersCached相加,得出程序可用的总内存。但是,我宁愿不挤出实际使用效果良好的缓存(工作负载导致磁盘热点)。

Active中的条目似乎/proc/meminfo可以与之进行比较以MemTotal确定有多少可用内存(通过交换空闲内容,或者首先释放内存),但我无法找到太多相关信息Active,所以我不确定。

我是否应该努力使Active记忆尽可能接近MemTotal但不超出?

还有其他方法可以估计运行另一个进程的内存行为吗?

答案1

经过实验,似乎活动内存是一个很好的指标。

我们观察到,当可用内存降至零时,由于不活跃内存开始被换出,页面调出频率会非常低(对于我们的系统,大约每秒 10 到 100 次)。实际交换会导致每秒页面调出次数增加 10 到 100 倍。我们最终选择每秒 1000 次页面调出作为临界点,以区分调出不活跃内存和实际影响性能的交换。

我们并没有成功地将活动内存推至总内存的 100%,但这主要是由于我们正在进行的工作的形式(我们首先遇到 CPU 上限)。我们决定,对于我们的工作负载,任何超过 75% 的活动内存都意味着我们不应该再启动新进程,尽管我们的负载限制和生成新进程的速度通常是实际限制我们进程创建的因素,因此这带来了严重的警告。

相关内容