출력에서 top
프로세스의 RES는 프로세스의 코드, 데이터 및 RAM의 공유 라이브러리를 포함하여 프로세스가 차지하는 RAM 부분이라고 들었습니다.
프로세스의 RES에 프로세스의 캐시와 버퍼가 포함되어 있는지, 포함되어 있지 않은지 알고 싶습니다.
프로세스의 USED에 대해서도 비슷한 질문이 있습니다. 즉, 프로세스의 USED에 프로세스의 캐시와 버퍼가 포함되거나 제외됩니까?
의 출력에는 free
캐시와 버퍼에 대한 항목이 있고 단일 프로세스가 아니라 모든 프로세스에 대해 모두 계산되어 사용에서 제외되기 때문에 이 문제가 발생합니다.
감사해요.
답변1
파일 캐시와 모든 버퍼는 어떤 방식으로든 프로세스와 연관되지 않습니다. 두 프로세스가 파일에 액세스하여 파일이 캐시에 저장되면 커널은 누가 파일에 액세스했는지 기억하지 못합니다.
/proc/meminfo
그것을 봐설명하다.
프로세스가 차지하는 메모리가 무엇으로 구성되어 있는지 확인하려면 각 프로세스의 파일 maps
과 디렉터리를 보면 됩니다. 여기에서 어떤 라이브러리가 해당 라이브러리의 일부인지, 매핑 파일도 찾을 수 있지만 이러한 파일은 메모리를 차지하지 않고 프로세스의 메모리 공간에 매핑될 뿐입니다.smaps
/proc/PID
답변2
예. cached
적어도 내 경우에는 매핑된 파일에 캐시를 사용할 때 프로세스에 다음이 포함됩니다.
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이 매핑된 파일의 전체 크기여야 하는지 확인할 수 있습니다.
불행히도 인터넷에서 이 주제에 대한 유일한 질문에서 찾을 수 있는 유일한 대답은 내 시스템에서 보고 있는 내용을 설명하지 못합니다. 이를 알아내는 데 꽤 시간이 걸렸습니다. 여기에서 더 많은 사람들을 도울 수 있기를 바랍니다.