使用HttpURLConnection时遇到的资源未释放的问题
http://blog.sina.com.cn/s/blog_56beadc60100j9zu.html
今天自己写了一个压力测试的小程序,同时启100个线程,每个线程都串行地访问应用服务器上的一个jsp页面200次。在程序运行了一会儿以后,问题来了:
- java.net.SocketException: No buffer space available (maximum connections reached?): connect
- at java.net.PlainSocketImpl.socketConnect(Native Method)
- at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
- at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
- at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
- at java.net.Socket.connect(Socket.java:516)
- at java.net.Socket.connect(Socket.java:466)
- at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
- at sun.net.www.http.HttpClient.openServer(HttpClient.java:365)
- at sun.net.www.http.HttpClient.openServer(HttpClient.java:477)
- at sun.net.www.http.HttpClient.<init>(HttpClient.java:214)
- at sun.net.www.http.HttpClient.New(HttpClient.java:287)
- at sun.net.www.http.HttpClient.New(HttpClient.java:299)
- at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:796)
- at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:748)
- at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:673)
- at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:840)
到网上查了查,应该是资源耗尽了,但是没有找到解决的方法。
程序片断代码如下:
- for (int j = 0; j < 200; j++) {
- long beginTime = System.currentTimeMillis();
- URL url = new URL("...");
- HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
- httpURLConnection.setDoOutput(true);
- httpURLConnection.setRequestMethod("POST");
- OutputStream os = httpURLConnection.getOutputStream();
- keywordNum = random.nextInt(myKeywords.length);
- os.write(("keyword=" + myKeywords[keywordNum]).getBytes("UTF8"));
- os.flush();
- os.close();
- int i = 0;
- int contentLength = 0;
- contentLength = httpURLConnection.getContentLength();
- long endTime = System.currentTimeMillis();
- System.out.println("Thread '" + name + "' search keyword '" + myKeywords[keywordNum] + "' and get content in " + (endTime - beginTime) + " Millis, length=" + contentLength);
- }
后来想了想,既然资源没释放,释放就可以了。查了一下HttpURLConnection有个disconnect方法,但是加上后也没有用。再找,jdk的docs里说,HttpURLConnection这个对象关掉相关的InputStream和OutputStream可以释放掉相关资源,于是试了下,在contentLength = httpURLConnection.getContentLength();这行后面又加了2行:
- InputStream is = httpURLConnection.getInputStream();
- is.close();
问题解决了。
原来只是知道如果不调用httpURLConnection的getContentLength或其它get方法,请求是不会提交的,一般如果不需要也不会去调getInputStream,没想到还有个释放资源的问题。
==============================================================
简单的概括下释放httpUrlConnection的资源就是:
调用HttpURLConnection的disConnecn方法,还要关掉关联的inputStream和outputStream
使用HttpURLConnection时遇到的资源未释放的问题的更多相关文章
- 解决切换场景时NGUI图集资源未释放的问题
使用unity3d编辑器,在切换场景的时候.NGUI的图集没有释放造成内存不足游戏闪退的问题. 默认情况下,unity3d切换场景之后会释放不用的内存,即内部会调用Resources.UnloadUn ...
- redis资源未释放引发的问题
一.redis资源未释放的起因: N年前,在修改一个古老程序时,不小心把redis释放的这块给干掉了, if (jedis != null) { if (!isInProcess) { jedis.d ...
- 图层损坏 E/ArcGIS﹕ The map or layer has been destroyed or recycled. 资源未释放
看到论坛上有个网友和我一样的问题: The map or layer has been destroyed or recyled t Hello, I have a problem when the ...
- mysql优化, 删除数据后物理空间未释放(转载)
mysql优化, 删除数据后物理空间未释放(转载) OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTI ...
- c++继承构造子类调用父类构造函数的问题及关于容器指针的问题及当容器里储存指针时,记得要手动释放
看下面的一个问题: class Person { private: string name; public: Person(const string& s=""){ nam ...
- 关于mysql 删除数据后物理空间未释放(转载)
转自 关于mysql 删除数据后物理空间未释放(转载) - NETDATA - 博客园http://www.cnblogs.com/shawnloong/archive/2013/02/07/2908 ...
- jsch连接sftp后连接未释放掉问题排查
项目中通过jsch中的sftp实现上传下载文件.在压测过程中,由于调用到sftp,下载文件不存在时,系统不断抛出异常,内存飙升,逐渐把swap区也占满,通过top监控未发现占用内存的进程,通过查找ss ...
- 关于在打包Jar文件时遇到的资源路径问题(二)
在关于<关于在打包Jar文件时遇到的资源路径问题(一)>中,以及描述了当资源与可执行JAr分离时的资源路径代码的编写问题,后来想了想,为什么将<Java核心技术卷一>中的程序1 ...
- 关于在打包Jar文件时遇到的资源路径问题(一)
当我们将程序写好,并进行打包成Jar文件时,通常都带有各种资源,这些资源可以是图像或者声音文件,也可以是别的如文本文件或二进制文件等,这些资源都和代码密切相关.例如在一个JPanel类上显示一些可能变 ...
随机推荐
- hbase 知识点
hbase 教程:http://www.yiibai.com/hbase/ mac下hbase安装:https://www.jianshu.com/p/510e1d599123 HBase是建立在Ha ...
- js ==与===区别(非严格相等与严格相等)
基本数据类型:number.string.boolean.undefined.null 高级数据类型:object 表格形式比较: 比较的类型 == === 基础类型 不同基础类型间比较," ...
- bzoj1193 马步距离
Description 求点(xs,ys)走马步到(xp,yp)的最小步数 Input 只包含4个整数,它们彼此用空格隔开,分别为xp,yp,xs,ys.并且它们的都小于10000000. Out ...
- 2018-2019 20165226 网络对抗 Exp1+ 逆向进阶
2018-2019 20165226 网络对抗 Exp1+ 逆向进阶 目录 一.实验内容介绍 二.64位shellcode的编写及注入 三.ret2lib及rop的实践 四.问题与思考 一.实验内容介 ...
- Find minimum continuous subsequence tags
Given targetList, a list of strings representing the desired tags, and availableTagList, a list of s ...
- fiddler基础功能介绍
- PHP 弹出文件下载 原理 代码
/** * @author default7<default7@zbphp.com> * @description 演示PHP弹出下载的原理 * * @param $file_n ...
- 学习git最好的方式
1:登陆git官网网站 https://git-scm.com 2:点击esay to learn连接 3:点击Book连接 4:选择简体中文,下载PDF文档,也可以在线学习.
- Thread 1 cannot allocate new log的问题分析 (转载)
Thread 1 cannot allocate new log的问题分析 发生oracle宕机事故,alert文件中报告如下错误: Fri Jan 12 04:07:49 2007Thread 1 ...
- Spark 分布式SQL引擎
SparkSQL作为分布式查询引擎:两种方式 SparkSQL作为分布式查询引擎:Thrift JDBC/ODBC服务 SparkSQL作为分布式查询引擎:Thrift JDBC/ODBC服务 Spa ...