我最近遇到了一个问题,即命令matlabpool('open', 'local', 8)
在启动工作人员之前大约需要27分钟。在延迟期间,Windows任务管理器显示单个MATLAB.exe进程消耗零CPU,内存使用或PF Deltas没有变化,并且正在使用少于25%的物理RAM。
我尝试在open命令之前输入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 RAM。
我单步使用调试器并确定在CJSSupport.m文件中第507行调用cjsPrepareForSubmission
之前没有延迟。如果在那一点上,除了“执行指针”从绿色箭头变为白色箭头之外没有显示变化,我会“进入”。第二个“步入”会调出包含class def (Hidden, Sealed) JobInitData
的JobInitData.m文件,该文件会隐藏视图中的实际实现。
“单步执行”7次以上工作没有延迟将变量plainTextForBatchJob
和plainTextForInteractiveJob
添加到工作区。在第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)
答案 0 :(得分:6)
问题是由于过时的环境变量LM_LICENSE_FILE指向不再在网络上的PC。
使用过程监控器;我们在MATLAB中发现了这个问题。我们能够看到MATLAB在26分钟内尝试连接到端口1717上的ip-address。该ip-address最终成为另一个产品的许可证服务器的旧位置,该产品是通过LM_LICENSE_FILE设置的。一旦我们删除了LM_LICENSE_FILE环境变量,问题就停止了(我们的MATLAB通过另一种方法许可;许可证目录中的许可证文件)。
显然MATLAB尝试首先使用LM_LICENSE_FILE中的任何服务器,如果无法访问服务器,则会有超长的超时时间 - 约26分钟。超时后,它会搜索定位许可证定义的其他方法,然后成功。
通过设置环境变量“LM_LICENSE_FILE=1717@137.400.200.1”可以复制问题。所选的IP地址是任意的,但不应连接到PC。