Hudson SCM轮询线程在轮询时挂起



我们使用Hudson作为持续构建环境。由于某种原因,SCM Polling的线程有时会在一段时间后挂起。我尝试了很多设置,但似乎没有什么是真正有效的。如何解决这个问题,是否有一些脚本可以检测到这样的情况下,能够重新启动哈德逊?顺便说一句。重启Hudson是目前解决这个问题的唯一办法。

这与错误5413类似,应该在2010年底通过HUDSON 5977 (HUDSON 1.380+,或现在的Jenkins)解决。

在这些线程中有一些方法可以杀死任何卡在轮询步骤上的线程:

非常原始(我懒得开发更好的东西,因为这不是很重要的问题)Groovy脚本如下:
它可能会杀死没有卡住的SCM轮询,但是我们每天只自动运行这个脚本一次,所以它不会给我们带来任何麻烦。
您可以通过保存SCM轮询线程的id和名称来改进它,一段时间后再次检查并仅杀死id在上次检查列表中的线程。

Thread.getAllStackTraces().keySet().each(){ item ->
  if( item.getName().contains("SCM polling") && 
      item.getName().contains("waiting for hudson.remoting")){ 
     println "Interrupting thread " + item.getId() item.interrupt() 
  }
}

另一个答案对我不起作用,但下面的脚本发现了这个问题的问题:

Jenkins.instance.getTrigger("SCMTrigger").getRunners().each()
{
  item ->
  println(item.getTarget().name)
  println(item.getDuration())
  println(item.getStartTime())
  long millis = Calendar.instance.time.time - item.getStartTime()
  if(millis > (1000 * 60 * 3)) // 1000 millis in a second * 60 seconds in a minute * 3 minutes
  {
    Thread.getAllStackTraces().keySet().each()
    { 
      tItem ->
      if (tItem.getName().contains("SCM polling") && tItem.getName().contains(item.getTarget().name))
      { 
        println "Interrupting thread " + tItem.getName(); 
        tItem.interrupt()
      }
    }
  }
}

相关内容

  • 没有找到相关文章

最新更新