tomcat 运行一段时间后几乎耗尽系统资源 Tomcat 是含一个很简单的HTTP Server,一般只能Debug 用,不能作为服务器用。请用Apache 或 IIS 作HTTP Server就不会有问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢关注,以下是servlet程序, 接受请求后,分析参数调用中间件处理,应该没问题吧package jEnableServer.servlet;import java.io.*;import java.net.Socket;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class JESerializeServlet extends HttpServlet{ public JESerializeServlet() { } private void loadParams() { if(host != null) return; String s = null; for(Enumeration enumeration = getInitParameterNames(); enumeration.hasMoreElements();) { String s1 = (String)enumeration.nextElement(); if(s1.equals("jenable.system.servlet.host")) host = getInitParameter(s1); else if(s1.equals("jenable.system.servlet.port")) s = getInitParameter(s1); } if(host == null) { System.out.println("<JESerializeServlet Log>Error occurs while trying to retrieve j/Enable Server host, use default"); host = "localhost"; } try { port = Integer.parseInt(s); } catch(Exception exception) { System.out.println("<JESerializeServlet Log>" + exception.toString()); System.out.println("<JESerializeServlet Log>Error occurs while trying to retrieve j/Enable Server port, use default"); port = 5999; } System.out.println("<JESerializeServlet Log>j/Enable Server Host: " + host); System.out.println("<JESerializeServlet Log>j/Enable Server Port: " + port); } public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse) throws IOException, ServletException { processRequest(httpservletrequest, httpservletresponse, "GET"); } public void doPost(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse) throws IOException, ServletException { processRequest(httpservletrequest, httpservletresponse, "POST"); } private void processRequest(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, String s) throws IOException, ServletException { loadParams(); httpservletresponse.setContentType("text/html;charset=GB2312"); PrintWriter printwriter = httpservletresponse.getWriter(); try { Hashtable hashtable = new Hashtable(); String s1; String s3; for(Enumeration enumeration = httpservletrequest.getHeaderNames(); enumeration.hasMoreElements(); hashtable.put(s1, s3)) { s1 = (String)enumeration.nextElement(); s3 = httpservletrequest.getHeader(s1); } hashtable.put("REQUEST_METHOD", s); if(s.equals("GET")) { String s2 = httpservletrequest.getQueryString(); if(s2 != null) { s2 = new String(s2.getBytes("8859_1"), "GB2312"); StringTokenizer stringtokenizer = new StringTokenizer(s2, "&"); Object obj = null; while(stringtokenizer.hasMoreTokens()) { String s5 = stringtokenizer.nextToken(); StringTokenizer stringtokenizer1 = new StringTokenizer(s5, "="); String s6 = null; s6 = stringtokenizer1.nextToken(); if(stringtokenizer1.hasMoreTokens()) hashtable.put(s6, stringtokenizer1.nextToken()); } } } else if(s.equals("POST")) { for(Enumeration enumeration1 = httpservletrequest.getParameterNames(); enumeration1.hasMoreElements();) { String s4 = (String)enumeration1.nextElement(); String as[] = httpservletrequest.getParameterValues(s4); if(as != null) { for(int j = 0; j < as.length; j++) hashtable.put(new String(s4.getBytes("8859_1"), "GB2312"), new String(as[j].getBytes("8859_1"), "GB2312")); } } } StringBuffer stringbuffer = new StringBuffer(); Cookie acookie[] = httpservletrequest.getCookies(); if(acookie != null) { for(int i = 0; i < acookie.length; i++) { stringbuffer.append(acookie[i].getName()).append("=").append(acookie[i].getValue()).append(";"); hashtable.put(acookie[i].getName(), acookie[i].getValue()); } } if(stringbuffer.length() > 0) hashtable.put("HTTP_COOKIE", stringbuffer.toString()); Socket socket = new Socket(host, port); ObjectOutputStream objectoutputstream = new ObjectOutputStream(socket.getOutputStream()); objectoutputstream.writeObject(hashtable); objectoutputstream.flush(); BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String s7 = null; boolean flag = true; while((s7 = bufferedreader.readLine()) != null) if(flag) { if(s7.equals("")) flag = false; if(s7.startsWith("Set-Cookie")) { String s8 = s7.substring(12); StringTokenizer stringtokenizer2 = new StringTokenizer(s8, "=;"); String s9 = null; if(stringtokenizer2.hasMoreTokens()) s9 = stringtokenizer2.nextToken(); if(stringtokenizer2.hasMoreTokens()) httpservletresponse.addCookie(new Cookie(s9, stringtokenizer2.nextToken())); } } else { printwriter.println(s7); } socket.close(); } catch(Exception exception) { exception.printStackTrace(); printwriter.println("<html><head></head>"); printwriter.println("<body><h1>\u7CFB\u7EDF\u9519\u8BEF</h1></body></html>"); } } private static int requestId = 0; private static String host = null; private static int port = 0; static { Locale.setDefault(Locale.CHINA); }} 客户端看不出什么问题.凭感觉应该是在SOCKET通讯那里出了问题你的中间件是如何实现的?有可能是你的中间层出了问题,资源耗尽,而客户端还在等待中间层的应答而导致CUP过忙.建议检查一下中间层的代码 中间层服务关闭后(只运行tomcat),服务器锻cpu占用率还是100%,谢谢大家关注,请继续给些提示 我们用TOMCAT时也老死。但那是因为连接池的连接没有释放! 不是TOMCAT的问题,我用了这么多都是好的 to : Michael_zp(抛弃懒惰)你指的连接池的连接是与数据库的连接吗?能详细描述一下问题的现象,原因和解决办法吗,谢谢。 多谢大家的帮助,问题原因基本查明,是与此系统集成的公用tomcat的系统造成的错误。送分 这是tomcat3.2的固有问题,升级到4.0侯问题解决。在错误输入url后tomcat3.2酒会拼命计算??? java解析xml问题:如何获得一级标签下全部内容? 线程池ThreadPoolExecutor的先进先出问题 JAVA 参数传值问题 timer不执行问题 问:有没有关于背景颜色羽化效果的方法 急,求助!关于JNI调用dll导致JVM崩溃的问题 java直接连数据库问题 为什么一直报错说返回一个String 被jbuilder难住了,郁闷中~散分(附带个小问题) 请问,用户通过Browse登录时如何取得mac(网卡)地址?望高手指教。 日期格式化的问题 jbuilder5教程 下载地址求教!
import java.net.Socket;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;public class JESerializeServlet extends HttpServlet
{ public JESerializeServlet()
{
} private void loadParams()
{
if(host != null)
return;
String s = null;
for(Enumeration enumeration = getInitParameterNames(); enumeration.hasMoreElements();)
{
String s1 = (String)enumeration.nextElement();
if(s1.equals("jenable.system.servlet.host"))
host = getInitParameter(s1);
else
if(s1.equals("jenable.system.servlet.port"))
s = getInitParameter(s1);
} if(host == null)
{
System.out.println("<JESerializeServlet Log>Error occurs while trying to retrieve j/Enable Server host, use default");
host = "localhost";
}
try
{
port = Integer.parseInt(s);
}
catch(Exception exception)
{
System.out.println("<JESerializeServlet Log>" + exception.toString());
System.out.println("<JESerializeServlet Log>Error occurs while trying to retrieve j/Enable Server port, use default");
port = 5999;
}
System.out.println("<JESerializeServlet Log>j/Enable Server Host: " + host);
System.out.println("<JESerializeServlet Log>j/Enable Server Port: " + port);
} public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
throws IOException, ServletException
{
processRequest(httpservletrequest, httpservletresponse, "GET");
} public void doPost(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
throws IOException, ServletException
{
processRequest(httpservletrequest, httpservletresponse, "POST");
} private void processRequest(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, String s)
throws IOException, ServletException
{
loadParams();
httpservletresponse.setContentType("text/html;charset=GB2312");
PrintWriter printwriter = httpservletresponse.getWriter();
try
{
Hashtable hashtable = new Hashtable();
String s1;
String s3;
for(Enumeration enumeration = httpservletrequest.getHeaderNames(); enumeration.hasMoreElements(); hashtable.put(s1, s3))
{
s1 = (String)enumeration.nextElement();
s3 = httpservletrequest.getHeader(s1);
} hashtable.put("REQUEST_METHOD", s);
if(s.equals("GET"))
{
String s2 = httpservletrequest.getQueryString();
if(s2 != null)
{
s2 = new String(s2.getBytes("8859_1"), "GB2312");
StringTokenizer stringtokenizer = new StringTokenizer(s2, "&");
Object obj = null;
while(stringtokenizer.hasMoreTokens())
{
String s5 = stringtokenizer.nextToken();
StringTokenizer stringtokenizer1 = new StringTokenizer(s5, "=");
String s6 = null;
s6 = stringtokenizer1.nextToken();
if(stringtokenizer1.hasMoreTokens())
hashtable.put(s6, stringtokenizer1.nextToken());
}
}
} else
if(s.equals("POST"))
{
for(Enumeration enumeration1 = httpservletrequest.getParameterNames(); enumeration1.hasMoreElements();)
{
String s4 = (String)enumeration1.nextElement();
String as[] = httpservletrequest.getParameterValues(s4);
if(as != null)
{
for(int j = 0; j < as.length; j++)
hashtable.put(new String(s4.getBytes("8859_1"), "GB2312"), new String(as[j].getBytes("8859_1"), "GB2312")); }
} }
StringBuffer stringbuffer = new StringBuffer();
Cookie acookie[] = httpservletrequest.getCookies();
if(acookie != null)
{
for(int i = 0; i < acookie.length; i++)
{
stringbuffer.append(acookie[i].getName()).append("=").append(acookie[i].getValue()).append(";");
hashtable.put(acookie[i].getName(), acookie[i].getValue());
} }
if(stringbuffer.length() > 0)
hashtable.put("HTTP_COOKIE", stringbuffer.toString());
Socket socket = new Socket(host, port);
ObjectOutputStream objectoutputstream = new ObjectOutputStream(socket.getOutputStream());
objectoutputstream.writeObject(hashtable);
objectoutputstream.flush();
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s7 = null;
boolean flag = true;
while((s7 = bufferedreader.readLine()) != null)
if(flag)
{
if(s7.equals(""))
flag = false;
if(s7.startsWith("Set-Cookie"))
{
String s8 = s7.substring(12);
StringTokenizer stringtokenizer2 = new StringTokenizer(s8, "=;");
String s9 = null;
if(stringtokenizer2.hasMoreTokens())
s9 = stringtokenizer2.nextToken();
if(stringtokenizer2.hasMoreTokens())
httpservletresponse.addCookie(new Cookie(s9, stringtokenizer2.nextToken()));
}
} else
{
printwriter.println(s7);
}
socket.close();
}
catch(Exception exception)
{
exception.printStackTrace();
printwriter.println("<html><head></head>");
printwriter.println("<body><h1>\u7CFB\u7EDF\u9519\u8BEF</h1></body></html>");
}
} private static int requestId = 0;
private static String host = null;
private static int port = 0; static
{
Locale.setDefault(Locale.CHINA);
}
}
你的中间件是如何实现的?有可能是你的中间层出了问题,资源耗尽,
而客户端还在等待中间层的应答而导致CUP过忙.建议检查一下中间层的代码
谢谢大家关注,请继续给些提示
你指的连接池的连接是与数据库的连接吗?能详细描述一下问题的现象,原因和解决办法吗,谢谢。
送分
在错误输入url后tomcat3.2酒会拼命计算???