解决错误:客户端与工作单元断开连接
问题
当您在交互式并行池上运行 parfor-loop、parfeval 计算或 spmd 模块时,该池可能会关闭,并显示如下错误消息:
This parallel pool has been shut down.
Caused by: The client lost connection to worker 3 (Task 3; Host: localhost), potentially due to
network issues or errors during the interactive communicating job.如果您正在运行一个 parfor-loop,错误消息之前通常会出现如下所示的警告消息:
Warning: A worker aborted during execution of the parfor loop. The parfor loop will
now run again on the remaining workers.如果您正在运行 spmd 模块,spmd 模块也可能报错,并显示类似以下的消息:
The parallel pool that SPMD was using has been shut down. Reason:
The client lost connection to worker 3 (Task 3; Host: localhost), potentially due to network
issues or errors during the interactive communicating job.可能的解决方案
如果某个 MATLAB® 工作单元意外终止,或者由于网络、内存或通信问题导致该工作单元无法连接到客户端,MATLAB 可能会关闭并行池。
检查 MATLAB 工作单元是否崩溃
如果错误是由某个工作单元意外终止引起的,该工作单元会像 MATLAB 客户端一样生成崩溃日志。请采用以下任一方法获取由工作单元生成的崩溃日志。获取崩溃日志后,请检查日志以排查崩溃原因。如果崩溃发生在您编写的 MEX 代码中,那么您可以尝试在客户端上运行该 MEX 代码,以排查问题。否则,如需帮助了解并排查崩溃问题,请在 https://www.mathworks.com/support/contact_us.html 提交支持工单。
本地计算机处理池. MATLAB 客户端在出现错误后会显示一条警告,其中包含一个指向崩溃日志位置的链接。要查看崩溃日志,请点击该链接。
Warning: 6 worker(s) crashed while executing code in the current parallel pool. MATLAB may
attempt to run the code again on the remaining workers of the pool, unless an spmd block has
run. View the crash dump files to determine what caused the workers to crash.您还可以访问本地计算机作业存储位置中的崩溃日志。要查找作业存储位置,请在 MATLAB 命令行窗口中输入以下命令。
c = parcluster("Processes");
c.JobStorageLocationJob# 文件夹,并查看其中的任何 matlab_crash_dump 文件。请使用以下任一方法,在客户端上识别出发生故障的并行池作业的作业 ID。
在 作业监控程序 中,找到描述为“交互式池”且状态为“失败”的作业的作业 ID。

下次使用
Processes配置文件创建并行池时,客户端会显示一条包含该失败并行池作业 ID 的消息。Preserving jobs with IDs: 78 because they contain crash dump files. You can use 'delete(myCluster.Jobs)' to remove all jobs created with profile Processes. To create 'myCluster' use 'myCluster = parcluster('Processes')'.
MATLAB 作业调度器集群池. 崩溃日志位于托管了丢失的工作单元的主机上。在可能的情况下,MATLAB 客户端会在错误提示后显示一条警告,其中包含指向崩溃日志位置的链接。要查看崩溃日志的位置,请点击该链接。
Warning: 12 worker(s) crashed while executing code in the current parallel pool. MATLAB may
attempt to run the code again on the remaining workers of the pool, unless an spmd block has
run. View the crash dump files to determine what caused the workers to crash.mjs_def 文件中的 LOGBASE 参数设置。有关详细信息,请参阅找到日志文件 (MATLAB Parallel Server)。第三方调度器集群池. 您可以通过访问集群对象的作业存储位置来查找崩溃日志。要查找作业存储位置,请在 MATLAB 命令行窗口中输入以下命令,并将 MyThirdPartyScheduler 替换为您第三方调度器集群的集群配置文件名称。
c = parcluster("MyThirdPartyScheduler");
c.JobStorageLocationJob# 文件夹,并访问其中的任何 Job#.log 和 matlab_crash_dump 文件。请使用以下任一方法,在客户端上识别出发生故障的并行池作业的作业 ID。
在 作业监控程序 中,找到描述为“交互式池”且状态为“失败”的作业的作业 ID。

下次使用相同的集群配置创建并行池时,客户端会显示一条包含该失败并行池作业 ID 的消息。
Starting parallel pool (parpool) using the 'mySlurmCluster' profile ... Preserving jobs with IDs: 77 because they contain crash dump files. You can use 'delete(myCluster.Jobs)' to remove all jobs created with profile mySlurmCluster. To create 'myCluster' use 'myCluster = parcluster('mySlurmCluster')'.
检查其他问题
如果找不到发生故障的并行池的崩溃日志,那么原因很可能与网络、内存或通信问题有关。
排查内存问题. 在运行 Linux® 操作系统的集群节点上,如果某个工作单元占用的内存过多,操作系统可能会终止该工作单元。如果您的代码处理的数据量出乎意料地大,或者未能高效利用内存,就可能会出现这种情况。您可以在 MATLAB 客户端上对代码进行原型测试,以排查内存问题。
在并行代码的简化版本上,使用 Pool Dashboard 或
ticBytes及tocBytes函数,测量并行池中往返于工作单元的数据传输量。要了解工作单元生成了多少临时数据,请切换到串行执行模式,并监控系统的内存使用情况。对临时变量使用
whos函数,以帮助识别内存中体积较大的变量。
要了解如何在 MATLAB 中高效使用内存,请参阅 高效使用内存的策略。有关排查内存不足错误的更多信息,请参阅 解决“内存不足”错误。
如果无法减少代码要求的内存量,请考虑为工作单元增加可用的内存资源。
如果您正在本地计算机上使用一个池,请将并行代码扩展到本地或云端集群上。您可以将大型数组分布在多台计算机上。要了解详细信息,请参阅从桌面扩展到集群。
如果您在集群上使用并行池,请在启动并行池之前,增加分配给每个工作单元的系统内存。
检查资源竞争. 资源竞争可能会延迟工作单元之间的通信信号,从而可能导致工作池出现故障。当多个工作单元同时访问集群节点的 CPU、内存或网络时,可能会发生资源争用。由于资源带宽有限,部分工作单元可能需要等待,这可能会导致工作单元之间的通信信号延迟,从而扰乱工作池的正常运行。为缓解资源竞争,可考虑采取以下策略:
将任务均匀分配给各工作单元,以确保 CPU、内存及其他资源得到均衡利用。调整工作单元数量或任务规模,以适应并行池中可用的资源。使用 Pool Dashboard 来分析每个工作单元中耗时最长的函数,并找出在各工作单元之间分配不均的任务。有关详细信息,请参阅使用并行池仪表板监控池工作单元。
在 R2025a 之前的版本中: 要确定每个工作单元上哪些函数耗时最多,以及哪些任务在各工作单元之间的分配不均,请使用
mpiprofile。有关详细步骤,请参阅 探查并行代码。如果您有数据,可以通过将数据迁移到集群存储来减少不必要的网络访问。使用
addpath函数将它们的位置添加到工作单元的搜索路径中。
检查网络是否不稳定. 网络延迟或连接中断也可能导致并行池出现故障。
检测您的 MATLAB 客户端与集群之间的连接稳定性,请在集群配置文件管理器中验证您的集群配置文件。
要打开集群配置文件管理器,请在主页选项卡上的环境部分中选择并行 > 创建和管理集群。
选择要验证的配置文件。
在 Validate 选项卡上,选择 Validate。
检查 Cluster connection test (parcluster) 阶段的结果,查看是否有与网络延迟相关的警告或错误。延迟超过 300 毫秒时,系统会触发“高延迟阶段”警告。调查可能的原因,例如网络干扰、基础设施不足,或者客户端与集群节点之间的距离过远。