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

时间:2011-04-22 11:30:32

标签: multithreading svn hudson polling

我们将Hudson用于我们的连续构建环境。出于某种原因,SCM轮询的线程在一段时间后暂停了一些时间。我已经经历了很多设置,但似乎没有什么真正有效。如何解决这个问题,是否有一些脚本可以检测到这种情况能够重启哈德森?顺便说一句。重启哈德森是目前为我们解决这个问题的唯一方法。

2 个答案:

答案 0 :(得分:4)

这类似于bug 5413,应该从2010年末开始使用HUDSON 5977(Hudson 1.380+,或现在Jenkins)来解决。

你在那些帖子中some way to kill any thread stuck on the polling step

  

非常原始(我懒得开发更好的东西,因为这不是一个非常重要的问题)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() 
  }
}

答案 1 :(得分:0)

另一个答案对我不起作用,但是以下脚本found the the issue for this problem做了:

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()
      }
    }
  }
}