两个简单的压力测试代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
两个简单的压⼒测试代码。
⼀个简单的压⼒测试代码:
根据⽹上的⼀段代码改的,需要添加commons-httpclient.jar包
package com.miracle.testcase;
import mons.httpclient.HttpClient;
import mons.httpclient.HttpMethod;
import ValuePair;
import mons.httpclient.methods.PostMethod;
/**
* @author miracle
* @version 2010.10.18
*/
public class LoadTestCase {
public static void main(String[] args) {
int i = 0;
int num = 1500;//启⽤的线程数
while (i < num) {
i++;
TClient client = new TClient();
client.setNum(i);
System.out.println("^^^^^^^^线程:" + i + "启动^^^^^^^^^^^^");
client.start();
}
}
}
//每个线程执⾏的内容
class TClient extends Thread {
int num;
public void setNum(int n) {
this.num = n;
}
public void run() {
int i = 0;
HttpClient client = new HttpClient();
while (true) {
System.out.println("========The: " + num + " Thread of " + i
+ "START=======");
try {
//设置访问地址
HttpMethod method = new PostMethod(
"");
//设置参数
NameValuePair ip = new NameValuePair("ip", ""+(num%200)); NameValuePair data = new NameValuePair("data",
"9 2 2 3 4 5 6 7 8 9 1 0 0 0 0 0");
//
method.setQueryString(new NameValuePair[] { ip, data });
client.executeMethod(method);
System.out.println(ip.getValue()+"| " + method.getResponseBodyAsString());
method.releaseConnection();
//每⼀次访问sleep两秒
this.sleep(2000);
} catch (Exception ex) {
ex.printStackTrace();
}i++;
}
}
}
代码运⾏时偶尔会出现这个错误:
.SocketException: Connection reset
at .SocketInputStream.read(SocketInputStream.java:168)
at weblogic.servlet.internal.PostInputStream.read(PostInputStream.java:170)
at weblogic.servlet.internal.ServletInputStreamImpl$1.read(ServletInputStreamImpl.java:115)
at weblogic.servlet.internal.ServletInputStreamImpl.read(ServletInputStreamImpl.java:180)
at weblogic.servlet.internal.ServletRequestImpl.mergePostParams(ServletRequestImpl.java:1257)
at weblogic.servlet.internal.ServletRequestImpl.parseQueryParams(ServletRequestImpl.java:1124)
at weblogic.servlet.internal.ServletRequestImpl.getParameter(ServletRequestImpl.java:1335)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:383)
.........
在⽹上找了些说法:
a。
maybe:
1,⽹络编程时未正确捕获.SocketException,客户端先关闭就会报这个异常;
2,数据库和应⽤服务器的⽹段不同.
b。
好像说防⽕墙的⽐较多。
⼤部分是⽹络的原因。
提交post的东西多,然后服务器接收就超时了。
c。
如果weblogic server和数据库服务器不在同⼀台主机,会经常有这种情况,我也遇到过,不过好像的确不怎么影响使⽤
d。
从根本上说是weblogic sp2的bug
e。
⼀般是有些客户端已关闭,⼀些线程因为延迟等原因觉察不到此连接已结束,继续等到到出错或是客户端那⾥不停刷或⼀个访问/刷新没完成前再刷,要让这个⽆⽤的线程死掉和这个错误如果不影响应⽤运⾏的话⼤可不必理会。
有⼀种抛出这个异常的情况是:
浏览器请求了⼀个服务器端资源,在响应回来之前转⽽请求其他的资源。
这个时候最初的浏览器跟服务器的连接中断,服务器的peer程序就会reset那个connection。
这个不需要添加任何包就可以执⾏,不过不能传参数:
没找到传参数的接⼝。
那位知道的可以mail我
package com.miracle.testcase;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import .URL;
/**
* @author miracle
* @version 2010.10.18
*/
public class LoadTest2 {
public static void main(String[] args) {
int i = 0;
int num = 1500;//启⽤的线程数
while (i < num) {
i++;
ThClient client = new ThClient();
client.setNum(i);
System.out.println("^^^^^^^^线程:" + i + "启动^^^^^^^^^^^^"); client.start();
}
}
}
//每个线程执⾏的内容
class ThClient extends Thread {
int num;
public void setNum(int n) {
this.num = n;
}
public void run() {
int i = 0;
while (true) {
System.out.println("========The: " + num + " Thread of " + i + "START=======");
URL url = null;
InputStream is = null;
try {
//每⼀次访问sleep两秒
this.sleep(2000);
url = new URL(
"");
is = url.openStream(); BufferedReader br = new
BufferedReader( new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) {
System.out.println(line); }
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (is != null)
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
i++;
}
}
}。