java.net.SocketException:打开的文件太多

2024-03-28

我有一个java应用程序,它运行得很好(在Ubuntu 10.04上)几个小时,直到它遇到“java.net.SocketException:打开文件太多”。 Sender.java的代码可以找到here https://code.google.com/p/android-marketplace-crawler/source/browse/crawler/src/com/marketplace/io/Sender.java

是不是因为我创建了一个新实例HttpPut and HttpPost对于每个线程?我正在使用 apache-commons HTTPClient 4。

这是异常日志:

java.net.SocketException: Too many open files
    at java.net.Socket.createImpl(Socket.java:414)
    at java.net.Socket.connect(Socket.java:544)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:133)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at com.marketplace.io.Sender.doBasicHttpPost(Sender.java:434)
    at com.marketplace.io.Sender.appVisualExists(Sender.java:223)
    at com.marketplace.io.Sender.addVisualToCollection(Sender.java:350)
    at com.marketplace.service.ImageThread.run(ImageThread.java:136)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:636)

任何 Java 服务器应用程序都可以看到“java.net.SocketException: Too much files open”,例如Tomcat、Weblogic、WebSphere等,客户端连接断开频繁。

请注意套接字连接被视为文件,它们使用文件描述符,这是一种有限的资源。

不同的操作系统对其可以管理的文件句柄数量有不同的限制。

简而言之,这个错误是因为客户端频繁连接和断开连接而出现的。如果您想自己处理它,您有两种选择:

1) 增加每个进程打开的文件句柄或文件描述符的数量。

在基于 UNIX 的操作系统中,例如Ubuntu或Solaris,可以使用命令ulimit -a找出每个进程允许有多少个打开的文件句柄。

$ ulimit -a
core file size        (blocks, -c) unlimited
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
open files                    (-n) 256
pipe size          (512 bytes, -p) 10
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 2048
virtual memory        (kbytes, -v) unlimited

可以看到,打开文件 (-n) 256,这意味着每个进程只允许打开 256 个文件句柄。如果你的Java程序,记住Tomcat,weblogic或任何其他应用服务器都是Java程序并且它们在JVM上运行,超过这个限制,它将抛出java.net.SocketException: Too much files open错误。

您可以使用 ulimit -n 更改此限制为更大的数字,例如4096,但请遵循 UNIX 系统管理员的建议,并且如果您有单独的 UNIX 支持团队,最好升级给他们。

2) 减少操作系统中TIME_WAIT状态的超时

在基于 UNIX 的系统中,您可以在以下位置查看当前配置/proc/sys/net/ipv4/tcp_fin_timeout file.

在基于Windows的系统中,您可以在Windows注册表中看到此信息。您可以按照以下步骤更改 Windows 中的 TCPTIME_WAIT 超时:

1) Open Windows Registry Editor, by typing regedit in run command window
2) Find the key HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters
3) Add a new key value pair TcpTimedWaitDelay asa decimal and set the desired timeout in seconds (60-240)
4) Restart your windows machine.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.net.SocketException:打开的文件太多 的相关文章

  • 如何在java中压缩/解压tar.gz文件

    谁能告诉我在java中压缩和解压缩tar gzip文件的正确方法我一直在搜索 但我能找到的最多的是zip或gzip 单独 我写了一个包装器公共压缩 http commons apache org compress called jarchi
  • 指纹奇异点检测

    我正在尝试确定指纹的核心点和增量点 我正在使用庞加莱指数方法 但我无法成功检测到这一点 而且我不明白为什么 First I divide the image in 15x15 blocks then I calculate the x an
  • 在 Tomcat 上部署 Java Web 项目,无需 WAR 或 EAR

    我有一个 Java Web 项目 Struts Spring 在我的本地主机上完美运行 我必须将其部署在我的网站上 但虚拟主机提供的 Tomcat Manager 界面显示 由于安全原因 它无法上传 WAR 文件 当联系技术支持时 我被告知
  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • 在 Android 中绘制一条带有弯曲边缘的线

    I am using canvas drawLine to draw some line in android but the lines are too sharp but i need a curved edges 这里的 1 是我所拥
  • 空 EntityManager/EJB 注入 MDB

    我有一个消息驱动 bean MDB 部署到 WebLogic 12 1 3 我尝试使用 PersistenceContext 注释将实体管理器注入 MDB 但实体管理器为空 我还尝试注入一个简单的无状态会话 bean 它也是空的 但是 Me
  • 如果按下 Esc 则中断循环

    我用 JAVA 语言编写了一个程序 它使用 Scanner 类接受来自控制台的输入 现在我想将此功能添加到我的代码中 以便在用户按下 Esc 按钮时存在循环 while 到目前为止 我认为键盘类可以帮助我 但它就像扫描仪一样 我尝试使用事件
  • 代码编译期间遇到警告消息“使用或覆盖已弃用的 API”

    我编译了我的程序并收到以下错误 我该如何解决呢 Note ClientThreadClients java uses or overrides a deprecated API Note Recompile with Xlint depre
  • 动画图像视图

    目前我正在开发一款游戏 这是我的游戏的详细信息 用户应选择正确的图像对象 我希望图像从左到右加速 当他们到达终点时 他们应该再次出现在活动中 这是我正在处理的屏幕截图 我有 5 个图像视图 它们应该会加速 您有此类动画的示例代码吗 非常感谢
  • BigDecimal 的 JPA @Size 注释

    我该如何使用 SizeMySQL 的注释DECIMAL x y 列 我在用着BigDecimal 但是当我尝试包括 Size max它不起作用 这是我的代码 Size max 7 2 Column name weight private B
  • 如何屏蔽 Protobuf 中的某些字段

    我找不到一种方法来屏蔽 protobuf 结构中的某些字段 我确实阅读了有关 FieldMaskUtil 的内容并尝试了几个示例 但它似乎做了相反的操作 即复制 FieldMask 中提到的字段 这与我想要的不同 这是示例结构和相应的测试代
  • MessageDigest MD5 算法未返回我期望的结果

    我脑后的某个东西告诉我 我在这里遗漏了一些明显的东西 我正在将现有的 java 项目与第三方 api 集成 该第三方 api 使用 api 密钥的 md5 哈希进行身份验证 它对我不起作用 在调试过程中我意识到我生成的哈希值与他们提供的示例
  • 如何将txt文件添加到你的android项目中? [复制]

    这个问题在这里已经有答案了 我的Android studio版本是1 5 1 显然这个 never 版本没有 txt 文件的 asset 文件夹 您打算如何将这些文件包含到您的项目中 以及如何进一步使用您内部的应用程序 谢谢你的建议 Pro
  • Java 中 static 关键字如何工作?

    我正在阅读Java教程 http docs oracle com javase tutorial index html从一开始我就有一个问题static字段或变量上的关键字 作为Java said here http docs oracle
  • 更改 RowLayout SWT Java 中元素的顺序

    有没有办法更改在行布局中创建的元素的顺序 我想将其显示在元素中 首先显示 例如 如果我创建 element1 则 element2 element3 element4 我想看到的布局为 元素4 元素3 元素2 元素1 这意味着最后创建的元素
  • 如何在 Java 中创建要打印到 JFrame 的 JLabels 数组

    我正在尝试制作一系列标签 每个标签都有一个来自函数的不同值 我不知道要使用的标签的确切数量 我的意思是可以打印任意数量的值 请帮我做这件事 很简单 只需一个方法返回一个数组或一些 JLabels 集合 并将它们全部添加到您的 JCompon
  • setKeyListener 将覆盖 setInputType 并更改键盘

    大家好 我在两个设备之间遇到问题 在实践中使用InputType和KeyListener我正在操纵一个EditText让它从数字键盘接收逗号和数字 有关更多背景信息 请检查我之前的question https stackoverflow c
  • BoneCP 和 Derby - 如何正确关闭

    I have BoneCP CONNECTION POOL CONNECTION POOL getConfig setJdbcUrl jdbc derby database shutdown true Connection connecti
  • 当我在 Java 中输入 IP 时无法连接到我的服务器

    好的 我正在尝试学习 Java 客户端 服务器的内容 并且正在浏览教程代码 如下所示 当我将 localhost 更改为我的 IP 时 它会停止工作 请帮忙 编辑 127 0 0 1 似乎也可以工作 但不是我的真实IP Copyright
  • 编译时在代码中替换Java静态最终值?

    在java中 假设我有以下内容 fileA java class A public static final int SIZE 100 然后在另一个文件中我使用这个值 fileB java import A class b Object t

随机推荐

  • 迭代时从地图(或任何其他 STL 容器)中擦除/删除内容

    据称 当迭代器变得无效时 您不能在迭代时删除 删除容器中的元素 删除满足特定条件的元素的 安全 方法是什么 请只使用 stl 不要使用 boost 或 tr1 EDIT如果我想删除满足特定条件的多个元素 是否有更优雅的方法 也许使用函子和
  • 将带有 html 扩展名的文件重定向到不带扩展名的文件(在 url 中)

    我最近使用 htaccess 更改了我的网站网址 这样我的网址就不会显示文件扩展名 现在我的问题是我创建了一个新的 xml 站点地图 这样我的 url 将是无扩展名的 Google 网站管理员工具告诉我有关重复内容的问题 IE page 和
  • 如何将 IntentService 的结果返回到 Activity 中?

    我正在使用 IntentService 通过 JSON 处理与服务器的网络通信 JSON 服务器部分工作正常 但我无法将结果返回到需要的地方 以下代码显示了我如何从 onClick 内部启动意图服务 然后让该服务更新全局变量以将结果转发回主
  • 使用 powershell 对整个目录进行 MD5 校验和哈希

    我正在尝试使用 powershell 为整个目录生成 MD5 校验和 在 Linux 上 有一个非常有效的 1 liner 如下所示 tar cf 某个目录 md5和 我了解到 tar 现在是 Windows 10 的一部分 并且可以在 P
  • Ruby on Rails 中的 Gemfile 和 Gemfile.lock 有什么区别

    我是 Ruby on Rails 的初学者 我正在使用 Rails 3 0 9 有什么区别Gemfile and Gemfile lock在 Rails 中 The Gemfile是您指定要使用哪些 gem 的地方 并允许您指定哪些版本 T
  • 获取未安装字体的字体和 Windows 名称

    有人可以告诉我如何获得字体的字体名称吗 我如何获取具有字体名称的字体的 Windows 名称 例如 arialblackno1 ttf 其字体为 arialblack 但我希望获取未安装的字体的字体名称 它只是在一个文件夹中 您在评论中说您
  • C#属性和ref参数,为什么没有糖?

    我刚刚在 C 中工作时遇到了此错误消息 属性或索引器不能作为 out 或 ref 参数传递 我知道导致此问题的原因 并快速解决了创建正确类型的局部变量 并将其作为函数调用的问题out ref参数 然后将其分配回属性 RefFn ref ob
  • 为什么嵌套的 HTML 元素会让我的 CSS 跳转?

    这是一个谜题 基本页面 一个元素 http jsfiddle net PZj6t http jsfiddle net PZj6t HTML div div CSS body html height 100 margin 0 padding
  • 使用 COMMAw,d 转换数字

    我正在关注SAS 帮助页面 http support sas com documentation cdl en lrdict 64316 HTML default viewer htm a000200667 htm并试图获得与页面底部示例相
  • 测试 post 请求时 Django 消息中间件问题

    我正在尝试测试一个 UpdateView 它将一条消息添加到重定向的成功页面 看来我的问题来自messages因为 pytest 返回 django contrib messages api MessageFailure 如果不安装 dja
  • 计算文件中的字长

    所以我的函数应该打开一个文件并计算字长并给出输出 例如 许多 样本 txt 字长1 2 长度为 2 的单词 6 长度为 3 的单词 7 长度为 4 的单词 6 我的sample txt 文件包含 这是一个测试文件 1 个字的长度是多少 长度
  • 将 ProcessStartInfo.WorkingDirectory 设置为 UNC 路径

    我有一个用 VB net 编写的实用程序 它作为计划任务运行 它在内部调用另一个可执行文件 并且必须访问映射驱动器 显然 Windows 在用户未登录时访问映射驱动器的计划任务存在问题 即使向任务本身提供了身份验证凭据也是如此 好的 为了解
  • document.querySelector 获取包含括号的类名

    我正在编写的软件必须与我无法控制的第三方网络应用程序的 dom 配合使用 有些类名带有参数 例如class view box 200px 我猜这些类名是 Sass Less mixins arguments document querySe
  • 按文本而不是值对 Datagridview 的列进行排序

    我的 datagridview 中有一个列是组合框列 我希望它按其显示值 即文本 而不是其值 在本例中为数据库中的 int 列表 排序 我怎样才能做到这一点 您可以通过覆盖来做到这一点SortCompare事件于DataGridView w
  • Google App-Gmail 无法设置。通过 swiftmailer SMTP 传输 (PHP) 发送时 Gmail 替换地址

    您好 感谢您提前提供的任何帮助 我正在使用 swiftmailer SMTP 传输方法从我的 PHP 脚本发送电子邮件 发送消息就好了 有用 问题是 无论我将 FROM REPLYTO SENDER 设置为什么 电子邮件都会作为 GMAIL
  • Spring:具有自动装配依赖项的通用类

    我有一个标准的 Spring Boot MVC 应用程序 其中包含许多实体以及相应的存储库和服务 组件之间共享许多基础设施 因此我想将其抽象为通用类 我目前正在尝试实现这一目标的方式是这样的 仅显示传达想法的框架 interface Abs
  • CGAffineTransformMakeScale() 动画后扭曲视图框架

    我正在使用 theCGAffineTransformMakeScale 对视图进行动画处理 使其看起来像从屏幕中心生长一样 它在 iOS 8 beta 4 模拟器中运行良好 但在 7 1 版本中它会扭曲视图的框架 view alpha 0
  • 使用 UTF-8 的 getBytes() 不适用于大写德语变音符号

    为了开发我正在使用ResourceBundle直接从 IDE 中的资源目录读取 UTF 8 编码的属性文件 我在该文件的 Eclipse 文件属性中设置 native2ascii 用于生产 例如 menu file open label f
  • Android可取消启动画面

    我正在尝试按照以下规则创建一个具有横幅和取消按钮的启动页面 如果没有按下任何按钮 5 秒后转到主要活动 如果按下取消按钮 则立即转到主要活动 如果横幅被按下 则转到其他活动 My code public class BannerSplash
  • java.net.SocketException:打开的文件太多

    我有一个java应用程序 它运行得很好 在Ubuntu 10 04上 几个小时 直到它遇到 java net SocketException 打开文件太多 Sender java的代码可以找到here https code google c