0

我的网站出现停机问题。我在 Linux Redhat 上安装了 apache 2 + mod_jk + tomcat 5.5。最近才开始每天关闭我的网站一次。只有重新启动tomcat后,网站才能恢复正常。

tomcat上的应用程序错误日志(对不起,日志中隐藏了隐私信息):

2010-11-14 00:40:13,726 错误 org.apache.catalina.core.StandardWrapperValve [invoke] - Servlet.service() 用于 servlet 操作引发异常
java.lang.OutOfMemoryError:无法创建新的本地线程
    在 java.lang.Thread.start0(本机方法)
    在 java.lang.Thread.start(Thread.java:574)
    在 ******.exchange.adapter.dispatcher.impl.XMLCommandDispatcher.sendCommand(XMLCommandDispatcher.java:109)
    在 ******.exchange.adapter.star******.api.impl.******ApiImpl.******PricingAvailability(******ApiImpl.java: 356)
    在 ******.exchange.adapter.star******.impl.Concrete******GatewayImpl.find******Promotion(Concrete******GatewayImpl.java :123)
    在 ******.exchange.service.impl.Concrete******ManagerImpl.find******Promotion(Concrete******ManagerImpl.java:199)
    在 sun.reflect.GeneratedMethodAccessor1142.invoke(未知来源)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    在 java.lang.reflect.Method.invoke(Method.java:585)
    在 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:282)
    在 org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
    在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
    在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:56)
    在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
    在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
    在 $Proxy16.find******促销(未知来源)
    在 ******.ibe.servlet.crdms.search.******SearchPromotionServlet******.handleRequest(******SearchPromotionServlet******.java:75)
    在 org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
    在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:595)
    在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:543)
    在 org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:390)
    在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:341)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    在 org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
    在 org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
    在 org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
    在 org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
    在 org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
    在 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    在 java.lang.Thread.run(Thread.java:595)
2010-11-14 00:40:43,762 错误 org.apache.catalina.core.ApplicationDispatcher [invoke] - servlet jsp 的 Servlet.service() 抛出异常
2010-11-14 00:40:43,805 错误 org.apache.catalina.core.StandardWrapperValve [invoke] - servlet jsp 的 Servlet.service() 抛出异常
java.lang.OutOfMemoryError:无法创建新的本地线程
    在 java.lang.Thread.start0(本机方法)
    在 java.lang.Thread.start(Thread.java:574)
    在 java.util.Timer.(Timer.java:154)
    在 java.util.Timer.(Timer.java:122)
    在 com.mysql.jdbc.Connection.(Connection.java:1441)
    在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
    在 java.sql.DriverManager.getConnection(DriverManager.java:525)
    在 java.sql.DriverManager.getConnection(DriverManager.java:171)
    在 org.apache.jsp.frameset_005f******_005fbottom_005f1_jsp._jspService(frameset_005f******_005fbottom_005f1_jsp.java:88)
    在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    在 org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
    在 org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
    在 org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
    在 org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
    在 org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
    在 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    在 java.lang.Thread.run(Thread.java:595)
2010-11-14 01:54:25,819 错误 org.apache.catalina.core.ApplicationDispatcher [invoke] - servlet jsp 的 Servlet.service() 抛出异常

Tomcat 宕机时的 Mod_jk 日志条目:

[Sun Nov 14 00:59:52 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): Can't receive response message from tomcat, network problems or tomcat is down (127.0.0.1:8009), err= -104
[Sun Nov 14 00:59:52 2010] [error] ajp_get_reply::jk_ajp_common.c (1503): Tomcat 已关闭或拒绝连接。尚未向客户端发送响应(尚未)
[Sun Nov 14 01:00:01 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): 无法接收来自 tomcat 的响应消息,网络问题或 tomcat 已关闭 (127.0.0.1:8009),err= -104
[Sun Nov 14 01:00:01 2010] [error] ajp_get_reply::jk_ajp_common.c (1503): Tomcat 已关闭或拒绝连接。尚未向客户端发送响应(尚未)
[2010 年 11 月 14 日星期日 01:00:01] [错误] ajp_service::jk_ajp_common.c (1758):连接到 tomcat 时出错。Tomcat 可能未启动或正在侦听错误的端口。工人=工人1 失败
[2010 年 11 月 14 日星期日 01:00:01] worker1 mydomain.com 271.622400

[Sun Nov 14 01:00:01 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): 无法接收来自 tomcat 的响应消息,网络问题或 tomcat 已关闭 (127.0.0.1:8009),err= -104
[Sun Nov 14 01:00:01 2010] [error] ajp_get_reply::jk_ajp_common.c (1503): Tomcat 已关闭或拒绝连接。尚未向客户端发送响应(尚未)
[Sun Nov 14 01:00:06 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): 无法接收来自 tomcat 的响应消息,网络问题或 tomcat 已关闭 (127.0.0.1:8009),err= -104
[2010 年 11 月 14 日星期日 01:00:06] [错误] ajp_get_reply::jk_ajp_common.c (1503):Tomcat 已关闭或拒绝连接。尚未向客户端发送响应(尚未)
[2010 年 11 月 14 日星期日 01:00:06] [错误] ajp_service::jk_ajp_common.c (1758):连接到 tomcat 时出错。Tomcat 可能未启动或正在侦听错误的端口。工人=工人1 失败
[Sun Nov 14 01:00:06 2010] worker1 mydomain.com 86.999946

[Sun Nov 14 01:00:06 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): 无法接收来自 tomcat 的响应消息,网络问题或 tomcat 已关闭 (127.0.0.1:8009),err= -104
[2010 年 11 月 14 日星期日 01:00:06] [错误] ajp_get_reply::jk_ajp_common.c (1503):Tomcat 已关闭或拒绝连接。尚未向客户端发送响应(尚未)
[Sun Nov 14 01:00:10 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): 无法接收来自 tomcat 的响应消息,网络问题或 tomcat 已关闭 (127.0.0.1:8009),err= -104
[Sun Nov 14 01:00:10 2010] [error] ajp_get_reply::jk_ajp_common.c (1503): Tomcat 已关闭或拒绝连接。尚未向客户端发送响应(尚未)
[2010 年 11 月 14 日星期日 01:00:10] [错误] ajp_service::jk_ajp_common.c (1758):连接到 tomcat 时出错。Tomcat 可能未启动或正在侦听错误的端口。工人=工人1 失败
[2010 年 11 月 14 日星期日 01:00:10] worker1 mydomain.com 39.000187

/var/log/messages 中的消息:

11 月 14 日 00:59:40 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:00:47 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:01:49 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:02:54 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:04:03 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:05:06 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:06:13 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:07:14 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:08:15 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:09:19 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:10:23 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:11:29 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:12:29 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:13:29 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:14:56 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:16:04 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:17:19 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:18:22 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:19:26 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:20:26 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:21:36 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:22:37 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:23:48 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:24:50 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:25:54 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:26:57 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:29:08 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 01:30:10 nemo 内核:端口 8009 上可能发生 SYN 泛洪。发送 cookie。
11 月 14 日 03:00:01 nemo setroubleshoot:SELinux 正在阻止 mysqld (mysqld_t) "getattr" 到 /var/lib/mysql/mysql.sock (var_lib_t)。获取完整的 SELinux 消息。奔海$
11 月 14 日 03:00:01 nemo setroubleshoot:SELinux 正在阻止 mysqld (mysqld_t) "getattr" 到 /var/lib/mysql/nemo.me-tech.com.my.err (var_lib_t)。对于完整的 SELinux 混乱$
11 月 14 日 03:00:01 nemo setroubleshoot:SELinux 正在阻止 mysqld (mysqld_t) “读取”到 ./time_zone_name.frm (var_lib_t)。获取完整的 SELinux 消息。运行 sealert -l $

阿帕奇配置:


# 前叉 MPM
# StartServers:要启动的服务器进程数
# MinSpareServers:保持空闲的最小服务器进程数
# MaxSpareServers:保持空闲的最大服务器进程数
# MaxClients:允许启动的最大服务器进程数
# MaxRequestsPerChild:服务器进程服务的最大请求数
 ‹IfModule prefork.c›
启动服务器 5
MinSpareServers 5
MaxSpareServers 10
最大客户数 256
MaxRequestsPerChild 0
 ‹/IfModule›

# 工人 MPM
# StartServers:要启动的服务器进程的初始数量
# MaxClients:最大同时客户端连接数
# MinSpareThreads:保持空闲的最小工作线程数
# MaxSpareThreads:保持空闲的最大工作线程数
# ThreadsPerChild:每个服务器进程中的工作线程数恒定
# MaxRequestsPerChild:服务器进程服务的最大请求数
 ‹IfModule worker.c›
启动服务器 2
最大客户数 256
MinSpareThreads 25
最大备用线程数 75
每个孩子的线程数 25
MaxRequestsPerChild 0
 ‹/IfModule›

Apache Mod_jk worker.properties:

worker.list=worker1
 worker.worker1.type=ajp13
 worker.worker1.host=127.0.0.1
 worker.worker1.port=8009
 worker.worker1.lbfactor=1
 worker.worker1.socket_keepalive=1
 worker.worker1.recycle_timeout=180
 worker.worker1.sticky_session=False

Tomcat server.xml(mod_jk 的 AJP 连接器):

   ‹Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
               端口="8009"
               协议="AJP/1.3"
               enableLookups="true"
               重定向端口="8443"
               接受计数=“10”
               调试="0"
               连接超时="5000"
               使用URIValidationHack="假"
               maxPostSize="10000000"
               maxThreads="256"
               maxSpareThreads="10"
               URIEncoding="UTF-8"
               protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/›

任何帮助或建议将不胜感激。

非常感谢

4

1 回答 1

1

根据这一点,您应该尝试设置您的 JAVA_OPTS 环境变量以减少 Tomcat 使用的堆栈和/或堆大小,从而为操作系统提供一些喘息的空间。

于 2010-11-15T16:08:56.543 回答