Java socketRead0 问题

2023-11-26

我正在使用 htmlunit 开发一个网络爬虫,并且添加了所有必需的超时,但我注意到当我使用 Java VisualVM 进行线程转储时,某些网站的服务器没有响应时,应用程序会挂起:

java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:88)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:429)
at java.net.Socket.connect(Socket.java:525)
at com.gargoylesoftware.htmlunit.SocksSocketFactory.connectSocket(SocksSocketFactory.java:89)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:152)
at app.plugin.core.net.QHttpWebConnection.getResponse(QHttpWebConnection.java:30)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1439)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1358)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:307)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:358)

这真的很令人沮丧,因为我无法控制这些服务器。这个问题严重影响了我的应用程序的性能。

问题:

  1. 我该如何解决这个问题?
  2. 有没有办法获取 Java 应用程序打开的套接字连接列表并使用它来终止套接字,就像模拟服务器关闭连接一样?

我相信,当您使用 Java 本机方法时,即使调用实际上被阻止等待某个事件,堆栈跟踪也会显示 RUNNABLE。本质上,我不相信 Java 有任何方法知道本机方法实际上在做什么,因此它将这些调用标记为 RUNNABLE。我在socketRead0() 和socketAccept() 中看到了这一点——两者通常都会阻塞。

您需要将超时设置为合理的时间长度,这样如果服务器没有响应,您的请求就会超时,但也不能太短,以防服务器太忙。您的应用程序应该编写为使用多线程。我会尝试运行十几个或更多线程,并让每个线程等待五到十秒以获得响应。让少数线程等待实际上没有任何开销。在编写网络蜘蛛时,您还应该注意不要用大量请求轰炸服务器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java socketRead0 问题 的相关文章

  • 合并 2 个 .jks 信任库文件

    我正在使用启用了 SSL 的 Tomcat 并使用信任库进行客户端身份验证 我有两个 jks trustore 文件 第一个 我将其用于 PROD 环境 另一个用于 TEST 环境客户端证书 我在 Tomcat 上部署了 Web 应用程序
  • Java 8 可选

    我想检查特定对象大小是否大于 0 如果它大于 0 那么我想创建一个可选对象 如果不是 那么我想返回一个可选的空对象 这是java代码的长版本 if fooA size gt 0 return Optional of new Foo else
  • import java 导入错误:没有名为 java 的模块

    我似乎遇到了障碍 根本无法解决这个问题 任何人都可以帮我弄清楚为什么我无法导入 java 模块吗 Error Traceback most recent call last File datasource config py line 3
  • Java 比 Xmx 参数消耗更多内存

    我有一个非常简单的 Web 服务器类 基于 Java SEHttpServer class 当我使用此命令启动编译的类来限制内存使用时 java Xmx5m Xss5m Xrs Xint Xbatch Test 现在如果我使用检查内存top
  • 在 JList 中写一些东西

    嘿 我还有另一个问题 我创建JList在我的主窗口中 现在我想向其中添加一些内容 我这样做 private void jButton2ActionPerformed java awt event ActionEvent evt Dodaj
  • Java:Swing:设置JButton的位置

    我想实现以下布局 OK
  • 在 alpine / Jprofile 10 中运行 jpenable 时出现 UnsatisfiedLinkError

    当运行 jpenable 以允许在运行 JDK 8 的 alpine 3 3 容器中对 Jprofiler10 进行分析时 我收到 UnsatisfiedLinkError 异常 有任何想法吗 ERROR The agent could n
  • Android Fabric Crashlytics 崩溃,初始化时未找到资源

    我从 google play 控制台收到了这份报告 看起来 Fabric 在启动时崩溃了 因为某些用户出现了资源未找到的异常 java lang RuntimeException at android app ActivityThread
  • 如何防止我的 servlet 被其他网站调用

    好的 我有一个像这样的简单的 servlet public class SimpleServlet extends HttpServlet public void doPost HttpServletRequest req HttpServ
  • 字符串 a == 字符串 b 的规则 [重复]

    这个问题在这里已经有答案了 我试图了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是什么 例如这个片段 public static void main String hi String s1 lol String s2 lol S
  • Hibernate更新查询问题

    对于此更新查询 update TestDB dbo MyEmp set empname where empid 我在 DAO 课上写的 MyEmployee myEmployee new MyEmployee MyEmployee myEm
  • Android 的@hide 注解到底有什么作用?

    Android中很多内部API都被标记出来了 hide What exactly这是吗 另一个答案 https stackoverflow com questions 17035271 what does hide mean in the
  • 将序列化数据发送到 servlet 时出现 java.io.EOFException

    我正在尝试从 Java 本地应用程序上传一个包含文件到服务器的对象 我的计划是 在 tomcat 上运行的 servlet 将使用以下方法获取对象ObjectInputStream in the doGet方法 但我得到一个EOFExcep
  • Spring Boot 中的服务限流能力

    有什么办法可以实现Spring中其余服务的服务限制能力 特别是Spring boot 这里的期望是 我的服务暴露于外界 目前每秒 分钟的服务调用数量没有限制 我们希望通过设置限制来控制这一点 我有一个替代选项 通过跟踪并发哈希映射或任何缓存
  • 致命异常:OkHttp 调度程序

    我在 Android 应用程序中使用 OkHttp 库向天气 API 发出 Web 请求 我已经实现了我的代码 但在执行请求时遇到了致命异常 我也已经在我的清单中添加了互联网权限 MainActivity java private Curr
  • 使用 ProcessBuilder 启动 CMD

    我尝试使用以下代码在 Windows 中启动 CMD 应用程序 但它无法按预期工作 来自不同网站的几个示例表明 cmd 作为 ProcessBuilder 构造中的参数应该有效 我需要做什么才能让我的 Java 应用程序在 Windows
  • Java 中有类似 .NET 的 NotImplementedException 的东西吗?

    有没有类似 NET 的东西NotImplementedException在Java中 康芒斯朗 http commons apache org proper commons lang javadocs api 2 6 org apache
  • 不鼓励在Web应用程序中使用线程吗?

    我们与同事就在 Java 的 Web 应用程序中使用线程进行了激烈的讨论 他们的观点是 不建议在 Java Web 应用程序中使用线程 因为它们不受容器管理 一般来说 我对此表示同意 因为线程可能会干扰容器 但是 如果它不是 Java EE
  • 原子整数的compareandexchange()与compareandset()

    在研究 AtomicInteger 时 我发现这个 API 提供了两种方法 比较和交换 如果当前值被引用 则自动将该值设置为 newValue to 作为见证值 预期值 记忆效应为 由指定VarHandle compareAndExchan
  • 优雅地避免 Java 中的 NullPointerException

    考虑这一行 if object getAttribute someAttr equals true 显然这一行是一个潜在的错误 属性可能是null我们会得到一个NullPointerException 因此我们需要将其重构为以下两个选择之一

随机推荐

  • Grit的clone方法未定义?

    我最近开始从事一个使用 git 进行存储并使用 ruby 作为前端的项目 我的脚本的第一个版本使用 ruby git 虽然非常简单 但还可以 当我需要对我的提交和日志进行更具体的工作时 建议我转向坚毅 然而 我在早期遇到了一个障碍 grit
  • 如何在wkwebview中下载文件

    有人请告诉我如何在 iOS wkwebview 中下载文件 我创建了一个 iOS 网络视图应用程序 在我加载的页面中 它有几个下载选项 但是当我单击下载时没有任何反应 注意 我不想创建额外的下载按钮 Since macOS 11 3 and
  • PHP json_encode 数组 0 键的问题

    我在使用 json encode 从数组生成 json 编码字符串时遇到问题 有问题的数组部分如下所示 RatingDistribution Array 11 elements 0 Array 1 element 0 String 3 ch
  • Pandas:根据其他行删除行

    我有一个 pandas 数据框 如下所示 qseqid sseqid qstart qend 2 1 125 345 4 1 150 320 3 2 150 450 6 2 25 300 8 2 50 500 我想根据以下条件删除基于其他行
  • 有没有办法在 iOS 上的 Safari 中禁用向后滑动动画?

    我想在 SPA 上完全禁用向后滑动动画 这将允许我在 SPA 中使用一些滑动手势 目前 在 iOS 上 当触发某些手势时 您往往还会触发向后滑动手势 我找到了关于如何禁用它的上一篇文章 iOS 7 有没有办法禁用 Safari 中的向后和向
  • Gradle 构建过程中使用了哪个已安装的 JDK

    这是我的输出gradle v 在使用包装器的项目中 gradlew v Gradle 5 0 Build time 2018 11 26 11 48 43 UTC Revision 7fc6e5abf2fc5fe0824aec8a0f546
  • 当数据适合行时,VARCHAR 与 TEXT 性能比较

    mysql gt desc temp1 Field Type Null Key Default Extra value varchar 255 YES NULL mysql gt desc temp2
  • 派生类中的私有虚函数[重复]

    这个问题在这里已经有答案了 可能的重复 C 重写公共 私有继承 class base public virtual void doSomething 0 class derived public base private lt Note t
  • 当标志在不同线程中更改时,While 循环不会结束[重复]

    这个问题在这里已经有答案了 我的 Java 程序的 main 方法中有一个 while 循环正在运行 该循环应该一直运行 直到在程序的 keyPressed 方法中将布尔标志变量设置为 true 我将程序作为 KeyListener 添加到
  • 如何修复 xcrun 无法找到 simctl 错误?

    我有 Xcode 6 2 Beta 尝试 xcrun simctl in terminal yields xcrun 错误 无法找到实用程序 simctl 不是开发人员工具或在 PATH 中 我通过输入解决了这个问题 Xcode gt Pr
  • 格式化 SoapUI 项目文件

    我使用 SoapUI 的免费版本 版本 4 6 1 并注意到它的项目文件格式非常糟糕 它的许多元素并不像开发人员维护的大型 XML 文件那样位于专用行或缩进中 这使得区分和合并对源代码控制项目文件的更改变得更加困难 我知道 SoapUI P
  • 如何从工作表中删除公式但保留其计算值[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 询问代码的问题必须对所解决的问题表现出最低限度的了解 包括尝试的解决方案 为什么不起作用以及预期结果 也可以看看 Stack Overflow 问题清单 有关您编写的代码的问题必须描
  • WPF 中的分段文本框

    有谁知道免费或商业 WPF 控件可以执行以下操作 每个框 X 个字符 并在完成每个框时自动跳到下一个框 类似于为 Microsoft 产品输入许可证密钥的方式 我认为从头开始做起来并不是特别困难 但如果已经存在一个很好的例子 我想避免重新发
  • 如何在 NestedScrollView 中使用 RecyclerView

    我有这样的布局
  • 在rails4中设置hstore,动态键/值

    我第一次在 Rails4 应用程序中使用 Hstore 并且在表单中使用 javascript 为 hstore 列构建动态表单字段 schema 在 Rails 4 中 我不需要在模型中添加任何 setter getter 方法 对吗 在
  • 在 Scala 中使用 Streams 进行迭代

    SICP表示迭代过程 例如平方根计算的牛顿法 pi 计算等 可以用以下形式表示Streams 有人用吗streams在 Scala 中建模迭代 这是生成 pi 近似值流的一种方法 val naturals Stream from 0 0 1
  • 通过引用传递键和值的替代方法:

    有人可以向我解释为什么你不能传递密钥作为参考吗 Ex if is array where foreach where as key gt value key sec key value sec value unset key value T
  • fsync、sync:它真的做了它应该做的事情吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想对 Linux 2 6 31 中的sync 8 和 fsync 函数的功能有更多的说明 它是否确保文件写入相应的存储 http linux die net man 8 sync
  • 如何使用主题标签更改单词的颜色

    我需要能够以不同的颜色显示所有以 开头的单词的文本 并且它们应该是可单击的 我怎样才能做到这一点 这应该可以解决问题 private void setTags TextView pTextView String pTagString Spa
  • Java socketRead0 问题

    我正在使用 htmlunit 开发一个网络爬虫 并且添加了所有必需的超时 但我注意到当我使用 Java VisualVM 进行线程转储时 某些网站的服务器没有响应时 应用程序会挂起 java lang Thread State RUNNAB