gpt4 book ai didi

当我调用 getInputStream 时,Java URLConnection 使整个过程崩溃

转载 作者:行者123 更新时间:2023-12-01 16:11:26 33 4
gpt4 key购买 nike

我正在编写一个 Java 小程序,它从 Web 服务器下载图像并将其显示给用户。它在 Java 1.6.0_3 及更高版本中工作正常,但在旧版本上,大约每 20 个页面浏览就会完全崩溃该进程。 Java 控制台中没有错误消息,因为该进程已完全卡住。有时我等了将近 15 分钟,但它永远不会解冻。

我在每行代码后添加了一条调试消息,并确定导致崩溃的行是:InputStream data = urlConn.getInputStream()

urlConn 是一个 URLConnection 对象,它指向我要加载的图像。我已经尝试了我能想到的所有选项组合,但没有任何帮助。我在 Java bug 数据库或 1.6.0_3 的发行说明中找不到任何内容。

有人遇到过这个问题吗?知道如何修复它吗?

最佳答案

确定是否确实是整个 JVM 进程被卡住,还是其他原因:

(1) 获取 java 堆栈转储 (sigquit/ctrl-break/jstack)

(2) 让另一个后台线程做一些你可以观察到的事情;它停止了吗?

(3) 检查另一个进程(浏览器/等)在卡住期间是否可以联系服务器? (有可能真正的问题是服务器连接耗尽)

是每 20 次提取随机一次(例如,5% 的时间,有时是 JVM 运行中的第一次提取),还是总是在大约 20 次提取之后?如果是后者,听起来好像有些东西没有正确关闭。

如果在 Linux 上,您可以使用“netstat -t”或“lsof”(使用某些选项或 grep 只显示某些行)来查看打开的套接字;如果每次获取后,又打开一个,并且计数永远不会减少,那么您就没有正确关闭东西。

如果是这样,每次尝试后在返回的流上调用 close() 和/或在 HttpUrlConnection 上调用 disconnect() 可能会有所帮助。 (小程序可以保持打开的连接数量也可能有更严格的限制,因此您比在独立应用程序中更快地达到此目的。)

它在后来的 Java 中“有效”的事实也表明,通过终结/GC 可能会更有效/更定期地进行某种自动清理。最好自己彻底关闭,但您也可以尝试在显示问题的早期 Java 中强制执行 GC/runFinalization。

关于当我调用 getInputStream 时,Java URLConnection 使整个过程崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1076663/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com