java.io.IOException: error=24, 打开的文件过多

开发的hadoop-consumer程序周期性重启,在程序运行日志中也找不到异常。后来才发现是因为:

1、try catch中使用e.printStackTrace(),本以为出现异常时会打印日志。但程序的日志直接输出至屏幕,然后写了一个shell脚本将其重定向至一个文件,郁闷的是异常信息并没有写入日志文件中,所以发现不了这个错误;

2、在catch中增加了system.out.println(e.toString())之后,在日志中看到了错误,

Caused by: java.io.IOException: error=24, 打开的文件过多
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.(UNIXProcess.java:248)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 37 more

百度找到两篇博文说明出现此错误的原因以及解决方案:我的是由于每次调用程序都会创建consumer(利用socket与zookeeper、broker通信),使用完毕之后未调用close关闭consumer,导致文件描述符资源耗尽!

博文链接:

http://www.blogjava.net/fly2008/archive/2009/08/26/292626.html

http://farm28.iteye.com/blog/1742236

你可能感兴趣的:(kafka)