[转]吸引住妹子的trace_event技术
2021-09-15 09:05:00 Author: blog.csdn.net(查看原文) 阅读量:35 收藏

一天,有人报上了一个问题,发现一台服务器上空闲内存不足,slab占用了40多G,想知道什么原因,然后拉我进入在线会议远程看看。

我进入会议常规检测一番,于是想看看哪个slab占用内存比较多,直接上小脚本:

while sleep 1; do cat /proc/slabinfo | awk '{name=$1; size=$2*$4/4096; \
printf "%s %lu\n", name, size;}' | sort -n -r -k 2 | head -n 20;  \
 echo "--------------";done;

结果显示类似如下:

TCPv6 9347580  (单位:4K, 大约36G)

inode_cache 3519

ext3_inode_cache 3427

dentry 2285

kmem_cache 1389

sysfs_dir_cache 832

buffer_head 682

radix_tree_node 675

vm_area_struct 505

size-2048 500

task_struct 496

size-1024 464

...

可以看到TCPv6占用了36G左右, 然后会议上有个负责业务应用的妹子问,能知道是哪个进程占用的吗?

我装着不忙地喝了一口百岁山,于是派上trace_event出场:(以下操作过程中全场安静,都盯着我的键盘输出)

首先通过/proc/slabinfo 查看到TCPv6 object size=1856,然后:

cd /sys/kernel/debug/tracing/
echo 'bytes_alloc==1856' >events/kmem/kmem_cache_alloc/filter
echo 1 > ./options/stacktrace
cat ./trace

从./trace中打印出的堆栈信息和进程号,确认是他们的业务进程xxx正在干什么事(已排除内存泄漏)

这时候妹子抢占了会上所有人的讲话,笑着说:"能把history打印出来吗?",连续提醒了我三次,说想学习一下。<真是一个好学的童鞋 :-)>

这个时候本想顺道宣传一下我在阅码场发布的tracers视频课程,视频课程里面各个traces都有很详细的讲解和案例.

但是工作时间要体现一定的专业和严肃性,并没有宣传,如果她有机会能看到这篇公众号之后再去订阅会更好:-)

最后我又喝下一口百岁山, 敲下history | tail -20 之后独自退出了会议...

tracers视频课程订阅二维码:

---end---


文章来源: https://blog.csdn.net/21cnbao/article/details/120320357
如有侵权请联系:admin#unsafe.sh