2010-11-14 24 views
1

我在Redhat上有apache 2 + mod_jk + tomcat安裝。剛剛開始有java.lang.OutOfMemoryError:無法創建新的本地線程異常會導致tomcat掛起。我的網站在tomcat的內存不足異常

catalina.sh:

 
JAVA_OPTS="-Xms1256m -Xmx2000m" 
export JAVA_OPTS 
CATALINA_OPTS="-Xms1024m -Xmx2000m" 
export CATALINA_OPTS 
JAVA_HOME=/data/app/jdk/jdk1.5.0_11 
JRE_HOME=/data/app/jdk/jdk1.5.0_11 
export JAVA_HOME 
export JRE_HOME 

是內存設置是否正確?我有4GM可用RAM。

Tomcat的錯誤日誌:

 
2010-11-14 00:40:13,726 ERROR org.apache.catalina.core.StandardWrapperValve [invoke] - Servlet.service() for servlet action threw exception 
java.lang.OutOfMemoryError: unable to create new native thread 
    at java.lang.Thread.start0(Native Method) 
    at java.lang.Thread.start(Thread.java:574) 

mod_jk的時刻當Tomcat下來的日誌條目:

 
[Sun Nov 14 00:59:52 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): Can't receive the 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 is down or refused connection. No response has been sent to the client (yet) 
[Sun Nov 14 01:00:01 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): Can't receive the response message from tomcat, network problems or tomcat is down (127.0.0.1:8009), err=-104 
[Sun Nov 14 01:00:01 2010] [error] ajp_get_reply::jk_ajp_common.c (1503): Tomcat is down or refused connection. No response has been sent to the client (yet) 
[Sun Nov 14 01:00:01 2010] [error] ajp_service::jk_ajp_common.c (1758): Error connecting to tomcat. Tomcat is probably not started or is listening on the wrong port. worker=worker1 failed 
[Sun Nov 14 01:00:01 2010] worker1 mydomain.com 271.622400 

[Sun Nov 14 01:00:01 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): Can't receive the response message from tomcat, network problems or tomcat is down (127.0.0.1:8009), err=-104 
[Sun Nov 14 01:00:01 2010] [error] ajp_get_reply::jk_ajp_common.c (1503): Tomcat is down or refused connection. No response has been sent to the client (yet) 
[Sun Nov 14 01:00:06 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): Can't receive the response message from tomcat, network problems or tomcat is down (127.0.0.1:8009), err=-104 
[Sun Nov 14 01:00:06 2010] [error] ajp_get_reply::jk_ajp_common.c (1503): Tomcat is down or refused connection. No response has been sent to the client (yet) 
[Sun Nov 14 01:00:06 2010] [error] ajp_service::jk_ajp_common.c (1758): Error connecting to tomcat. Tomcat is probably not started or is listening on the wrong port. worker=worker1 failed 
[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): Can't receive the response message from tomcat, network problems or tomcat is down (127.0.0.1:8009), err=-104 
[Sun Nov 14 01:00:06 2010] [error] ajp_get_reply::jk_ajp_common.c (1503): Tomcat is down or refused connection. No response has been sent to the client (yet) 
[Sun Nov 14 01:00:10 2010] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (961): Can't receive the response message from tomcat, network problems or tomcat is down (127.0.0.1:8009), err=-104 
[Sun Nov 14 01:00:10 2010] [error] ajp_get_reply::jk_ajp_common.c (1503): Tomcat is down or refused connection. No response has been sent to the client (yet) 
[Sun Nov 14 01:00:10 2010] [error] ajp_service::jk_ajp_common.c (1758): Error connecting to tomcat. Tomcat is probably not started or is listening on the wrong port. worker=worker1 failed 
[Sun Nov 14 01:00:10 2010] worker1 mydomain.com 39.000187 

Meesages在/ var/log/messages中:

 
Nov 14 00:59:40 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:00:47 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:01:49 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:02:54 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:04:03 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:05:06 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:06:13 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:07:14 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:08:15 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:09:19 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:10:23 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:11:29 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:12:29 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:13:29 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:14:56 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:16:04 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:17:19 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:18:22 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:19:26 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:20:26 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:21:36 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:22:37 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:23:48 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:24:50 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:25:54 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:26:57 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:29:08 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 01:30:10 nemo kernel: possible SYN flooding on port 8009. Sending cookies. 
Nov 14 03:00:01 nemo setroubleshoot: SELinux is preventing mysqld (mysqld_t) "getattr" to /var/lib/mysql/mysql.sock (var_lib_t). For complete SELinux messages. run sea$ 
Nov 14 03:00:01 nemo setroubleshoot: SELinux is preventing mysqld (mysqld_t) "getattr" to /var/lib/mysql/nemo.me-tech.com.my.err (var_lib_t). For complete SELinux mess$ 
Nov 14 03:00:01 nemo setroubleshoot: SELinux is preventing mysqld (mysqld_t) "read" to ./time_zone_name.frm (var_lib_t). For complete SELinux messages. run sealert -l $ 

阿帕奇CONF:

 


# prefork MPM 
# StartServers: number of server processes to start 
# MinSpareServers: minimum number of server processes which are kept spare 
# MaxSpareServers: maximum number of server processes which are kept spare 
# MaxClients: maximum number of server processes allowed to start 
# MaxRequestsPerChild: maximum number of requests a server process serves 
‹IfModule prefork.c› 
StartServers   5 
MinSpareServers  5 
MaxSpareServers  10 
MaxClients   256 
MaxRequestsPerChild 0 
‹/IfModule› 

# worker MPM 
# StartServers: initial number of server processes to start 
# MaxClients: maximum number of simultaneous client connections 
# MinSpareThreads: minimum number of worker threads which are kept spare 
# MaxSpareThreads: maximum number of worker threads which are kept spare 
# ThreadsPerChild: constant number of worker threads in each server process 
# MaxRequestsPerChild: maximum number of requests a server process serves 
‹IfModule worker.c› 
StartServers   2 
MaxClients   256 
MinSpareThreads  25 
MaxSpareThreads  75 
ThreadsPerChild  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(AJP連接器的mod_jk):

 

    ‹Connector className="org.apache.coyote.tomcat5.CoyoteConnector" 
       port="8009" 
       protocol="AJP/1.3" 
       enableLookups="true" 
       redirectPort="8443" 
       acceptCount="10" 
       debug="0" 
       connectionTimeout="5000" 
       useURIValidationHack="false" 
       maxPostSize="10000000" 
       maxThreads="256" 
       maxSpareThreads="10" 
       URIEncoding="UTF-8" 
       protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/› 

任何幫助或建議將不勝感激。

非常感謝

回答

3

的OOM(內存不足錯誤)不一定涉及到你的整體的mod_jk/Apache配置等奧姆斯是內存泄漏的典型後果。

我推薦的分析OOM的方法是在運行時執行堆轉儲,並使用任何Java分析器打開它。或者,甚至更好的做法是,將-XX:+HeapDumpOnOutOfMemoryError添加到Java參數列表中,並在您獲得OOM的時刻獲得轉儲。您可能需要添加-XX:HeapDumpPath=/some/big/disk/with/space,以便知道在哪裏查找文件。

-1

你可以編寫shell腳本來在tomcat出現內存不足錯誤時重新啓動它。

編輯catalina.sh

添加此-XX:OnOutOfMemoryError =」/your_path/restart_tomcat.sh」你的CATALINA_OPTS內

原來的答覆:http://www.droidmsg.com/blog/?p=185