vaynedu / nginx-1.16.0

学习nginx架构设计与实现,翻译nginx的源码,写nginx的测试代码, 在issue中记录nginx的精妙设计及其常见问题https://github.com/vaynedu/nginx-1.16.0/issues 。 myexercise内存池、哈希表、链表、md5、crc测试代码,mymodule中有hello自定义模块代码。通过nginx将自己整个知识体系连接起来
https://github.com/vaynedu/nginx-1.16.0/issues
BSD 2-Clause "Simplified" License
12 stars 2 forks source link

pagecache清理? #52

Open vaynedu opened 5 years ago

vaynedu commented 5 years ago

posix_fadvise 非常nice的一个函数,一般用来操作内核页和磁盘文件的行为

  posix_fadvise - predeclare an access pattern for file data

   #include <fcntl.h>
   int posix_fadvise(int fd, off_t offset, off_t len, int advice);

posix_fadvise 最大的用处就是可以用来清理pagecache,和命令echo 3 > /proc/sys/vm/drop_caches 是一样的效果。 一般要是我觉得机器内存不够用,导致高负载,自己先上去执行该命令while true ; do echo 3 > /proc/sys/vm/drop_caches; sleep 20s; echo drop_cache; done

C语言的实现代码也很简单

int clear_pagecache(int fd)
{
    if(fd < 0)
    {
        printf("fd invalid\n");
        return -1;
    }

    int ret = posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED);
    if(ret)
    {
        printf("posix_fadvise failed\n");
        return -2;
    }

    return 0;
}