公司的某个Tomcat总是莫名挂掉,进程还活着,但是无法访问。查看日志,显示信息如下:
Jan 22, 2019 4:23:01 AM org.apache.tomcat.util.net.JIoEndpoint createWorkerThread
INFO: Maximum number of threads (200) created for connector with address null and port 9999
看样子是由于创建的资源没有被关闭导致,查看代码发现:
//发送post请求
public static JSONObject apiPostRequest(String url,String method,Map<String,String> paraMap){
//SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
HttpClient client = new HttpClient();
PostMethod postMethod = new PostMethod(url+"/"+method);
client.getParams().setContentCharset("UTF-8");
for(Map.Entry<String,String> e : paraMap.entrySet()){
System.out.println(e.getKey()+"/"+e.getValue());
postMethod.setParameter(e.getKey(),e.getValue());
}
JSONObject resultJson = null;
try {
client.executeMethod(postMethod);
resultJson = (JSONObject) JSONObject.parse(postMethod.getResponseBodyAsString());
} catch (IOException e) {
e.printStackTrace();
}
return resultJson;
}
原来是method没有关闭导致的,在try块中加入finally,关闭连接即可:
finally{
postMethod.releaseConnection();
}
Tomcat线程池溢出解决方案

本文解决了一个常见的Tomcat服务器问题,即线程池溢出导致服务无法访问。通过分析日志,发现HTTP客户端连接未正确关闭是根本原因。文章详细介绍了如何在Java代码中使用HttpClient进行POST请求,并在finally块中释放连接,有效防止了线程池溢出。
2132

被折叠的 条评论
为什么被折叠?



