繁体   English   中英

连接到目标主机时捕获到I / O异常(java.net.SocketException):打开的文件太多

[英]I/O exception (java.net.SocketException) caught when connecting to the target host: Too many open files

我正在使用Apache Jmeter测试我们的应用程序,但突然之间,Jmeter显示的大多数错误是

java.net.SocketException: Too many open files at java.net.Socket.createImpl(Socket.java:447) at java.net.Socket.getImpl(Socket.java:510) at java.net.Socket.setSoTimeout(Socket.java:1101)
at org.apache.http.conn.scheme.PlainSokcetFactory.connectSocket(PlainSocketFactory.java:126)

当我在互联网上搜索时,大多数关于此错误的评论都是由于机器的开放限制引起的,然后有一个回答说应使用实体,而当我尝试使用实体时,错误的数量减少了,但是没有那么多。 还有其他方法可以处理这种错误吗?

Linux机器上的默认打开文件和/或套接字的最大数量为1024。

如果您的测试超过了极限,尽管您不应该这样做,则需要检查测试并检测并修复泄漏。

如果可以预期,并且您只是增加了文件/套接字的限制,则应该可以将它们增加到合理更高的值。 ulimit的命令的参考和信息limits.conf file.Alternatively你可以尝试运行的JMeter作为root用户。

要获取允许的最大打开文件数,请执行

ulimit -n 

在终端

参考文献:

希望这可以帮助

最可能的原因是您创建了许多Socket但是没有正确.close()它们。

您不会显示代码,因此没有人可以为您解决该问题。 无论如何,在处理Socket ,或者实际上是实现Closeable 任何类( Socket都在做 )时,都有经典的习惯用法。

使用Java 6:

final Closeable closeable = whatever(); // or Socket, or InputStream, or...
try {
    doSomethingWith(closeable);
} finally {
    closeable.close();
}

使用Java 7:

try (
    final Closeable closeable = whatever();
) {
    doSomethingWith(closeable);
}
// Automatically closed for you

注意:在Java 7中,实际上任何实现AutoCloseable东西都可以; Closeable扩展了AutoCloseable

注意2:如果您使用Java 6并且可以买得起Guava 14+,请考虑使用Closer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM