메모리 128GB 중 102GB가 cache 로 잡혀 있어 어떤 파일이 저장되어 있는지 궁금해서 검색 함.
사용 툴
- perf
- 리눅스 성능 프로파일링 툴
- 커널 이벤트 추적은 메모리 읽는것과 관련 된 mm_filemap_add_to_page_cache 사용
커널 이벤트 추척
- mm_filemap_add_to_page_cache 이벤트를 20초간 녹화
# perf record -a -e filemap:mm_filemap_add_to_page_cache sleep 20
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.450 MB perf.data (1888 samples) ]
로그 확인
- PID 6261 이 cronolog 명령이 노드 c832de 에 파일을 매핑한 것을 확인함.
- lsblk 를 사용하여 해당 파일이 사용중인 device 확인.
# perf script
cronolog 6261 [014] 39048727.243978: filemap:mm_filemap_add_to_page_cache: dev 8:2 ino c832de page=0xffffe4c97839dc00 pfn=18446714152689458176 ofs=26689536
cronolog 6261 [014] 39048727.338813: filemap:mm_filemap_add_to_page_cache: dev 8:2 ino c832de page=0xffffe4c97e9b3600 pfn=18446714152796501504 ofs=26693632
cronolog 6261 [014] 39048727.755793: filemap:mm_filemap_add_to_page_cache: dev 8:2 ino c832de page=0xffffe4c96ac9fe80 pfn=18446714152464023168 ofs=26697728
.. 생략...
파일 검색
- inode 를 사용하여 매핑 된 파일 검색
- inode가 삭제 된 경우 파일 이름이 검색되지 않음
# find / -mount -inum $((0xc832de))
/Temp/tomcat/logs/test_2023-08-25-10.out
아래 스크립트를 통해 로그 확인과 검색을 동시에 할 수 있음 (참고 링크에서 가져온 내용)
# perf script | grep -v "dev 0:" | \
awk '
{
match($0, "ino ([^ ]+)", a)
print a[1]
}
' | sort | uniq -c | sort -n | \
while read count inode; do
echo "$count $inode $(find / -mount -inum $((0x$inode)))"
done
참고: https://unix.stackexchange.com/questions/106478/how-to-see-buffered-and-cached-data