zeerd's blog     Article     Search     About     Tags     Pebble     Feed

闲来生雅趣,无事乐逍遥。对窗相望雪,一盏茶香飘。

根据进程ID获取Cached Memory情况

#Cached #Linux #Memory #maps


首先,利用/proc/pid/maps可以获取到进程关联的文件的列表。 其次,OpenSUSE中提供了一个工具fincore(包含在linux-ftools这个软件包中)可以获取指定文件的Cache情况。

综合这两个工具,我做成了如下脚本,用于查看指定pid对应进程的Cached Memory。

#!/bin/bash

pid=$1

FILES=""

while read line
do
    parts=($line)
    if [ -e ${parts[5]} ] ; then
        FILES=$FILES" "${parts[5]}
    fi
done < /proc/${pid}/maps

FILES=$(echo ${FILES} | sed 's/ /\n/g' | sort -u | awk '{printf("%s ",$1)}')

linux-fincore --pages=false --summarize --only-cached ${FILES}

参照:

linux-ftools’ Source Code

How can you tell whether a file is being cached in memory in linux?

Help! Linux ate my RAM!

How do you empty the buffers and cache on a Linux system?

Drop a specific file from the Linux filesystem cache?

Understanding and optimizing Memory utilization