![](/img/trans.png)
[英]Too many open files; nested exception is 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.