jameschen83 发表于 2011-8-30 15:09:16

压力测试时报Two Way Communication Error,请高手指点

本帖最后由 jameschen83 于 2011-8-31 09:27 编辑

小弟在用Loadrunner9.5对公司的服务器进行压力测试,目的是测试一台服务器最多能支持多少台客户端的访问。

测试环境如下:
C/S架构,服务器是Windows2003,oracle数据库;客户端是我的工作机,CPU:E58003.2Ghz + 3.2 Ghz   内存:3.25GB, WindowsXP系统

录制是协议选择的是 DotNetProtocol,因为被测软件是用.Net开发的,所以我就选这个,不知道对不对。

运行时的Loadrunner场景参数设置为:
1. 在tools->Options的timeout,全部设置为999,
2. 在run-time settings的When stopping Vusers选择Stop immediately
其他保持默认值。
3. 将虚拟用户设定为30,每15秒启动2个Vuser,全部启动后持续5分钟,然后每30秒停掉5个Vuser。

结果:
事实上,当虚拟用户增至20个在运行时,就有错误报告:Error: Two Way Communication Error: Function two_way_comm_post_message / two_way_comm_post_message_ex failed.
然后就不停的有error, 但是没有失败的Transaction, 而且成功的Transaction也跟error一样一直在增加,停止本轮运行(点击‘Stop’按钮),还是一直在增加。
查看本机任务管理器,发现CPU用了将近100%

请高手帮忙分析下是什么问题,应该怎么解决,小弟感激不尽。

jameschen83 发表于 2011-8-30 15:15:14

自己先顶一个,高手们需要多一些信息的话,敬请留言啊,多谢啦:)

wenwensw 发表于 2011-8-30 18:08:16

需要给你付钱才能浏览问题,谁会给你解决啊!楼主不厚道

jameschen83 发表于 2011-8-31 09:25:33

晕,搞错了,非常抱歉,我以为是帮忙解决了这个问题会把这分给解答者的。
新手,请多多包涵。我马上改下

jameschen83 发表于 2011-8-31 10:46:34

回复 3# wenwensw


    搞错了,我以为是解答后会把分给解答者。
   现在已经把那扣分的去掉了

jameschen83 发表于 2011-8-31 10:47:19

需要给你付钱才能浏览问题,谁会给你解决啊!楼主不厚道
wenwensw 发表于 2011-8-30 18:08 http://bbs.51testing.com/images/common/back.gif


    已经去掉,多谢提醒:)

mymagic 发表于 2011-8-31 11:37:23

用winsockets协议呢?
LZ自己录制的脚本回放成功吗?
脚本贴出来看看

jameschen83 发表于 2011-8-31 11:53:40

之前用winsockets协议回放时卡死,所以改用.Net协议,能回放成功。
脚本我没有编辑过,也看不懂,所以把每个脚本都贴上来,还请高手耐心指教,谢谢
vuser_init:


'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    :
'---------------------------------------------

Namespace Script
    Partial Public Class VuserClass
      Public Function vuser_init() As Integer
            Return 0
      End Function
    End Class
End Namespace


Action:

'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    : 3010
'---------------------------------------------

Option Strict Off
Option Explicit On

Imports LoadRunner
Imports Mercury.LoadRunner.DotNetProtocol.Replay
Imports System

Namespace Script
   
    Partial Public Class VuserClass
      
      Public Overridable Function Action() As Integer

            Return 0
      End Function
    End Class
End Namespace


vuserend:

'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    :
'---------------------------------------------

Namespace Script
    Partial Public Class VuserClass
      Public Function vuser_end() As Integer
            Return 0
      End Function
    End Class
End Namespace


globalsFixed.vb

'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    :
'---------------------------------------------

Namespace Script
    Partial Public Class VuserClass
      Dim lr As New LoadRunner.LrApi() 'Initialize LR-API Interface
      Sub DATASET_XML(ByVal I As Integer)
      End Sub
    End Class
End Namespace


AssemblyInfo.vb

'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    :
'---------------------------------------------

Imports System.Reflection
Imports System.Runtime.InteropServices

' General Information about an assembly is controlled through the following
' attributes. Change the attribute values to modify the information
' associated with an assembly.

<Assembly: AssemblyTitle("")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("")>
<Assembly: AssemblyCopyright("")>
<Assembly: AssemblyTrademark("")>

' Version information for an assembly consists of the following four arguments:
'
'      Major Version, Minor Version , Build Number,Revision
'
' You can specify all the values or you can accept the default the build and revision numbers
' by using the '*' as shown below:
<Assembly: AssemblyVersion("1.0.*")>


globals.vb

'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    : 3010
'---------------------------------------------

Option Strict Off
Option Explicit On

Imports LoadRunner
Imports Mercury.LoadRunner.DotNetProtocol.Replay
Imports System

Namespace Script
   
    Partial Public Class VuserClass
    End Class
End Namespace

jameschen83 发表于 2011-8-31 11:56:23

回复 7# mymagic


    之前用winsockets协议回放时卡死,所以改用.Net协议,能回放成功。
脚本我没有编辑过,也看不懂,所以把每个脚本都贴上来,还请高手耐心指教,谢谢
vuser_init:

'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    :
'---------------------------------------------

Namespace Script
    Partial Public Class VuserClass
      Public Function vuser_init() As Integer
            Return 0
      End Function
    End Class
End Namespace


Action:
'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    : 3010
'---------------------------------------------

Option Strict Off
Option Explicit On

Imports LoadRunner
Imports Mercury.LoadRunner.DotNetProtocol.Replay
Imports System

Namespace Script
   
    Partial Public Class VuserClass
      
      Public Overridable Function Action() As Integer

            Return 0
      End Function
    End Class
End Namespace


vuserend:
'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    :
'---------------------------------------------

Namespace Script
    Partial Public Class VuserClass
      Public Function vuser_end() As Integer
            Return 0
      End Function
    End Class
End Namespace


globalsFixed.vb
'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    :
'---------------------------------------------

Namespace Script
    Partial Public Class VuserClass
      Dim lr As New LoadRunner.LrApi() 'Initialize LR-API Interface
      Sub DATASET_XML(ByVal I As Integer)
      End Sub
    End Class
End Namespace


AssemblyInfo.vb
'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    :
'---------------------------------------------

Imports System.Reflection
Imports System.Runtime.InteropServices

' General Information about an assembly is controlled through the following
' attributes. Change the attribute values to modify the information
' associated with an assembly.

<Assembly: AssemblyTitle("")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("")>
<Assembly: AssemblyCopyright("")>
<Assembly: AssemblyTrademark("")>

' Version information for an assembly consists of the following four arguments:
'
'      Major Version, Minor Version , Build Number,Revision
'
' You can specify all the values or you can accept the default the build and revision numbers
' by using the '*' as shown below:
<Assembly: AssemblyVersion("1.0.*")>


globals.vb
'---------------------------------------------
'Script Title      :
'Script Description:
'
'
'Recorder Version    : 3010
'---------------------------------------------

Option Strict Off
Option Explicit On

Imports LoadRunner
Imports Mercury.LoadRunner.DotNetProtocol.Replay
Imports System

Namespace Script
   
    Partial Public Class VuserClass
    End Class
End Namespace

jameschen83 发表于 2011-8-31 15:00:24

还没解决,自己给顶上去

mymagic 发表于 2011-8-31 15:12:23

通讯错误。也可能压力太大?
看看服务器连接情况。

jameschen83 发表于 2011-8-31 15:46:35

多谢指点,我马上设少些用户,就16个,跑跑看。
不过一台服务器才支撑十几个客户端的访问,会不会太少了?
一般是能支撑多少个客户端的呢?

jameschen83 发表于 2011-8-31 16:18:47


运行16个虚拟用户还是报这样的问题
60990Error: Two Way Communication Error: Function two_way_comm_post_message / two_way_comm_post_message_ex failed.
29739Error: Service client with id=804 failed to post a message ,reason - communication error.
29346Error: Post UnsubscribeService for publish-subscribe service DrvSoftKillService failed.

mymagic 发表于 2011-8-31 16:21:47

两个用户呢?

jameschen83 发表于 2011-8-31 16:29:27

非常感谢,试了下,两个没报错。

这么说我就测试看是到几个才开始报错了,对吧

mymagic 发表于 2011-8-31 16:40:24

恩,这是一种很笨的方法,不过还是没从根本上解决报错问题。
跟开发沟通沟通,是不是在连接上有什么限制或者机制。
或者服务器本身的问题。

thirfing 发表于 2011-8-31 16:58:16

楼主,第一次报错的时候,你本机CPU占用率100%,你试一下多几台负载机,再测试30个用户。期待你结果

jameschen83 发表于 2011-8-31 17:33:43

多谢各位高手指导,我再试试:)

jameschen83 发表于 2011-9-1 10:27:43

现在是到15个用户还没有报错。
但我才发现原来录制的时候没有录到事件,难怪贴上来的脚本里似乎没什么东西。
我这是C/S架构,服务器是Windows2003,数据库用oracle,软件是.Net开发的。
请问应该是用那种协议录制才合适呢?

jameschen83 发表于 2011-9-1 11:48:24

补充下,服务器跟客户端是通过http协议通信的,我用Web(http/html)协议能录制到脚本,但是回放时,Loadrunner就卡死了。
页: [1] 2
查看完整版本: 压力测试时报Two Way Communication Error,请高手指点