原因:
網上給出的可能的原因大致有兩個:
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;
}
