bad_alloc问题定位

本文介绍在使用Apache ab工具进行服务器压力测试时遇到的bad_alloc异常问题及其解决方案。通过对栈空间和堆空间的分析,最终通过调整系统栈空间大小解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

用apache的ab攻击对服务器进行压力测试的时候,请求数过大就会出现下面的问题
-#ab2 -c 18000 -n 100000 http://192.168.27.125/index.html
terminate called after throwing an instance of ‘std::bad_alloc’
what(): std::bad_alloc

思考

测试的时候,发现内存服务器程序所占内存并没有太高,才3.3%,算很低了,那为什么内存不足了。
进程的内存空间主要有栈区和堆区,开始怀疑是不是堆空间不足的问题,于是排查了一下,发现mallo申请的内存并不太多。
那么就很有可能是栈的问题了,因为为处理大量的连接,在函数里都有缓存区变量(数组),一般都比较大。

看看系统内存分配

通过命令ulimit -a我们看到系统设置的进程中栈空间还是比较小的,是8192K,而堆区空间则相对较大,达到1463188K。
这里写图片描述

增加栈空间

好,现在把栈空间设置的大一点,再测试一下
-# ulimit -s 8192000
这里写图片描述
好,再测试一把看看,问题没啦
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值