使用 awk 解析 /proc/pid/smaps

Posted

技术标签:

【中文标题】使用 awk 解析 /proc/pid/smaps【英文标题】:Parsing /proc/pid/smaps with awk 【发布时间】:2012-10-29 08:39:46 【问题描述】:

我正在寻找一个简短的 awk / sed 脚本来从 proc/smaps 文件中提取 rss 信息,该文件具有以下记录格式:

77f73000-77f74000 rw-s 00000000 fd:00 230116     /var/lib/mylib.so
Size:                 4 kB
Rss:                  4 kB
Shared_Clean:         0 kB
Shared_Dirty:         0 kB
Private_Clean:        4 kB
Private_Dirty:        0 kB

我正在寻找的输出是:

/var/lib/mylib.so 4
如果记录可以按 rss 大小排序(大块优先),则额外奖励

提前致谢, 阿夫纳

【问题讨论】:

【参考方案1】:

不确定您的选择标准,但这仅在列出实际路径时匹配:

awk 'NF > 3  f = $NF  $1 ~ /^Rss/ && f ~ /\//  print f, $2 '

追加sort -nr -k2,2 对第二列进行降序排序。

【讨论】:

【参考方案2】:

Perl 解决方案:

perl -ne '
    if (/^Size:\s+([0-9]+)/) 
        $h$f = $1
     elsif (m\s(/.*)$) 
        $f = $1
    
    
    print "$_\t$h$_\n" for sort  $h$a <=> $h$b  keys %h
    ' input.txt

工作原理:如果读取以 Size 开头的行,请记住最后提到的文件的编号。否则,如果提到文件,请记住它。在文件末尾,将记住的对按数字排序并打印出来。

【讨论】:

以上是关于使用 awk 解析 /proc/pid/smaps的主要内容,如果未能解决你的问题,请参考以下文章

/proc/pid/smaps 中的 pss 是啥意思

linux /proc/$pid/smaps 文件中各个字段代表啥含义

dumpsys meminfo数据与smaps文件对应关系

面试系列——内存,CPU,帧率采集原理总结

面试系列——内存,CPU,帧率采集原理总结

JVM内存问题定位