2014-02-14 31 views
2

我最近遇到一个问题,在启动工人之前,命令matlabpool('open', 'local', 8)挂起大约27分钟。在延迟期间,Windows任务管理器显示一个消耗零CPU的单个MATLAB.exe进程,内存使用量或PF Deltas没有变化,正在使用的物理RAM少于25%。matlabpool(open ...)在开始工作前挂起25分钟以上

我试过在打开命令之前输入distcomp.feature('LocalUseMpiexec', false)matlabpool close force local但仍然存在问题。直到最近,开放命令只需要一两分钟即可完成。我没有做任何配置更改,但在IT部门管理的环境中工作,因此无法确定可能对OS/AV /等进行了哪些维护更新。

任何人都可以确定为什么这个挂机正在发生?

我在使用Java 1.6.0_25-b0的matlab版本8.1.0.604(R2013a)。我也看到了使用Java 1.6.0_17-b04的问题。运行Windows 7企业版6.1.7601 Service Pack 1 Build 7601. PC具有双Intel Xeon CPU(12核),内存为24 GB。

我单步使用调试器,并确定没有延迟,直到在CJSSupport.m文件的第507行调用cjsPrepareForSubmission。如果此时我做了“步入”,除非“执行指针”从绿色箭头变为白色箭头,否则显示屏没有变化。第二个“步骤”调出包含class def (Hidden, Sealed) JobInitData的JobInitData.m文件,该文件隐藏了实际的实现。

“步入”7次多次无延迟地将变量plainTextForBatchJobplainTextForInteractiveJob添加到工作区。在第8步“进入”主要matlab窗口中指示的状态变为繁忙并且保持25分钟以上的状态。状态最终更改为在调试器中停止后,您可以点击继续,并且工作人员立即启动,并且过程完成而没有额外的延迟。

调用树从公开征集到隐藏的问题区域:

matlabpool(‘open’, ‘local’, 8) 
Matlabpool.m 139: matlabpoolOut = MatlabpoolHelper.doMatlabpool(parsedArgs,parsedArgs.ActionArgs.Scheduler); 
MatlabPoolHelper.m 137: MatlabpoolHelper.doOpen(sched, parsedArgs.ActionArgs); 
MatlabPoolHelper.m 363: client.start('matlabpool', parsedOpenArgs.NumLabs, sched, 'nogui', parsedOpenArgs.FileDependencies); 
InteractiveClient.m 279: submit(obj.ParallelJob); 
Job.m 302: job.submitOneJob(); 
CJSCommunicatingJob.m 82: job.Parent.hSubmitCommunicatingJob(job, job.Support, job.SupportID); 
hSubmitCommunicatingJob.m 27: jobSupport.prepareJobForSubmission(job, jobSupportID); 
CJSSupport.m 507 : cjsPrepareForSubmission(job, obj, jobSId); 
JobInitData.m 8: (HIDDEN) 

回答

6

问题是由于指着一台PC,这是在网络上不再是一个过时的环境变量LM_LICENSE_FILE。

使用过程监视器;我们已经在MATLAB中确定了这个问题。我们能够看到MATLAB在26分钟内尝试连接到1717端口上的IP地址。该ip地址最终成为另一个产品的许可证服务器的旧位置,该产品是通过LM_LICENSE_FILE设置的。一旦我们删除LM_LICENSE_FILE环境变量,问题就会停止(我们的MATLAB通过另一种方法许可;许可证目录中的许可证文件)。

很显然,MATLAB试图首先使用LM_LICENSE_FILE中的任何服务器,并且如果服务器无法到达 - 26分钟,则会有极长的超时时间。超时后,它将搜索其他找到许可证定义的方法,然后成功。

通过设置环境变量“LM_LICENSE_FILE=171​​[email protected]”可以复制该问题。所选ip地址是任意的,但不应连接PC。