詹金斯大师与奴隶能力规划

时间:2017-12-21 14:29:00

标签: jenkins jenkins-slave

背景

任何人都可以准确了解Jenkins主人在容量规划方面的责任。

我目前只设置了一个主设备和从设备,其中主设备功能强大得多的EC2 t2.micro但是从设备是t2.medium

主服务器偶尔会死,并且存在与内存不足错误相关的错误,并且无法在签出项目时分配内存。 Jenkins已配置-Xmx768m

我已经验证构建是绑定到从属节点而不是主节点。主站配置了0个执行程序,并且作业显示为在从站(1个执行程序)上运行。

示例错误

这是一个这样的例子

 ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from https://github.com/xyz.git
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:825)
    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1092)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1123)
    at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:113)
    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:130)
    at org.jenkinsci.plugins.workflow.multibranch.SCMBinder.create(SCMBinder.java:120)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:262)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:421)
Caused by: hudson.plugins.git.GitException: Command "git fetch --no-tags --progress https://github.com/xyz.git +refs/pull/16/head:refs/remotes/origin/PR-16 +refs/heads/develop:refs/remotes/origin/develop" returned status code 128:
stdout: 
stderr: error: cannot fork() for fetch-pack: Cannot allocate memory

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1990)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1709)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:72)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:400)
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:823)
    ... 8 more

我的问题

从资源利用率的角度来看,主设备在此设置中的作用是什么?我原以为它会是检查项目和建筑物(不是母校)的奴隶。 - 因此,为什么我在内存,CPU,磁盘容量和IOPS方面为从站分配了更多的资源。

除了集中的插件配置之外,我没想到主人除了通过SSH在从属设备上启动代理之外还扮演很多角色(从mem / CPU的角度来看,这不是我期望的密集工作)。 / p>

在短期内,我计划将主服务器升级为更强大的EC2实例类型,但是更好地了解主服务器真正需要什么来确保我正确规划容量而不是不必要的配置远太多了。

1 个答案:

答案 0 :(得分:0)

如果您在构建日志中收到此错误,并且您已将构建脚本编写为在从属服务器上运行,请通过请求节点标记或将主服务器上的执行程序数量减少到0,然后结帐 将在构建代理中发生。

如果是这样,那么内存耗尽的不是你的主人,而是你的奴隶。

我会尝试增加slave.jar的堆大小。如何执行此操作取决于how you're firing up the slaves

从Jenkins文档中的this bit开始,您会看到:

  

这些Windows服务的JVM启动参数分别由XML文件jenkins.xml jenkins-slave.xml 控制。在将它们安装为Windows服务后,可以分别在$ JENKINS_HOME和从属根目录中找到这些文件。文件格式应该是不言自明的。调整参数,例如为JVM提供更大的内存

但是,如果您使用java -jar slave.jar从命令行启动它们,那么您应该使用Xmx参数。也许你正在运行代理的盒子确实有足够的可用内存,但Jenkins代理只是没有使用它。

另外,here's是Jenkins wiki中一个非常有趣的页面,内容涉及如何调整主人和奴隶的大小。