在输出中top
,我听说进程的RES是进程占用的RAM的一部分,包括进程在RAM中的代码、数据和共享库。
我想知道一个进程的RES是否包含或者不包含该进程的cache和buffer?
进程的USED有类似的问题,即进程的USED是否包括或排除进程的高速缓存和缓冲区?
我有这个问题,因为在 的输出中free
,有缓存和缓冲区的项目,它们都被计数并从使用中排除,尽管不是针对单个进程而是针对所有进程。
谢谢。
答案1
文件缓存和所有缓冲区不以任何方式与进程关联。如果两个进程访问一个文件,导致该文件位于缓存中,则内核不会记住谁访问了该文件。
看看/proc/meminfo
它的解释。
要查看进程占用的内存由什么组成,您可以查看每个进程的文件maps
和smaps
目录。/proc/PID
在那里你会发现哪些库是它的一部分,还有映射文件,但这些文件不占用任何内存,它们只是映射到进程的内存空间中。
答案2
是的。cached
至少在我的情况下,当缓存用于映射文件时,进程 RES 包括:
top - 05:07:51 up 7 days, 6:37, 1 user, load average: 0.37, 0.28, 0.22
Tasks: 219 total, 1 running, 125 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 64463540k total, 63729264k used, 734276k free, 97804k buffers
Swap: 0k total, 0k used, 0k free, 14275740k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4772 druid 20 0 96.8g 57g 11g S 0.0 93.9 254:51.01 java
您可以看到,如果它们互斥,则缓存的 57g+14275740k 将超过总数 64463540k。
您可以通过查看 /proc/PID/status 来验证 RssFile 应该是映射文件的总大小。
不幸的是,我在互联网上能找到的关于这个主题的唯一问题下的唯一答案无法解释我在系统上看到的内容,我花了相当长的时间才弄清楚这一点,希望我可以在这里帮助更多的人。