Jenkins取消隐藏抛出java.lang.StackOverflowError-取消无限递归?

时间:2019-07-16 21:27:59

标签: jenkins jenkins-pipeline

在Windows 10上的Jenkins中取消隐藏时获取java.lang.StackOverflowError;在一台服务器上发生,但不在另一台服务器上。看起来好像没有藏身之处正在得到无限递归。

  • 隐藏和未隐藏的名称相同吗? -是的;使用相同的功能对每个对象进行隐藏。
  • 重新启动Jenkins主服务器和从服务器-是的。
  • 是否有足够的磁盘空间可用于存储? -是的。
  • 通过网络搜索此错误-是的,但此问题未解决。
  • 这在过去有用吗? -是的,unstash在一台服务器上工作,但在另一台服务器上工作。
  • 目标目录是否干净? -是的。
  • 在不同的时间尝试过吗? -是的。
def stash_my_stuff() {
    stash includes: '**', name: 'my_stash'
}
def unstash_my_stuff() {
    unstash 'my_stash'
}

// on one agent
dir("d:\\tmsc") { unstash_my_stuff() }

// later on a different agent
dir("d:\\tmsc") { unstash_my_stuff() }
13:23:33 Running in D:\tmsc
[Pipeline] {
[Pipeline] unstash
[Pipeline] }
[Pipeline] // dir
[Pipeline] dir
13:24:01 Running in D:\tmsc
[Pipeline] {
[Pipeline] End of Pipeline
java.lang.StackOverflowError
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:111)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:778)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
etc., etc., etc.
sometimes it also includes
    at org.jboss.marshalling.river.RiverMarshaller.doSerializableObject(RiverMarshaller.java:967)

2 个答案:

答案 0 :(得分:0)

在使用并行阶段时,我遇到了类似的问题。

我已经找到bug report了。 comment中的一个(将在下一条评论中得到赞扬)建议这样做:

  

我也遇到了这个问题。我在Windows上使用Jenkins   使用安装程序安装。经过一番挖掘,我意识到   Jenkins的此发行版随附了32位版本的   JRE,Windows服务(使用   jenkins.xml文件)。这严重限制了堆内存的数量。   JVM可以分配。如果您在相同情况下也遇到此问题,   修改jenkins.xml以使用其他64位版本的JRE,以及   增加最大堆分配(例如-Xmx1024m)。

我还没有尝试过(我对使用Jenkins的服务器没有适当的访问权限),但是当我这样做时,我会更新答案。

答案 1 :(得分:0)

我遇到了类似的错误,最终可以通过几件事解决它,其中之一是MarekR在他的回答中提到。

  1. 更新jenkins.xml文件以使用64位JRE
  2. 将JRE的最大堆大小增加到1024m(在jenkins.xml文件中)
  3. 在jenkins.xml(-Xss4m)中也将堆栈大小增加到4m

最后,请确保保存xml文件并重新启动jenkins服务以获取新更改。

希望这会有所帮助!