![有没有办法踢出kswapd并让它交换页面?](https://linux22.com/image/17083/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E8%B8%A2%E5%87%BAkswapd%E5%B9%B6%E8%AE%A9%E5%AE%83%E4%BA%A4%E6%8D%A2%E9%A1%B5%E9%9D%A2%EF%BC%9F.png)
尽管我已将 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/随机应用程序将开始失败。