![以较低的进程优先级运行 Hudson 构建](https://linux22.com/image/563861/%E4%BB%A5%E8%BE%83%E4%BD%8E%E7%9A%84%E8%BF%9B%E7%A8%8B%E4%BC%98%E5%85%88%E7%BA%A7%E8%BF%90%E8%A1%8C%20Hudson%20%E6%9E%84%E5%BB%BA.png)
在我的办公室,我们有一台运行 Hudson (1.395) 的旧服务器和一些其他东西(JIRA 和 SVN 是其中最重要的两个)。当 Husdon 运行构建时,服务器速度的下降非常明显。
我一直在尝试找到一种方法来重新优化 Hudson 启动的构建过程(我们使用 maven)。似乎没有这个选项。我不希望 Hudson 正在运行的 Tomcat 副本处于较低的优先级,所以我一直在尝试找出一种方法,让它只应用于构建过程。如果不替换/添加服务器/从属服务器,这些是我见过的唯一选项:
我可以用自己的插件替换 maven 插件,它通过 nice 启动 Java。虽然我已经找到了代码中需要更改的位置(在 MavenProcessFactory.java 中,大约 110 行),但对于这么小的更改,这似乎还有很长的路要走。这将是一个维护负担
我可以将 Hudson 指向一个虚假的 Java 目录。通过这样做,我可以用一个可以调用真实 Java(reniced)的 shell 脚本替换 Java。
我可以设置某种脚本,比如使用 cron,但我必须捕获每个子进程才能正确执行
有人做过这样的事吗?你知道还有其他选择吗?
选项 3 显然是 hack。选项 2 避免了我接触代码(这样我就不必担心未来的升级),但不清楚发生了什么。修补代码需要一些维护,但我可以清楚地说明我如何运行 Maven,甚至可以使每个项目的配置都变得可行。
答案1
虽然软件本身没有允许您执行此操作的功能,但您几乎已经概述了三种可用选项,这些选项可以实现此目的而无需付出太多努力。
更仔细地查看这些选项:
选项 3 很糟糕。不要这么做。太复杂,而且很容易搞砸。
选项 1 不太糟糕 - 您只需要记住每次升级时修补,这很烦人。
选项 2 是最不糟糕的路径。我会这么做。是
的,不是立刻显而易见发生了什么事,但如果你文档你做了什么(以及文档是在一个显而易见的地方)这不是一个坏的解决方案。