Java UrlConnection 在高负载下触发 "Connection reset"异常。为什么?

标签 java networking concurrency amazon-s3 ioexception

我在 Linux (Ubuntu 10) 64 位服务器上使用 Java 从 Amazon S3 流式传输文件。

我为每个文件使用一个单独的线程,每个文件打开一个 HttpURLConnection,它同时下载和处理每个文件。

在我达到一定数量的流(通常大约 2-300 个并发流)之前,一切都运行良好。在此之后的不规则点,多个(比如 10 个)线程将开始java.net.IOException: Connection reset 错误同时

我正在限制下载速度,远远低于 m1.large 实例的 250mbit/s 限制。所有其他服务器方面的负载也微不足道(例如 CPU、平均负载和内存使用都很好)。

可能是什么原因造成的,或者我该如何追踪?

最佳答案

猜测可能会发生什么并不容易,但这是一些提示,可能有些可能适用于您的上下文:

  • 你能检查你的 shell(linux bash/zsh 或任何其他)看看你是否提高了限制文件描述符数量的标准限制(但也包括套接字), 使用 bash shell 的 man ulimit
  • 您是否在 Java 代码中明确关闭了流?不关闭流可能会导致这种聪明的问题
  • 尝试谷歌 Linux TCP 内核调整,看看您的 ubuntu 服务器是否有适合此类负载上下文的堆栈...

HTH 杰罗姆

关于Java UrlConnection 在高负载下触发 "Connection reset"异常。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9116977/

相关文章:

java - 日语字符未正确显示转换 CSV 文件

java - 如何将顶级框架放置在另一个java中

networking - 在同一Intranet上区分两台计算机

concurrency - 仅附加表上的读写问题

c# - 同时锁定多个对象

iphone - 暂停执行直到 Websocket 连接

java - 如何避免在android中方向改变时生成随机数

java - Hibernate:删除子行而不影响父行

networking - 尝试登录laravel项目时504网关超时

c# - 套接字在一端断开连接,防火墙吗?