【内存优化】栈上局部变量定义过大导致设备oom

本文详细介绍了由于栈上局部变量过大导致的OOM问题,通过分析进程的smaps信息、线程栈大小,定位到特定函数栈,并提供了解决方案,将大局部变量改用堆内存,从而优化内存使用。
摘要由CSDN通过智能技术生成

linux疑难问题排查实战专栏,分享了作为公司专家,在解决内存、性能、各类死机等疑难问题的排查经验,认真学习可以让你在日后工作中大放光彩。

   

     设备执行出现OOM,可能有很多原因导致的,堆内存泄漏、glibc缓存过大、业务消耗过多本身内存不足等,本文分享的是由于栈上局部变量定义过大导致oom的问题,以及这种问题的定位和解决办法。

        看到这里,读者可能会疑问,栈是编译器自动分配和释放的,即便定义过大,接口执行完,内存也就释放了,并且栈上也不存在内存泄漏等问题,怎么会导致oom呢?这里我先介绍一下遇到的问题,读者可以思考一下,遇到下面这个问题导致的oom,目前自己现有的知识是否可以解决。

        本文遇到的问题是:上层创建了一个线程池,包含20个线程,所有线程实体一样,都会调用接口funA()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值