压力测试时报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%
请高手帮忙分析下是什么问题,应该怎么解决,小弟感激不尽。 自己先顶一个,高手们需要多一些信息的话,敬请留言啊,多谢啦:) 需要给你付钱才能浏览问题,谁会给你解决啊!楼主不厚道 晕,搞错了,非常抱歉,我以为是帮忙解决了这个问题会把这分给解答者的。
新手,请多多包涵。我马上改下 回复 3# wenwensw
搞错了,我以为是解答后会把分给解答者。
现在已经把那扣分的去掉了 需要给你付钱才能浏览问题,谁会给你解决啊!楼主不厚道
wenwensw 发表于 2011-8-30 18:08 http://bbs.51testing.com/images/common/back.gif
已经去掉,多谢提醒:) 用winsockets协议呢?
LZ自己录制的脚本回放成功吗?
脚本贴出来看看 之前用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 回复 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 还没解决,自己给顶上去 通讯错误。也可能压力太大?
看看服务器连接情况。 多谢指点,我马上设少些用户,就16个,跑跑看。
不过一台服务器才支撑十几个客户端的访问,会不会太少了?
一般是能支撑多少个客户端的呢?
运行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. 两个用户呢? 非常感谢,试了下,两个没报错。
这么说我就测试看是到几个才开始报错了,对吧 恩,这是一种很笨的方法,不过还是没从根本上解决报错问题。
跟开发沟通沟通,是不是在连接上有什么限制或者机制。
或者服务器本身的问题。 楼主,第一次报错的时候,你本机CPU占用率100%,你试一下多几台负载机,再测试30个用户。期待你结果 多谢各位高手指导,我再试试:) 现在是到15个用户还没有报错。
但我才发现原来录制的时候没有录到事件,难怪贴上来的脚本里似乎没什么东西。
我这是C/S架构,服务器是Windows2003,数据库用oracle,软件是.Net开发的。
请问应该是用那种协议录制才合适呢? 补充下,服务器跟客户端是通过http协议通信的,我用Web(http/html)协议能录制到脚本,但是回放时,Loadrunner就卡死了。
页:
[1]
2