ecFlow笔记:使用SSD盘保存ecFlow生成文件

目录

NWPC 目前使用四个 ecFlow 服务,分布在 CMA-PI 业务分区的两个登陆节点上:

  • login_b01 上运行 nwpc_op(确定性业务系统),nwpc_qu(准业务系统)和 nwpc_pd(后处理系统)
  • login_b02 上运行 nwpc_qu_eps(集合预报系统)

在业务高峰时段,即 00 时次运行的 13:00 - 14:00 之间,使用 ecflow ui 监视系统时经常出现无法获取服务运行状态的情况。

在 ecflow ui 中显示效果如下图所示:

ecFlow ui 无法获取 login_b09 的运行状态

Info 面板中显示无法连接 ecFlow 服务的出错消息

虽然这个问题之前也一直存在,只要等待一会儿就可以再次看到系统的运行状态。 但 7 月 21 日整个一下午的时间都无法连接作业数较多的 nwpc_pd 和 nwpc_qu_eps 两个服务,严重影响运维工作,也导致产品出现延迟。

我一直怀疑界面卡住的现象与磁盘IO性能有关,但缺乏足够的证据。

之前写的两篇文章尝试分析定时任务为什么没有启动,很可能与界面卡住的原因类似。

ecFlow笔记:定时任务没有启动 - 排查

ecFlow笔记:定时任务没有启动 - 分析

本文介绍最近两天在信息中心的配合下,我们进行的一些尝试。

分析

下图以 GRAPES GFS 后处理系统为例说明 NWPC 数值预报业务系统 ecFlow 的目录结构。

ecFlow 的 ecf 脚本和 include 文件保存在用户分区 /g1/u 中。 可执行程序和绘图脚本也保存在该分区中。

ecFlow 运行任务时生成的 job 文件和 job 脚本运行的标准输出和标准错误输出重定向文件保存到另一个分区 /g3 中。 系统的运行目录,即生成数据产品和图片产品的目录,也在 /g3 分区中。

GFS 后处理系统的 ECF_HOME 变量指向 /g3 下的目录

界面卡住的一个可能原因就是 ecFlow 服务根据 ecf 脚本和 include 文件生成 job 文件的时间太长(超过阈值 4 秒)。 根据之前两篇文章的分析,NWPC 使用的 ecflow 服务在生成 job 文件的同时不会响应客户端请求。

生成 job 超时的原因可能有多种:

  • /g1/u 中读取脚本速度慢
  • ecflow 服务内部进行预处理速度慢
  • 将 job 文件写入到 /g3 中速度慢

想要找到问题的根源,就需要控制变量进行对比试验。

方案

在信息中心的支持下,我们终于有机会验证上面的第三点是否是导致 job 生成超时的主要因素。

我们将 ECFOUT 目录迁移到挂载 SSD 固态硬盘的 /g0 目录下。 为了保持业务系统稳定性,将 /g3 目录下的 ECFOUT 改为指向 /g0 的软连接。

下图是更新后的 ecFlow 目录设计图。 相对于现有方案,仅将 ECFOUT 目录迁移到新的分区中。

GFS 后处理系统的 ECF_HOME 变量通过链接指向 /g0 下的目录

效果

通过统计 ecFlow 日志中记录生成 job 超时的记录个数来判断迁移到 SSD 是否有效果。

超时记录如下所示:

WAR:[13:53:59 14.5.2020] Job generation for task /meso_post/09/meso_togrib2/grib2WORK/019/pre_data2grib2_019 took 4633ms, Exceeds ECF_TASK_THRESHOLD(4000ms)

nwpc_pd 从 7 月 21 日 12 时次开始切换到 /g0。 下图是 7 月 1 日到 23 日的作业生成超时数。 21 日明显比之前增加很多,切换目录后 22 日和 23 日仅有个位数的超时任务。

nwpc_qu_eps 从 7 月 23 日 00 时次开始切换到 /g0。 下图是 7 月 1 日到 23 日的作业生成超时数。 同样可以看到 21 日和 22 日有明显的增加,而 23 日因为没有超时作业,在图中没有显示。

nwpc_qu_eps 从 7 月 1 日到 23 日的作业生成超时数,23 日为 0

结论

虽然仅有一天的对比,但可以明显看出,将 job 文件保存目录 ECFOUT 切换到 SSD 固态硬盘分区后,作业生成超时现象几乎不再发生。

说明 “将 job 文件写入到 /g3 中速度慢” 是作业生成超时的主要原因。

但也应该注意到,nwpc_pd 依然有个别的任务生成 job 超时,这可能与剩下的两个因素有关,有待进一步研究。