需求:
在使用原版Apache AB进行压力/性能测试的过程中,当完成请求次数超过2千2百万的时候,Apache AB在统计“Sorted on total connect times”的时候,会出现由于数组越界而引起的Segmentation fault的问题。
解决方案:
1. 引发血案的原因:
首先,在32位机器上,int数据类型的最大值为2147483647。而Apache AB源码在统计“Sorted on total connect times”的时候,采用的代码如下所示:
/* Sorted on total connect times */
if (percentile && (done > 1)) {
printf("\nPercentage of the requests served within a certain time (ms)\n");
for (i = 0; i < sizeof(percs) / sizeof(int); i++) {
if (percs[i] <= 0)
printf(" 0%% <0> (never)\n");
else if (percs[i] >= 100)
printf(" 100%% %5" APR_TIME_T_FMT " (longest request)\n",
ap_round_ms(stats[done - 1].time));
else
printf(" %d%% %5" APR_TIME_T_FMT "\n", percs[i],
ap_round_ms(stats[(int) (done * percs[i] / 100)].time));
}
}
由于源码中 percs数组的值为:
int percs[] = {50, 66, 75, 80, 90, 95, 98, 99, 100};
因此, 当请求次数 done > 2千2百万,并乘与percs[7]=99的时候,已经超出int类型的最大值,因此导致stats数组越界,报出Segmentation fault的错误
2. 解决思路:
解决这个问题,其实很简单,只需要将源码:
ap_round_ms(stats[(int) (done * percs[i] / 100)].time)
替换为:
ap_round_ms(stats[(int) ((double)(done / 100) * percs[i])].time)
即可解决问题。
ok, 性能/压力测试工具Apache ab修改系列:part4 介绍完毕, 欢迎拍砖。转发请备注转自:100continue.iteye.com。 谢谢。
分享到:
相关推荐
在Linux环境下,编程时经常会遇到一个让开发者头疼的问题——段错误(Segmentation fault)。这个问题通常是由于程序尝试访问其不应该访问或者无法访问的内存区域而触发的。本文将深入探讨段错误的原因以及如何在...
在编程过程中,我们时常会遇到各种编译错误,其中一种比较棘手的错误是"collect2: fatal error: ld terminated with signal 11 [Segmentation fault], core dumped"。这个错误通常发生在尝试使用g++或gcc编译C++或C...
Segmentation fault在Linux中的产生,主要是由于以下几个方面: 1. **非法访问内存**:程序试图访问超出其分配范围的内存空间,例如越界数组访问、空指针解引用等。 2. **权限问题**:尝试以不正确的权限访问内存,...
当用户尝试在openEuler-22.03上安装并运行EasyConnect时,可能会遇到“segmentation fault”错误,这是典型的C/C++程序运行时异常,通常表示程序试图访问内存中无效的位置,可能是由于库文件不匹配或缺失导致的。...
"Linux下的段错误Segmentationfault产生的原因及调试方法经典" 在 Linux 系统中,段错误(Segmentation fault)是一种常见的错误,它是指访问了错误的内存段,或者访问了没有权限的内存区域,或者根本不存在对应的...
Segmentation Fault,通常简称为SIGSEGV,是Linux和其他类Unix操作系统中的一种错误,它发生在程序尝试访问其无权访问的内存区域时。这可能是由于多种原因造成的,如非法地址访问、指针越界、空指针解引用、内存泄漏...
//识别--pPath是成员变量保存车头照片路径 cv::Mat plateImage = cv::imread(pPath.toUtf8().data());//要识别的车牌照片路径(要清晰,正面) //定义一个容器存放识别结果 //RunPiplineAsImage()根据你提供的...
【C/C++中的段错误(Segmentation fault)】 在计算机编程中,特别是在使用C或C++这类低级语言时,段错误(Segmentation fault)是一个常见的运行时错误,它发生在程序试图访问其不应该访问的内存区域时。这些区域...
在使用HLS(High-Level Synthesis,高层次综合)进行C语言模拟时,如果遇到“hls-opencv.h”文件缺失并伴随“Segmentation fault”的错误,这通常涉及到OpenCV库在HLS项目中的集成问题。OpenCV是一个广泛使用的...
———————————————— 版权声明:本文为CSDN博主「关关教你学编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:...
### Word Segmentation: The Role of Distributional Cues #### 概述 《Word Segmentation: The Role of Distributional Cues》是一篇发表于1996年的研究论文,作者为Jenny R. Saffran、Elissa L. Newport和...
segmentation_models_pytorch是一款非常优秀的图像分割库,albumentations 是一款非常优秀的图像增强库,这篇文章将这两款优秀结合起来实现多类别的图像分割算法。数据集选用CamVid数据集,类别有:'sky', 'building...
在这个特定的挑战中,参赛者面临的任务是“Segmentation of neuronal structures in EM stacks”,即在电子显微镜(EM)堆栈图像中分割神经元结构。这一任务对于理解大脑的复杂神经网络至关重要,因为精确地识别和...
在Linux操作系统中,当一个进程由于各种原因,如非法内存访问、除以零等,触发了段错误(Segmentation Fault)时,系统可以生成一种名为core dump的文件,记录程序崩溃时的内存状态和调用堆栈信息。这对于调试和诊断...
Unsupervised Part Segmentation Through Disentangling Appearance and Shape
Deep learning for cardiac image segmentation: A review 时间:2019.11 作者:帝国理工/伦敦大学/伯明翰大学 links:https://arxiv.org/abs/1911.03723 医学图像分割综述,从FCN(2014)-DenseUNet(2019) 相关...
Super PI 是一款功能强大且易于使用的工具,不仅能够帮助用户测试 CPU 的性能,还可以作为一种简单的压力测试手段。无论是对于普通用户还是专业人士而言,Super PI 都是一款值得拥有的工具。通过使用 Super PI,用户...
Segmentation Fault(解决方案).md
DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs