crash+awk:统计vma的大小

简介: crash+awk:统计vma的大小

正常的vm命令输出:

crash_new> vm
PID: 2380     TASK: ffffff88414bddc0  CPU: 5    COMMAND: "xxx"
       MM               PGD          RSS    TOTAL_VM
ffffff880a997c00  ffffff8825747000  16565804k  44535380k
      VMA           START       END     FLAGS FILE
ffffff8801f09258 5eef950000 5eef97b000     71 /vendor/bin/bdo
ffffff8801f09e10 5eef97b000 5eef9d9000     75 /vendor/bin/bdo
ffffff8801f09bb8 5eef9d9000 5eef9df000 100071 /vendor/bin/bdo
ffffff8801f09320 5eef9df000 5eef9e0000 100073 /vendor/bin/bdo
ffffff881552eed8 5eefa40000 5eefa43000 100073 /vendor/bin/bdo
ffffff8a7bc51bb8 74df600000 7e65e00000 100073
ffffff8a8f24abb8 7e65f08000 7ee3b08000 100073
ffffff8a82ec3578 7ee3b08000 7eea008000 100073
ffffff8024f17898 7eea008000 7eeab92000     70
ffffff8829eb5708 7eeab92000 7eeab94000 100073
ffffff8024f17a28 7eeab94000 7eeb296000     70
ffffff8801e5c4b0 7eeb296000 7eeb298000 100073
ffffff8829eb5898 7eeb298000 7eec132000     70
ffffff8826be2708 7eec132000 7eec134000 100073
ffffff8801e5c000 7eec134000 7eed612000     70
ffffff882575ca28 7eed612000 7eed614000 100073
ffffff881e308898 7eed614000 7eee57a000     70
ffffff882575c960 7eee57a000 7eee57c000 100073
ffffff881df37e10 7eee57c000 7eef008000     70
ffffff8801e5c190 7eef008000 7eef009000 200070
ffffff8801e5ce10 7eef009000 7eef105000 200073
ffffff8801e5cbb8 7eef105000 7eef107000 200070
ffffff882592b3e8 7eef107000 7eef203000 200073
ffffff8801e5c708 7eef203000 7eef205000 200070
ffffff882592b0c8 7eef205000 7eef301000 200073
ffffff882592b000 7eef301000 7eef303000 200070
ffffff880a27d7d0 7eef303000 7eef3ff000 200073
ffffff882592b578 7eef3ff000 7eef400000 200070
ffffff88299e13e8 7eef400000 7eefe00000 100073
ffffff882654f708 7eefe08000 7eefe09000 200070
...

有个需求,我想统计覆盖的虚拟地址最大的几个vma。

可以参考下面的命令:

vm | awk 'NR>=5 {vmas[$1]=strtonum("0x"$3)-strtonum("0x"$2)} END {for (vma in vmas) {printf "%s %x MB\n", vma, vmas[vma]/1024/1024}}' | sort -n  -k 2

这里用到的awk工具,其中由于vm列出的地址范围是按16进制输出的,所以需要使用strtonum先转换为10进制,然后再做减法。

当找到范围最大的vma后,可以使用下面的方法来统计这个vma实际消耗的物理页:

vm -P ffffff8a7bc51bb8 | awk 'NR>=5' | grep -v "SWAP" | grep -v "mapped" | wc -l

正常来说,每一行对应的物理页,知道了行数,也就可以很容易得到占用的物理内存大小。

相关文章
|
6月前
|
Unix Java Linux
Linux脚本中的字符处理与awk编程|WC统计
Linux脚本中的字符处理与awk编程|WC统计
91 0
|
6月前
|
移动开发 Linux Windows
【Linux专题_05】wc -l 命令统计行数为何不准
【Linux专题_05】wc -l 命令统计行数为何不准
177 3
|
Linux PHP Perl
巧用 awk 批量杀进程
我需要批量杀死某台机器的 PHP 进程,该怎么办?如果是一个进程,那就好办了,ps -ef | grep php,找到 PID 然后 kill -9 PID……那批量怎么搞呢?
82 0
|
SQL 自然语言处理 前端开发
wc 统计已过时,cloc 每一行代码都有效
我们通常用代码量来评判一个程序员技术的高低或一个项目的大小,阅读新项目源码时,也需要了解其代码量,心里有个预期。那如何统计代码量呢?
wc 统计已过时,cloc 每一行代码都有效
|
Perl
使用 awk 命令统计文本
下面只是在工作中可能会遇到的一个场景,所以记录下来,如果小伙伴有更合适的方式来统计计算,欢迎留言。
244 0
|
Linux
linux|wc统计行数
wc是什么?统计行数利器(例如可以统计文件的行数,进程的个数)。 为什么使用wc?方便统计文本及进程等信息。 怎么用?它和管道符|一块用 image.png image.png
2582 0
[20171231]iostat -x命令诊断解析.txt
[20171231]iostat -x命令诊断解析.txt --//使用iostat诊断IO问题,里面的一些输出含义经常忘记,做一个记录: 输出信息的含义 rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读         取请求读取的是相同Block的数据,FS会将这个请求合并Merge); wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
891 0