记得及时关闭不用的Stream

紧张的Release阶段中又来了个棘手的Ticket,出错信息是文件存在,但打不开了,单个Process能用的File Descriptor已经到了默认的最大值(1024)。我们可以简单的通过ulimit修改FD限制,增大上限。可Java-based GUI进程并没有打开这么多文件,问题在哪呢?

lsof观察发现,GUI进程打开发很多PIPE的类型的FD,原来是大量的stdin, stdoutstderr没有关闭。在程序里,GUI会用Runtime.getRuntime().exec()调用一些后台的Utility程序,完成一些工作,每exec()一下就会占用3个PIPE的FD。当外部程序结束时,这些FD也不会被自动关闭。如果GUI进行久一些,FD的上限就可以超过。

改正的方法也很直接–及时的关闭这些不用的Stream,用common.io中的IOUtils关闭这些Steam。

把这个函数写在某个finally block里吧。