我正在为我的应用程序运行负载测试。我有两台服务器:一台用于我的应用程序,另一台用于获取我的响应。
在我的虚拟服务器中,我有以下 jsp 代码:
<%@ page import="java.util.Random" %>
<%@ page language="java" %>
<%@ page session="false" %>
<%
String retVal = "some json string";
Thread.sleep(50);
%>
我正在使用tomcat7 运行该应用程序。我的 server.xml 连接池(在两台服务器中)如下所示:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1500" minSpareThreads="1000" prestartminSpareThreads="true" />
<Connector port="9031" protocol="HTTP/1.1"
connectionTimeout="20000"
maxConnections="4000"
executor="tomcatThreadPool"
redirectPort="8443" />
我从服务器运行的 java 代码是:
HttpPost post = new HttpPost(bidderUrl);
post.setHeader("Content-Type", "application/json");
// I'm using http client with ThreadSafeClientConnManager
// total conn = 500, max conn per route = 100, timeout=500millis
HttpClient httpClient = httpClientFactory.getHttpClient();
try {
post.setEntity(new StringEntity(jsobBidRequest));
HttpResponse response = httpClient.execute(post);
...
catch (NoHttpResponseException e){
log.error(e);
}
我正在用 50 个并发线程(没有循环)运行 Jmetter,并得到很多这样的异常:
org.apache.http.NoHttpResponseException The target server failed to respond
虽然我只运行 5 或 10 个并发线程,但一切正常。
你能告诉我我的设置有什么问题吗?据我了解,我没有看到 50 个并发线程请求有任何错误。