一天,有人報上了一個問題,發現一臺服務器上空閑內存不足,slab占用了40多G,想知道什么原因,然后拉我進入在線會議遠程看看。
我進入會議常規檢測一番,于是想看看哪個slab占用內存比較多,直接上小腳本:
while sleep 1; do cat /proc/slabinfo | awk ‘{name=$1; size=$2*$4/4096; printf “%s %lu
”, 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/filterecho 1 》 。/options/stacktracecat 。/trace
從。/trace中打印出的堆棧信息和進程號,確認是他們的業務進程xxx正在干什么事(已排除內存泄漏)
這時候妹子搶占了會上所有人的講話,笑著說:“能把history打印出來嗎?”,連續提醒了我三次,說想學習一下。《真是一個好學的童鞋 :-)》
這個時候本想順道宣傳一下我在閱碼場發布的tracers視頻課程,視頻課程里面各個traces都有很詳細的講解和案例。
但是工作時間要體現一定的專業和嚴肅性,并沒有宣傳,如果她有機會能看到這篇公眾號之后再去訂閱會更好:-)
最后我又喝下一口百歲山, 敲下history | tail -20 之后獨自退出了會議。..
責任編輯:haq
-
服務器
+關注
關注
12文章
9367瀏覽量
86275 -
內存
+關注
關注
8文章
3074瀏覽量
74456
原文標題:吸引住妹子的trace_event技術
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論