【发布时间】:2017-02-24 17:16:18
【问题描述】:
我们有几个 jenkins 管道作业需要比我们预期更长的时间才能完成。特定步骤似乎“挂起”了一段毫无根据的时间。在另一个系统上手动运行这些相同的步骤运行速度明显更快。
一个示例作业是使用 Ruby 递归遍历一堆目录并对这些目录中的每个文件执行 shell 命令的步骤。在我们的 Ubuntu 14.04 Jenkins 系统上运行大约需要 50 分钟。在我的桌面 Mac 上运行相同的命令大约需要 10 秒。
我通过在命令提示符下运行 Ruby 命令对 Jenkins 构建器进行了一些实验,结果与 Jenkins 一样慢。我还通过批量处理 Ruby 将运行的每个单独的 shell 命令并将它们放入 shell 脚本以按顺序运行每个 shell 命令,从而从等式中删除了 Ruby。这也花了很长时间。
我已经阅读了一些关于 STDERR 阻塞的帖子,这可能是原因。然后我做了一些实验,将 STDERR 和 STDOUT 重定向到 /dev/null,命令将在大约 20 秒内完成。这正是我所期望的。
我的问题是: 1. 这些执行时间的减慢是否是某些 I/O 阻塞的结果? 2. 解决此问题的最佳方法是什么?在某些情况下,我可能想要输出,因此重定向到 /dev/null 可能不起作用。我可以进行内核或操作系统级别的更改吗?
在 Ubuntu 14.04 Amazon EC2 实例 R3.Large 上运行。
Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-108-generic x86_64)
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
【问题讨论】:
标签: ruby linux shell jenkins ubuntu-14.04