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.<init>(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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这是一个Java程序出现的错误,错误信息为“createprocess error=2,系统找不到指定的文件”。这通常是因为程序尝试执行一个不存在的文件或路径,导致无法创建进程。可能需要检查程序中的文件路径或文件名是否正确,或者检查系统中是否存在所需的文件。 ### 回答2: 在Java开发中,我们有时会遇到这样的异常:caused by: java.io.ioexception: createprocess error=2,系统找不到指定的文件。这是由于Java系统在创建一个新的进程时,找不到指定的可执行文件,从而抛出的异常。 造成这个异常的最常见的原因是路径错误。当我们在处理输入、输出等操作时,需要指定正确的文件路径。如果文件路径不存在,那么Java就会抛出这个异常。另一个可能的原因是消息提示中已经明确指出的,也就是指定的文件不存在。在这种情况下,我们需要检查一下文件是否存在,如果不存在,需要重新编写路径或创建需要的文件。 为了避免这个问题,我们需要写出可靠的代码并遵循以下最佳实践: 1.正确编写文件路径,确保所有文件都能够被找到。 2.程序执行期间不要删除或移动文件,避免找不到文件。 3.注意检查错误日志,尽可能确定出错的原因并进行调整。 4.确保文件Java程序中可以正确地打开和关闭。 在开发中遇到这种异常的时候,需要及时找到问题并修复。通过注意细节,合理编写代码并严格执行上述最佳实践,我们可以避免这类异常并提高代码的可靠性和健壮性。 ### 回答3: 这个错误是Java程序在执行调用系统命令时出现的错误。具体地说,是因为Java程序调用了一个不存在或者无法找到的文件,然后导致系统无法创建这个命令。 Java程序可以通过ProcessBuilder或Runtime.getRuntime().exec()方法来执行系统命令。当程序运行到exec()方法时,会创建一个子进程来执行系统命令,然后将子进程的输入和输出管道与Java程序的输入和输出连接起来。 如果在调用运行系统命令时,Java程序无法找到指定的文件,例如指定的文件不存在,或者程序没有权限访问该文件等,则会抛出上述异常。 解决这个问题的方法有很多,其中一种方法是检查Java程序的路径和文件名是否正确。另外,还可以通过设置环境变量来解决该问题。还有一种方法是使用绝对路径来调用系统命令,这样可以避免出现找不到指定文件的错误。 总之,这个异常的出现是由于Java程序无法找到指定的文件,需要我们检查Java程序的路径和文件名是否正确,或通过设置环境变量或使用绝对路径来避免该问题的出现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值