原因:

网上给出的可能的原因大致有两个:

1.  压力负载机器的资源不足(CPU,内存)

2.  分配内存和释放内存的语句不匹配。

并给出了一些解决方案,最开始我以为是加了IP地址的原因,不断尝试增加IP,减少IP, 还是没有解决。又尝试添加工作机为load generator (压力负载机是通过VPN连接的),发现连接不上,只好放弃。 怀疑是开发人员做了代码改动,但是把服务端日志取下来看,日志和之前能正常运行场景时产生的日志并无二致。 于是又尝试修改vuser的运行方式,在进程和线程间切换。问题依旧存在。只能说前次正常运行场景纯属巧合了。

后来仔细查看代码,发现socket的分配内存和释放内存的语句须要匹配使用。

原来的代码:

#include "lrs.h"

Action()

{

char *Data=(char*) malloc(512,sizeof(char));

int Size=0;

int rc=0;

int receive_code;

memset(Data,0,strlen(Data));

rc=lrs_create_socket("socket0","TCP","RemoteHost=10.100.200.100:22108",LrsLastArg);

if (0==rc) {

lr_output_message("Socket was successfully created ");

}

else

{

lr_output_message("An error occurred while creating the socket, Error Code: %d",rc);

}

lr_start_transaction("POS_80_trans");

lrs_send("socket0","buf0",LrsLastArg); //Íù"socket0"·¢ËÍ"buf0"ÖеÄÊý¾Ý

lrs_disable_socket("socket0", DISABLE_SEND);

receive_code=lrs_receive("socket0","buf1",LrsLastArg);

lrs_get_last_received_buffer("socket0",&Data,&Size);

lrs_free_buffer(Data);

lr_end_transaction("POS_80_trans",LR_AUTO);

lrs_close_socket("socket0");

return 0;

}

修改后的代码(修改后的代码用红色字体表示):

#include "lrs.h"

Action()

{

//char *Data=(char*) malloc(512,sizeof(char));

char *Data;

int NumberofBytes=512;

int Size=0;

int rc=0;

int receive_code;

//memset(Data,0,strlen(Data));

lrs_get_buffer_by_name("buf1",&Data,&NumberofBytes);

rc=lrs_create_socket("socket0","TCP","RemoteHost=10.100.200.100:22108",LrsLastArg);

if (0==rc) {

lr_output_message("Socket was successfully created ");

}

else

{

lr_output_message("An error occurred while creating the socket, Error Code: %d",rc);

}

lr_start_transaction("POS_80_trans");

lrs_send("socket0","buf0",LrsLastArg); //Íù"socket0"·¢ËÍ"buf0"ÖеÄÊý¾Ý

lrs_disable_socket("socket0", DISABLE_SEND);

receive_code=lrs_receive("socket0","buf1",LrsLastArg);

lrs_get_last_received_buffer("socket0",&Data,&Size);

lrs_free_buffer(Data);

lr_end_transaction("POS_80_trans",LR_AUTO);

lrs_close_socket("socket0");

return 0;

}

Loadrunner 在controller中运行socket脚本时报错:Abnormal termination, caused by mdrv process termination 的原因和解决方法的更多相关文章

  1. loadrunner跑场景的时候出现:Abnormal termination, caused by mdrv process termination

    1.问题 loadrunner跑场景的时候出现:Abnormal termination, caused by mdrv process termination. 备注:我使用的是RTE协议录制的脚本 ...

  2. (Loadrunner)Abnormal termination, caused by mdrv process termination.(转)

    Load generator跑了太多用户导致CPU和内存爆满,进程无法处理请求 确认自定义的代码是否释放内存 合理调整或增加思考时间 关闭extended log 尽量避免使用Load generat ...

  3. 运行shell脚本时报错"[[ : not found"解决方法

    问题描述 在运行shell脚本时报错,命令为: sh test.sh 报错如图: 脚本代码如下: #!/bin/bash # file:test.sh # author:13 # date:2017- ...

  4. caffe运行训练脚本时报错:Unknown bottom blob 'data' (layer 'conv1',bottom index 0)

    报错的两种报错原因: 1.输入数的路径错误,需要将路径进行修改排查目录是否出错 2.训练原数据格式不对 3.train.prototxt文件中并未设置test层,而在solver层则设置了test的迭 ...

  5. 项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved 解决方法

    Error: The import javax.servlet cannot be resolved The import javax.servlet.http.HttpServletRequest ...

  6. “display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法

    最近在使用3个span(或div)制作带圆角边框的按钮时,按照常识,把span的display设置成inline-block,这样就可以设置span的width和height了,很爽的~ 可是当我在中 ...

  7. Qt错误:类中使用Q_OBJECT宏导致undefined reference to vtable for "xxx::xxx"错误的原因和解决方法

    在进行Qt编程的时候,有时候会将类的定义和实现都写在源文件中,如果同时在该类中使用信号/槽,那么可能就会遇到 undefined reference to vtable for "xxx:: ...

  8. monkeyrunner之eclipse中运行monkeyrunner脚本之环境搭建(四)

    monkeyrunner脚本使用Python语法编写,但它实际上是通过Jython来解释执行. Jython是Python的Java实现,它将Python代码解释成Java虚拟机上的字节码并执行,这种 ...

  9. Linux中运行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。

    在Linux中运行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分析:这是不同系统编码格式引起的:在windows系统中 ...

随机推荐

  1. 用C#开发一个 UWP BLUETOOTH BLE 扫描APP

    什么是WINDOWS UWP UWP即Windows 10 中的Universal Windows Platform简称.即Windows通用应用平台,在Win 10 Mobile/Surface(W ...

  2. 《C++ Primer》 chapter 15 TextQuery

    <C++ Primer>中第15章为了讲解面向对象编程,举了一个例子:设计一个小程序,能够处理查询给定word在文件中所在行的任务,并且能够处理“非”查询,“或”查询,“与”查询.例如执行 ...

  3. Dev的关于XtraGrid的使用2

    接着说,GirdControl如何定位和查找指定列显示值的行(注意是列的实显示值,而不是关联数据源列值) 下面请看代码: using DevExpress.XtraGrid.Views.Base; u ...

  4. php字符串比较

    比较两个字符串是否相等,最常见的方法就是使用“===”来判断,至于它和“==”的区别,简单来说 就是前者强调“identical”类型也要求一样:后者要求“equal”,值相同就可以了.或者使用str ...

  5. gdb命令整理

    Microsoft Windows XP [版本 ] (C) 版权所有 - Microsoft Corp. C:\Documents and Settings\Administrator>e: ...

  6. ES6 - 变量的解构赋值学习笔记

    变量的解析赋值 数组的解析赋值 es6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这就称为解构. var a = 1; var b = 2; var c = 3; //在es6中允许写成 ...

  7. win32 安装 xcache扩展

    今天整了一上午,才整明白. 我的系统是是 win7 32位 ,用的环境是 Wamp,php版本是5.3.5,后来在http://xcache.lighttpd.net/pub/Releases/3.0 ...

  8. 利用Navicat实现MySQL数据库结构对比和同步

    在生产环境中,我们总会因为这样或那样的原因导致主从不同步,亦或者是测试环境要和生产环境进行同步,利用Navicat结构同步工具,不但能找出库结构差异,还可以针对create.modify.drop等进 ...

  9. Mac 修改用户名

    系统偏好设置 > 用户与群组 > 解锁 > 用户 > 右键 > 高级选项 > 全名

  10. easyui datagrid分页参数获取

    $("#btnDataExport").click(function () { $.messager.show({ title: '导出提示', msg: '每次导出一页商户数据, ...