java小程序检测web的并发数---HttpClient和util包的concurrent
2015-06-19 08:11
656 查看
1.下载org.apache.commons.httpclient.jar文件。
2.利用HttpClient访问web网站(url)。
3.利用多线程测试并发数。java.util.concurrent包实现并发。
代码如下:
View Code
在压力测试的环境下拥有大量的线程,当本地内存耗尽时,企图创建新的线程时抛出java.lang.OutOfMemoryError: unable to create new native thread异常。
系统创建的线程数的计算公式:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
MaxProcessMemory 指的是一个进程的最大内存
JVMMemory JVM内存
ReservedOsMemory 保留的操作系统内存
ThreadStackSize 线程栈的大小
针对无法创建更多本地线程的情况,调整线程栈的大小,添加-Xss选项(线程栈的大小),设置为256k后再跑自动化,发现问题解决。
JAVA_OPTS="-Xms2048M -Xmx2048M -Xmn512M -Xss256k -XX:PermSize=512M….”
对于一般的内存泄漏导致的堆栈溢出,通常的错误信息主要有以下几种。
1. java.lang.OutOfMemoryError: Java heap space
2. java.lang.OutOfMemoryError: PermGen space
3. java.lang.OutOfMemoryError: Requested array size exceeds VM limit
4. java.lang.OutOfMemoryError: <reason> <stack trace> (Native method)
参考:http://bbs.csdn.net/topics/350248404
2.利用HttpClient访问web网站(url)。
3.利用多线程测试并发数。java.util.concurrent包实现并发。
代码如下:
import java.io.IOException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.methods.GetMethod; public class Ceshi { /** * @param args * @throws IOException * @throws HttpException * @throws InterruptedException */ public static void main(String[] args) throws HttpException, IOException, InterruptedException { ExecutorService service=Executors.newFixedThreadPool(Integer.MAX_VALUE); int i = 0; for ( i= 0; i < 4000; i++) { System.out.println("number " + (i+1) + " starts"); service.execute(new Runnable() { @Override public void run() { try { ceshi(); } catch (HttpException e) { System.out.println("HttpException"); e.printStackTrace(); } catch (IOException e) { System.out.println("IOException"); e.printStackTrace(); } } }); System.out.println("number " + (i+1) + " ends"); } service.shutdown(); service.awaitTermination(300,TimeUnit.SECONDS); System.out.println("ok"); } private static void ceshi() throws HttpException, IOException{ HttpClient client = new HttpClient(); client.getHostConfiguration().setHost("9.186.62.58",8080,"http"); HttpMethod method = getGetMethod();//使用POST方式提交数据 client.executeMethod(method); //打印服务器返回的状态 System.out.println(method.getStatusLine()); //打印结果页面 String response = new String(method.getResponseBodyAsString().getBytes("GB2312")); //打印返回的信息 System.out.println(response); method.releaseConnection(); } private static HttpMethod getGetMethod(){ return new GetMethod("/BiMaiApp/airdetailpage?cityIDs=1"); } }
View Code
在压力测试的环境下拥有大量的线程,当本地内存耗尽时,企图创建新的线程时抛出java.lang.OutOfMemoryError: unable to create new native thread异常。
系统创建的线程数的计算公式:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
MaxProcessMemory 指的是一个进程的最大内存
JVMMemory JVM内存
ReservedOsMemory 保留的操作系统内存
ThreadStackSize 线程栈的大小
针对无法创建更多本地线程的情况,调整线程栈的大小,添加-Xss选项(线程栈的大小),设置为256k后再跑自动化,发现问题解决。
JAVA_OPTS="-Xms2048M -Xmx2048M -Xmn512M -Xss256k -XX:PermSize=512M….”
对于一般的内存泄漏导致的堆栈溢出,通常的错误信息主要有以下几种。
1. java.lang.OutOfMemoryError: Java heap space
2. java.lang.OutOfMemoryError: PermGen space
3. java.lang.OutOfMemoryError: Requested array size exceeds VM limit
4. java.lang.OutOfMemoryError: <reason> <stack trace> (Native method)
参考:http://bbs.csdn.net/topics/350248404
相关文章推荐
- 一堂价值亿万的营销课
- 黑马程序员_网络编程2
- Android代码(Handler的运用),HttpURLConnection的应用,将url图片地址转换成图片。
- Android代码(Handler的运用),HttpURLConnection的应用,将url图片地址转换成图片。
- thinkphp 后台获取argularjs http提交的post数据
- Java将网络地址对应的图片转成本地的图片
- Java将网络地址对应的图片转成本地的图片
- java 框架基础知识(9)----HTTP报文-->MVC
- 启动脚本中避免目标地址为域名的网络连接
- Nginx配置https和http可同时访问方法
- 流媒体系列之会议直播解决方案
- 小解网络协议
- Linux网络编程入门 (转载)
- 在python中用BaseHTTPRequestHandler模块儿时获取客户端的ip和端口
- URL,URI的区别
- TCP预先派生子进程服务程序,accept无上锁保护
- 网络请求(XUtils)+JSON解析(Gson)
- 检查HTTP 的 Digest 认证代码示例-JSP
- 【枚举】bzoj3391 [Usaco2004 Dec]Tree Cutting网络破坏
- 【Linux 内核网络协议栈源码剖析】af_inet.c——INET Socket层(2)