探本溯源:“not create”错误的本质
“not create”错误并非一个独立的、具体的错误代码,而是一个结果性的描述,其根源在于LoadRunner在尝试启动一个Vuser进程时,该进程无法完成必要的初始化工作,这个初始化过程可能包括:
- 加载并运行脚本。
- 创建网络连接(如TCP/IP套接字)。
- 写入日志文件或结果文件。
- 分配必要的内存空间。
当上述任何一个环节因权限不足、资源耗尽、配置错误或环境不兼容而失败时,系统就会返回“not create”的错误信息,排查的重点应放在“为什么无法创建”这个核心问题上。
抽丝剥茧:常见原因与系统性解决方案
为了高效地解决问题,我们可以将排查范围划分为几个关键领域,逐一进行诊断。
1 环境与权限问题
这是最常见也最容易被忽视的原因,LoadRunner的运行需要特定的系统权限支持。
- 管理员权限不足:Controller和Load Generator(负载生成器)进程,尤其是
mdrv.exe
(多进程驱动程序),需要足够的权限来创建进程、访问网络和写入文件。解决方案:右键点击Controller或VuGen图标,选择“以管理员身份运行”。 - 安全软件拦截:杀毒软件或防火墙可能会将LoadRunner的进程(如
mdrv.exe
,vugen.exe
)误判为潜在威胁并阻止其活动。解决方案:在杀毒软件和防火墙中,将LoadRunner的安装目录添加到信任列表或白名单中。 - 用户账户控制(UAC):UAC的严格级别可能会限制程序的某些操作。解决方案:临时降低UAC级别或在运行程序时通过UAC授权。
- 临时文件夹权限:LoadRunner在运行时需要向系统临时目录(通常是
%temp%
)写入文件,如果当前用户对该目录没有写入权限,就会报错。解决方案:检查并确保当前用户对C:Users[用户名]AppDataLocalTemp
文件夹拥有完全控制权限。
2 系统资源瓶颈
当Vuser数量巨大时,负载生成器(LG)的硬件资源可能达到上限。
- 内存耗尽:每个Vuser都会消耗一定的内存,当Vuser数量过多,超出物理内存或虚拟内存上限时,新Vuser的创建就会失败。解决方案:监控系统内存使用情况,考虑增加物理内存或优化脚本的内存占用。
- 端口耗尽:每个网络连接都需要一个本地端口,Windows系统默认的可用临时端口范围有限(通常为1024-5000),当高并发场景下,端口被快速分配和释放,若端口处于
TIME_WAIT
状态未被及时回收,就会导致无可用端口。解决方案:修改Windows注册表,扩大端口范围并缩短TIME_WAIT
超时时间。- 在注册表编辑器中定位到
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
。 - 创建或修改
MaxUserPort
(例如设置为65534
)和TcpTimedWaitDelay
(例如设置为30
,单位为秒)。
- 在注册表编辑器中定位到
- 磁盘空间不足:日志文件、录制文件和结果文件会占用磁盘空间。解决方案:清理磁盘,确保有足够的剩余空间。
3 LoadRunner自身配置
有时问题出在LoadRunner的配置或脚本本身。
- Controller与Load Generator通信失败:Controller无法向LG成功下达启动Vuser的指令。解决方案:在Controller的“Load Generators”界面,确保LG的状态为“Ready”,使用
ping
命令测试Controller与LG之间的网络连通性,并检查防火墙设置。 - 脚本语法或逻辑错误:脚本中存在未捕获的严重错误,导致在
vuser_init()
阶段就崩溃。解决方案:在VuGen中单独运行脚本,确保其本身没有问题,可以尝试在Controller中只运行1个Vuser,观察是否能复现问题。 - 运行时设置(Run-time Settings)不当:日志设置为“Extended log”且开启所有选项,在高并发下会产生巨大的I/O开销,可能导致创建失败。解决方案:在测试调试阶段可以开启详细日志,但在正式压力测试中应关闭或仅记录错误日志。
故障排查流程速查表
为了方便快速定位问题,可以参考下表进行系统化排查:
场景描述 | 可能原因 | 建议解决方案 |
---|---|---|
所有Vuser都启动失败 | 权限、安全软件、核心服务 | 以管理员身份运行、添加白名单、检查LR服务 |
部分Vuser启动失败 | 资源瓶颈(内存/端口) | 监控LG资源、修改注册表扩大端口 |
脚本在VuGen正常,在Controller失败 | 环境差异、并发冲突 | 检查Rts设置、逐步增加Vuser数量、查看LG日志 |
报错信息包含网络连接字样 | 网络问题、防火墙 | Ping测试、检查防火墙规则、确认被测服务状态 |
相关问答FAQs
问题1:为什么我的性能测试脚本在VuGen里能正常运行,一到Controller里就报“not create”错误?
解答:这是一个非常经典的问题,VuGen是单用户调试环境,它模拟的是一个用户的完整操作流程,对系统资源和权限的要求相对较低,而Controller是多用户并发调度环境,它需要同时在负载生成器上创建并运行数十、数百甚至数千个Vuser进程,这种量级的差异会暴露出许多在单用户模式下不会显现的问题,例如系统端口耗尽、内存不足、进程权限限制、以及脚本在并发访问共享资源时产生的冲突等,当遇到这种情况时,应重点检查负载生成器的系统资源(内存、CPU、端口)、权限配置以及脚本本身是否支持多用户并发执行。
问题2:报错信息为“Error -27796: Failed to connect to server…”,这个属于“not create”的范畴吗?
解答:是的,这可以看作是“not create”的一种具体表现形式,这里的“not create”特指“未能创建网络连接”,错误信息明确指出,Vuser脚本中的函数(如web_url
)尝试与指定的服务器建立连接时失败了,这背后可能的原因包括:被测服务器宕机或无响应、网络链路不通(路由器、防火墙拦截)、DNS解析失败、服务器端口未开放,或者服务器因负载过高无法接受新的连接,排查时应首先确认服务器和网络基础设施的健康状况,使用telnet
或ping
等工具从负载生成器上测试与服务器的连通性,然后再检查脚本中的服务器地址和端口号是否正确无误。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复