有没有办法踢出kswapd并让它交换页面?

有没有办法踢出kswapd并让它交换页面?

尽管我已将 swappiness 设置为 100 并启用了交换,但没有任何内容被交换出。这可能是因为我目前的内存压力并不大。但出于测试目的,我想强制 kswapd 尽可能多地交换。即使没有高内存压力,有没有办法让它发挥作用?

答案1

据我所知,但您可以通过分配(和使用)一些内存来强制它进行交换。

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    if (argc < 2)
      return 1;
    int megs = atoi(argv[1]);
    if (megs <= 0)
      return 2;
    int i;
    for (i=0; i<megs; i++) {
        void *data = malloc(1024*1024);
        memset(data, 1, 1024*1024);
    }
    getchar();
    return 0;
}

将其保存到eater.c并编译为gcc -o eater eater.c. (或者无论您最喜欢的编译器的命令行是什么。)然后只需使用兆字节作为参数来运行它。按 Enter 键释放全部内容。

警告:这将运行快速地直到您真正需要交换为止。然后,如果您消耗了太多 RAM,您的整个系统将陷入停顿/开始出现 OOM/随机应用程序将开始失败。

相关内容