linux下产生的core文件与堆栈大小的关系

本文探讨了一起在Linux环境下C++开发中遇到的问题,即生成的core文件异常大(120G),这与RocketMQ客户端模块相关。作者发现每个线程创建后core文件增加400M,与默认堆栈大小相符。通过研究`pthread_attr_setstacksize`函数,调整线程堆栈大小成功降低了core文件大小。问题最终揭示为同事为解决其他问题而修改了堆栈大小。文中提供了`pthread_attr_setstacksize`的使用示例,供读者参考。
摘要由CSDN通过智能技术生成

本人第一次写博客,写得不好请多包涵。

最近碰到一个事情,公司开发的时候(linux下的c++开发),生成的core文件多达120多G,导致调试起来非常艰难。工程中用到了rocketmq的客户端模块,发现这部分模块启动前后相差了100G,刚好这一模块是本人添加的,按道理由我查找原因。


通过assert(0)添加断言的方法,本人发现在生产者或者消费者启动(即调用start()函数)前后,产生了如此巨大的core文件差异。继续往里调试,发现每一个线程被创建之后,产生的core文件相差了400M,结果发现跟操作系统默认设置的堆栈大小相同。通过查询相关线程函数。发现pthread_attr_setstacksize是用于为线程设置堆栈大小的函数。


通过使用修改操作系统的默认堆栈大小和程序中静态调用pthread_attr_setstacksize函数的方法,果然将core文件的大小降下来了。


ps:本次事件是一个乌龙事件,是一位同事为了解决另一个问题修改了堆栈大小。


由于本人对于pthread_attr_setstacksize并不是太熟悉,在此处添加一段pthread_attr_setstacksize函数的使用代码(摘自网上http://blog.csdn.net/godleading/article/details/7997630)。供自己和其他并不是太熟悉这个函数的朋友学习。


pthread_t thread_id;  
int ret ,stacksize = 20480; /*thread 堆栈设置为20K,stacksize以字节为单位。*/  
pthread_attr_t attr;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值