Loadrunner 在controller中運行socket腳本時報錯:Abnormal termination, caused by mdrv process termination 的原因和解決方法


原因:

網上給出的可能的原因大致有兩個:

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;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM