大数据计算节点内存泄漏

异常问题:

Hadoop集群计算节点服务器内存短时间内持续增长,使用量超过90%。

关键结论:

系统 Slab 占用高达 416 GB,其中:

  • 超过 98% 都来自 kmalloc-4096

  • 这是 内核层内存泄漏

  • 和应用进程无关,和 ps 看不到这些内存的 RSS 是一致的。

排查过程:

1、查看所有占用内存的进程,并输出到文件进行排查。

ps aux --sort=-%mem > mem_usage.txt

过滤所有application的进程数量,kworker (kernel worker)进程数量达到1744,相比正常服务器超出了1000+:

[root@hdp138-time-pro ~]# grep "application" mem_usage.txt | wc -l

345

[root@hdp138-time-pro ~]# grep "worker" mem_usage.txt | wc -l

1744

[root@hdp138-time-pro ~]# wc -l mem_usage.txt

2771 mem_usage.txt

2、查看服务器真实使用的内存情况:

[root@hdp138-time-pro ~]# ps -eo rss | awk 'NR>1 {sum+=$1} END {printf "Total RSS: %.2f GB\n", sum/1024/1024}'

Total RSS: 515.09 GB

 [root@hdp138-time-pro ~]# free -h

total used free shared buff/cache available Mem

1.0T 952G 3.1G 1.9G 51G 49G Swap: 31G 31G 12K

所有应用进程总内存 515.09GB,但是系统显示使用952GB,多出了400+GB。

3、查看内核、缓存等占用:cat /proc/meminfo

项目数值 (GB)说明
MemTotal1007.55 GB物理总内存
MemFree2.24 GB完全未分配的内存(非常少)
MemAvailable46.96 GB可以立即用于新程序的内存
Cached41.70 GB页面缓存(可回收)
SwapUsed31.99 GBSwap 已全部用满(压力大)
Slab416.64 GB内核 slab 内存:占用巨大
AnonPages514.91 GB应用程序匿名内存(进程堆/栈等)

4、查看具体哪个 slab 类型占了这么多

cat /proc/slabinfo | sort -k3 -nr | head -20

kmalloc-4096 占用最严重(约 4096 字节 × 1.07 亿条)

kmalloc-4096 106996631 106996691 4096

  • 单位大小:4KB

  • 活跃对象数:约 1.07 亿

  • 总内存占用:约 106996631 × 4KB = 408.95 GB

这一个 slab 项 就解释了之前 slab 区占用 416 GB 的大部分来源

关键结论:

系统 Slab 占用高达 416 GB,其中:

  • 超过 98% 都来自 kmalloc-4096

  • 这是 内核层内存泄漏

  • 和应用进程无关,和 ps 看不到这些内存的 RSS 是一致的。

是不是在找解决方案。等啥呢,重启服务器呀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一一一帆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值