使用LR测试J2ME网络游戏服务器性能的解决方案.docx
《使用LR测试J2ME网络游戏服务器性能的解决方案.docx》由会员分享,可在线阅读,更多相关《使用LR测试J2ME网络游戏服务器性能的解决方案.docx(20页珍藏版)》请在冰豆网上搜索。
使用LR测试J2ME网络游戏服务器性能的解决方案
使用LR测试J2ME网络游戏服务器性能的解决方案
一工具
测试用工具Loadrunner9.0(简称LR)
手机模拟器kemulator
游戏客户端SanGuo.jar
二相关配置
Loadrunner9.0破解方法
a、用LR8.1.4.0中的lm50.dll、licensebundles.dll覆盖LR9.0安装目录下“bin”文件夹中的对应文件;
b、用LR8.0中的mlr5lprg.dll、lm70.dll覆盖LR9.0安装目录下“bin”文件夹中的对应文件;
个人分析
c、然后使用老的注册码就可以使用了;
d、golba-100:
AEAMAUIK-YAFEKEKJJKEEA-BCJGI
web-10000:
AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB
e、golba-500licence:
BGAUGLIX-AJGI-AEIEKEKJJKEAFJP-BDFHW
Validuntil31.十月2003
例如破解前将系统时间调成2003年10月8日
在破解的过程中我还遇到了个问题,就是通过上述的方法注册时提示“Licensesecurityviolation……”,无法注册,后通过针对LR注册表删除的工具运行后再注册就通过了.
服务器端配置
1)进入被监视windows系统,开启以下二个服务RemoteProcedureCall(RPC)和RemoteRegistryService(开始—)运行中输入services.msc,开启对应服务即可)。
2)在被监视的WINDOWS机器上:
右击我的电脑,选择管理->共享文件夹->共享在这里面要有C$这个共享文件夹(要是没有自己手动加上)。
3)在安装LR的机器上,开始—>运行,输入\\被监视机器IP\C$然后输入管理员帐号和密码,如果能看到被监视机器的C盘了,就说明你得到了那台机器的管理员权限,可以使用LR去连接了。
(LR要连接WINDOWS机器进行监视要有管理员帐号和密码才行。
)
问题:
在执行步骤3)时,输入\\被监视机器IP\C$,出现不能以administrator身份访问被监控系统(若采用这种方式用LR对其监控的话,会提示:
“找不到网络路径”)的情况,现象就是用户名输入框是灰色的,并且默认用户是guest。
解决办法:
这是安全策略的设置问题(管理工具->本地安全策略->安全选项->"网络访问:
本地帐户的共享和安全模式")。
默认情况下,XP的访问方式是"仅来宾"的方式,如果你访问它,当然就固定为Guest来访问,而guest账户没有监控的权限,所以要把访问方式改为“经典”模式,这样就可以以administrator的身份登陆了。
修改后,再次执行步骤3),输入管理员用户名和密码,就可以访问被监控机器C盘了
若这样都不行的话(可能是其它问题引起的),那只好采取别的方法了。
在服务器的机子上,通过windows自带的“性能日志和警报”下的“计数器日志”中新增加一个监控日志(管理工具—)性能—)性能日志和警报),配置好日志,也能监控服务器的cpu、memory、disk等计数器。
当然,这种方法就不是用LR来监控了。
三过程和原理
1.脚本录制
打开LR,点击Create/EditScripts打开脚本编辑器,点击newvuserscript选择WindowsSockets协议–>OK
Applicationtype里选择Win32Applications
Programtorecord里选取KEmulator.exe路径
点击OK
启动了模拟器,在模拟器里加载游戏客户端启动游戏,点击登陆前,选择vuser_aciton,开始录制脚本。
录制完毕后退出游戏前选择vuser_end
退出游戏
点击LR上的方块状停止图标,结束脚本的录制,保存脚本
2.脚本的修改
在vuser_action里修改IP地址RemotoHost=localhost为真实服务器端IP地址
例如lrs_create_socket("socket0","TCP","RemoteHost=192.168.0.197:
5000",LrsLastArg);
3.数据库配置与脚本参数化
打开“参数列表”如图,红框为参数列表按钮
打开ParameterList对话框,点击DataWizard按钮,打开DatabaseQueryWizard对话框,点击SpecifySQLstatementmanually后,点击NEXT,然后点击Create后,选择“机器数据源”,点新建,点击系统数据源,下一步,选择数据库驱动,如果使用MYsql数据库,还须下载安装MYsql数据库驱动,进行相关数据库配置。
数据库配置好后,在如图SQLstatement位置填入SQL语句,例如
SELECTaccnameFROMsgol_user.useraccountuwhereaccid>924
点击FINISH后数据自动填入。
如下图配置
在脚本中替换所有你要参数化的变量,可使用Ctrl+H全部替换。
脚本制作完毕。
4.场景设置
打开RunloadTest,点选刚录制的脚本,确定如下图
配置完善后,点击Run进入运行场景
此测试基于B/S结果,socket协议,
Loadrunner虚拟用户向服务器发送数据,监视服务器主机的各项性能数据,并非直接测试服务器端程序的好坏。
四计数器详述
按顺序排列:
1.%ProcessortimeCPU使用率
2.FileDataOpreations/sec是指计算机对文件系统设备执行读取和写入操作的速率,FileDataOperations/secFileDataOperations记录了当前系统中磁盘文件读写的频繁程度。
通过观察该计数器跟其他性能指标的变化趋势,通常能够判断磁盘文件操作是否是性能瓶颈。
类似的计数器还有NetworkInterface\Bytestotal/sec
3.ProcessorQueueLength(System)QueueLength指当前的服务器作业列队长度。
列队长度长时间超过四可能表示处理器堵塞。
此值为即时计数,不是一段时间的平均值。
(正常不要长时间超过4,超过4说明堵塞)
4.PageFaults/sec(Memory)每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需要从硬盘读取)较page/sec只表明数据不能在内存的指定工作集中立即使用。
如果该值偶尔走高,表明当时有线程竞争内存。
如果持续很高,则内存可能是瓶颈。
5.%DiskTime(PhysicalDisk_Total)包括PageReads/sec和%DiskTime及Avg.DiskQueueLength。
如果页面读取操作速率很低,同时%DiskTime和Avg.DiskQueueLength的值很高,则可能有磁盘瓶径。
但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。
要确定过多的页交换对磁盘活动的影响,请将PhysicalDisk\Avg.Disksec/Transfer和Memory\Pages/sec计数器的值增大数倍。
如果这些计数器的计数结果超过了0.1,那么页交换将花费百分之十以上的磁盘访问时间。
如果长时间发生这种情况,那么您可能需要更多的内存。
6.PoolNonpagedBytes(Memory)是常驻内存的虚拟内存页设置,能被随时访问并且不造成分页错误。
设备驱动和操作系统内核使用它存储那些必须常驻物理内存并且不得分页存储到硬盘上的数据结构。
未分页池有两种类型:
一种作为通常的使用,令一种小的部分(4页)留给紧急状态当未分页池满并且调用者无法忍受分配的失败。
单处理器系统有3个未分页池,多处理器系统有5个未分页池。
未分页池有容量极限:
WindowsNT-128MB,Windows2K-256MB。
内核函数和设备驱动如果需要实时内存缓冲并不允许它分页到当前系统之外,就得从未分页池中分配内存。
如果程序在这个分配过程存在着内存泄漏,它终将耗尽所有的未分页池空间,并导致之后对未分页池的请求失败,最后未分页池越界造成当前操作系统蓝屏。
未分页池和分页池可以从注册表"HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement"中预设,从0到极限值。
7.Pages/sec(Memory)表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面数。
一般如果pages/sec持续高于几百,那么您应该进一步研究页交换活动。
有可能需要增加内存,以减少换页的需求(你可以把这个数字乘以4k就得到由此引起的硬盘数据流量)。
Pages/sec的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。
8.Interrupts/sec(Processor_Total)指处理器每秒钟接收并维护的硬件中断的平均值。
正常的线程操作在中断时悬停。
大多数的系统时钟每隔10毫秒中断处理器一次,形成了间隔活动的后台。
如果处理器使用率超过90%且%InterruptTime大于15%,则处理器可能负荷过重,并发生中断。
9.Threads(Objects)线程数在计算机上的时间的数据收集。
请注意,这是一个瞬时计数,而不是平均的时间间隔。
线程是基本可执行的实体,可以执行指令的处理器。
10.PrivateBytes(Process_Total)目前的字节数,该进程已经拨出,不能与其它进程。
性能测试的响应时间:
确立响应时间的原则:
2/5/10原则
2:
2秒钟用户会觉得是一个很好的体验。
5:
5秒钟用户可能会觉得差了一点,还行,比较好。
10:
10秒钟是用户所能承受的最大极限。
一physicalDisk
1.disktime该值大就有问题
若%DiskTime值较大,而Processor\PrivilegedTime的值适中,则可判断存在磁盘问题。
若Processor\PrivilegedTime较大,持续超过80%,则可能是内存泄漏。
2.avgdisksec/transfer该值超过60,磁盘存在问题
3.diskqueuelength
二Processor(分析cpu)
1.processortime(Processor_Total)<85%
2.privilegedtime((Processor_Total))
3.usetime((Processor_Total))
4.processorqueuelength<2
5.interrupts/sec
processortime=%privilegedTime+%userTime
其次查看每个CPU的UserTime计数器的值。
该值体现在是消耗CPU的数据库操作,
若应用服务器的%UserTime值较大,可以考虑是否能通过算法优化等方法降低这个值。
若数据库服务器的%UserTime值较大,可考虑对数据库系统进行优化。
System\ProcessorQueueLength计数器的值。
当该值大于CPU数量的总数+1时,说明存在处理器方面的问题。
如果(ProcessorXXX):
某进程独占cpu
1.processortime(ProcessorXXX)<85%
2.privilegedtime((Processor_XXX))
3.usetime((Processor_XXX))
Thread:
ContextSwitches/Sec
如果5000*CPU<次数<15000*CPU,而网络吞吐量低,说明CPU忙于切换线程,CPU利用率高。
三内存方法
AvailableMbytes(可用内存率不少于15%)
CommittedBYtes(内存泄漏监控)
1.pages/sec正常值<20从磁盘读取或写入的页面数
pagesRead/sec<5越低越好,此值过大表明是磁盘读而不是缓存读
pagesFaults/sec、页面错误,表明数据不能再内存中立即使用
CacgeBytes<50%可用物理内存
2.poolnonpagedBytes内核模式
Process(XXX)
PrivateBytes某进程独占的内存字节
WorkingSet某进程使用的内存页
HandleCount句柄数
.poolnonpagedBytes内核模式
四system
1.threads
计数器是针对windows操作系统,C/S结构的sqlserver数据库及WEB平台.net产品测试时的一些计数器;
Memory:
内存使用情况可能是系统性能中最重要的因素。
如果系统“页交换”频繁,说明内存不足。
“页交换”是使用称为“页面”的单位,将固定大小的代码和数据块从RAM移动到磁盘的过程,其目的是为了释放内存空间。
尽管某些页交换使Windows2000能够使用比实际更多的内存,也是可以接受的,但频繁的页交换将降低系统性能。
减少页交换将显著提高系统响应速度。
要监视内存不足的状况,请从以下的对象计数器开始:
AvailableMbytes:
可用物理内存数.如果AvailableMbytes的值很小(4MB或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。
page/sec:
表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面数。
一般如果pages/sec持续高于几百,那么您应该进一步研究页交换活动。
有可能需要增加内存,以减少换页的需求(你可以把这个数字乘以4k就得到由此引起的硬盘数据流量)。
Pages/sec的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。
pageread/sec:
页的硬故障,page/sec的子集,为了解析对内存的引用,必须读取页文件的次数。
阈值为>5.越低越好。
大数值表示磁盘读而不是缓存读。
由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足与导致页交换的磁盘瓶径混淆。
因此,在研究内存不足不太明显的页交换的原因时,您必须跟踪如下的磁盘使用情况计数器和内存计数器:
PhysicalDisk\%DiskTime
PhysicalDisk\Avg.DiskQueueLength
例如,包括PageReads/sec和%DiskTime及Avg.DiskQueueLength。
如果页面读取操作速率很低,同时%DiskTime和Avg.DiskQueueLength的值很高,则可能有磁盘瓶径。
但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。
要确定过多的页交换对磁盘活动的影响,请将PhysicalDisk\Avg.Disksec/Transfer和Memory\Pages/sec计数器的值增大数倍。
如果这些计数器的计数结果超过了0.1,那么页交换将花费百分之十以上的磁盘访问时间。
如果长时间发生这种情况,那么您可能需要更多的内存。
PageFaults/sec:
每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需要从硬盘读取)较page/sec只表明数据不能在内存的指定工作集中立即使用。
CacheBytes:
文件系统缓存(FileSystemCache),默认情况下为50%的可用物理内存。
如IIS5.0运行内存不够时,它会自动整理缓存。
需要关注该计数器的趋势变化
如果您怀疑有内存泄露,请监视Memory\AvailableBytes和Memory\CommittedBytes,以观察内存行为,并监视您认为可能在泄露内存的进程的Process\PrivateBytes、Process\WorkingSet和Process\HandleCount。
如果您怀疑是内核模式进程导致了泄露,则还应该监视Memory\PoolNonpagedBytes、Memory\PoolNonpagedAllocs和Process(process_name)\PoolNonpagedBytes。
Pagespersecond:
每秒钟检索的页数。
该数字应少于每秒一页。
Process:
%ProcessorTime:
被处理器消耗的处理器时间数量。
如果服务器专用于sqlserver,可接受的最大上限是80-85%
PageFaults/sec:
将进程产生的页故障与系统产生的相比较,以判断这个进程对系统页故障产生的影响。
Workset:
处理线程最近使用的内存页,反映了每一个进程使用的内存页的数量。
如果服务器有足够的空闲内存,页就会被留在工作集中,当自由内存少于一个特定的阈值时,页就会被清除出工作集。
Inetinfo:
PrivateBytes:
此进程所分配的无法与其它进程共享的当前字节数量。
如果系统性能随着时间而降低,则此计数器可以是内存泄漏的最佳指示器。
Processor:
监视“处理器”和“系统”对象计数器可以提供关于处理器使用的有价值的信息,帮助您决定是否存在瓶颈。
%ProcessorTime:
如果该值持续超过95%,表明瓶颈是CPU。
可以考虑增加一个处理器或换一个更快的处理器。
%UserTime:
表示耗费CPU的数据库操作,如排序,执行aggregatefunctions等。
如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。
%PrivilegedTime:
(CPU内核时间)是在特权模式下处理线程执行代码所花时间的百分比。
如果该参数值和"PhysicalDisk"参数值一直很高,表明I/O有问题。
可考虑更换更快的硬盘系统。
另外设置TempdbinRAM,减低"maxasyncIO","maxlazywriterIO"等措施都会降低该值。
此外,跟踪计算机的服务器工作队列当前长度的ServerWorkQueues\QueueLength计数器会显示出处理器瓶颈。
队列长度持续大于4则表示可能出现处理器拥塞。
此计数器是特定时间的值,而不是一段时间的平均值。
%DPCTime:
越低越好。
在多处理器系统中,如果这个值大于50%并且Processor:
%ProcessorTime非常高,加入一个网卡可能会提高性能,提供的网络已经不饱和。
Thread
ContextSwitches/sec:
(实例化inetinfo和dllhost进程)如果你决定要增加线程字节池的大小,你应该监视这三个计数器(包括上面的一个)。
增加线程数可能会增加上下文切换次数,这样性能不会上升反而会下降。
如果十个实例的上下文切换值非常高,就应该减小线程字节池的大小。
PhysicalDisk:
%DiskTime%:
指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。
如果三个计数器都比较大,那么硬盘不是瓶颈。
如果只有%DiskTime比较大,另外两个都比较适中,硬盘可能会是瓶颈。
在记录该计数器之前,请在Windows2000的命令行窗口中运行diskperf-yD。
若数值持续超过80%,则可能是内存泄漏。
Avg.DiskQueueLength:
指读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。
该值应不超过磁盘数的1.5~2倍。
要提高性能,可增加磁盘。
注意:
一个RaidDisk实际有多个磁盘。
AverageDiskRead/WriteQueueLength:
指读取(写入)请求(列队)的平均数。
DiskReads(Writes)/s:
物理磁盘上每秒钟磁盘读、写的次数。
两者相加,应小于磁盘设备最大容量。
AverageDisksec/Read:
指以秒计算的在此盘上读取数据的所需平均时间。
AverageDisksec/Transfer:
指以秒计算的在此盘上写入数据的所需平均时间。
NetworkInterface:
BytesTotal/sec:
为发送和接收字节的速率,包括帧字符在内。
判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较
SQLServer性能计数器:
AccessMethods(访问方法)用于监视访问数据库中的逻辑页的方法。
FullScans/sec(全表扫描/秒)每秒不受限的完全扫描数。
可以是基本表扫描或全索引扫描。
如果这个计数器显示的值比1或2高,应该分析你的查询以确定是否确实需要全表扫描,以及SQL查询是否可以被优化。
Pagesplits/sec(页分割/秒)由于数据更新操作引起的每秒页分割的数量。
BufferManager(缓冲器管理器):
监视Microsoft®SQLServer?
如何使用:
内存存储数据页、内部数据结构和过程高速缓存;计数器在SQLServer从磁盘读取数据库页和将数据库页写入磁盘时监视物理I/O。
监视SQLServer所使用的内存和计数器有助于确定:
是否由于缺少可用物理内存存储高速缓存中经常访问的数据而导致瓶颈存在。
如果是这样,SQLServer必须从磁盘检索数据。
是否可通过添加更多内存或使更多内存可用于数据高速缓存或SQLServer内部结构来提高查询性能。
SQLServer需要从磁盘读取数据的频率。
与其它操作相比,例如内存访问,物理I/O会耗费大量时间。
尽可能减少物理I/O可以提高查询性能。
PageReads/sec:
每秒发出的物理数据库页读取数。
这一统计信息显示的是在所有数据库间的物理页读取总数。
由于物理I/O的开销大,可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,使开销减到最小。
PageWrites/sec(.写的页/秒)每秒执行的物理数据库写的页数。
BufferCacheHitRatio.在“缓冲池”(BufferCache/BufferPool)中没有被读过的页占整个缓冲池中所有页的比率。
可在高速缓存中找到而不需要从磁盘中读取的页的百分比。
这一比率是高速缓存命中总数除以自SQLServer实例启动后对高速缓存的查找总数。
经过很长时间后,这一比率的变化很小。
由于从高速缓存中读数据比从磁盘中读数据的开销要小得多,一般希望这一数值高一些。
通常,可以通过增加SQLServer可用的内存数量来提高高速缓存命中率。
计数器值依应用程序而定,但比率最好为90%或更高。
增加内存直到这一数值持续高于90%,表示90%以上的数据请求可以从数据缓冲区中获得所需数据。
LazyWrites/sec(惰性写/秒)惰性写进程每秒写的缓冲区的数量。
值最好为0。
CacheManager(高速缓存管理器)对象提供计数器,用于监