Hello!
2015-09-23 16:32 GMT+08:00 yakantosat:
> 最近发现一个问题,ngx_lua 中开启了两个日志文件,access 和 error。用 tsar 工具查看内存的使用情况的时候发现,cache
> 这一项的数值会不断增长,而 access 和 error 的日志大小相加就是这个 cache 的值。一旦把这两个文件的内容清空,cache
> 就会基本为0.请问这是什么问题呢?
理解这样的问题需要了解一些现代操作系统内核的知识。
像 Linux 这样的操作系统的内核一般会尽可能地使用系统中所有空闲内存用于 page cache,以尽可能地减少硬盘 I/O.
你如果关心用户进程的内存使用,应该只需要关心用户态的内存占用(比如 RES 这样的指标)。OS 内核的 page cache
的内存使用是无害的,同时也是对用户进程透明的。
> 日志刷到磁盘上之后,应该会从内存中清除才对。
>
由于现代 OS 出于性能方面的考虑,经常会使用 page cache 之类的机制来缓冲文件 I/O,所以读写通常都会在 page cache
里保留内存副本,以提升 I/O 吞吐量和降低延时。
Regards,
-agentzh