运行Hudson工作时空间不足

时间:2013-09-09 18:30:59

标签: unix memory jenkins hudson solaris

我的Hudson作业在每次运行时都会出现此错误:

    Caused by: java.io.IOException: error=12, Not enough space
     at java.lang.UNIXProcess.forkAndExec(Native Method)

我在StackOverflow和Jenkins网站上找到了关于此错误的文档,这表明存在交换空间问题(https://wiki.jenkins-ci.org/display/JENKINS/IOException+Not+enough+space)。

然而,也许我的问题不同或不同,但如果我手动启动该过程它可以正常工作。 奇怪的是我从prstat的顶部看到了不同的结果:

规格:

  • Hudson进程在他们自己的Unix用户中运行
  • 操作系统:SunOS dc5c00-d12 5.10 Generic_147440-19 sun4v sparc sun4v
  • 记忆:

    • 从顶部开始:

      32G phys mem, 6255M free mem, 16G total swap, 16G free swap
      
    • 来自prstat的
    • NPROC USERNAME  SWAP   RSS MEMORY      TIME  CPU
      50 user1      12G   12G    39%  89:02:31 0.3%
      36 user2      11G 6779M    21% 155:17:41 0.0%
      26 user3      10G 8509M    26% 4787:37:4 8.0%
       6 hudson    572M  556M   1.7%   0:08:25 0.0%
      57 root      280M  285M   0.9% 138:46:05 0.0%
      

是否可以确认我是否有掉期问题? top显示16GB免费...

编辑: swap -s的结果(在问题被重新解决之后)

    total: 19940168k bytes allocated + 12578048k reserved = 32518216k used, 4118208k available

1 个答案:

答案 0 :(得分:1)

这当然是一个交换问题。

top报告为不包含分页数据的空闲交换块。然而,即使在未使用时,也可以保留这些块中的一些(即,仍未分配的虚拟存储器)。当你没有更多的块来支持内存预留时,你会得到这个“空间不足”的例外。

swap -s显示您的应用程序预留的容量超过12 GB,而交换区域仅为16 GB。我会将交换大小加倍,以防止虚拟内存短缺。