我们有一个perl脚本,它为我们的源代码(C ++)运行构建。我们有一行类似于以下内容:
Win32::Process::Create($ProcessObj,"$COMSPEC",$cmd,0,NORMAL_PRIORITY_CLASS,".")|| die ErrorReport();
我们在整个构建过程中多次进行此调用 - 在最后一次中,我们收到以下错误:
Can't load 'C:/Program Files (x86)/IBM/RationalSDLC/common/lib/perl5/site_perl/5.8.6/MSWin32-x86-multi-thread/auto/Win32/Process/Process.dll' for module Win32::Process: load_file:Insufficient system resources exist to complete the requested service at C:/Program Files (x86)/IBM/RationalSDLC/common/lib/perl5/5.8.6/MSWin32-x86-multi-thread/DynaLoader.pm line 230.
我们有几个同时运行的构建,这可以解释资源问题,除了这些日程安排已经存在大约2。5年,几乎没有问题。 我找不到与此问题相关的任何内容 - 这里的任何人都可以提供一些帮助吗?
答案 0 :(得分:2)
我想知道你为什么要使用Perl的古代副本,然后我意识到你正在使用IBM Rational产品 - 甚至可能是ClearCase Now,我感到很痛苦。
显而易见的答案是,每次调用Win32::Process:Create
时,你的Perl脚本就会耗尽内存。如果在调用新进程之前旧进程尚未死亡,则尤其如此。如果您查看任务管理器,您应该能够看到每次调用都会消耗掉资源。
你为什么现在而不是之前得到这个问题?也许您的构建变得越来越复杂或需要更长时间才能完成。之前,也许在您生成新的构建时,构建正在完成。
您可以使用活动监视器来监视内存和其他资源,或者从Microsoft下载Sysinternals tools,这样您就可以深入了解该问题。
您可以查看事件查看器,看看它是否会告诉您任何其他内容。
我可以提出两条建议:
Jenkins易于安装,并为您提供了更多控制构建过程的选项。 默认方式(并不是Jenkins设置为以这种方式设置,就像大多数人使用它一样)是每次进行更改时触发构建。但是,您可以在一天中的某个特定时间手动执行此操作,甚至可以通过按特定URL来执行此操作。当你想要同时发射十几个版本时,最后一个很方便。一个脚本可以为您完成此任务。
最大的好处是Jenkins会对构建进行排队,因此不要压倒构建系统的资源。例如,您可以拥有3个或4个构建执行程序,并且只会同时执行3个或4个构建。您启动的任何其他构建将只等待下一个免费执行程序。你可以只有一个执行者,或者只有......我一次最多只有16个。
切换到使用Jenkins可能很容易。 Jenkins需要大约10到20分钟的时间进行设置(我也包括从互联网上下载Jenkins。)设置构建项目很快,你可以使用你用来启动构建的相同命令太。如果这是一个.NET项目,你也可以下载Jenkins的MSBuild插件。