tomcat启动项目时一直卡住无反应的解决方案
关于tomcat启动项目时一直卡住无反应的场景之一:最近碰到一次项目启动半天没反应,也不报错,项目在其它电脑上能正常启动运行。日志中有时候会报数据库连接超时,有时候会报类似于接连池问题。Causedby:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Couldnotcreateconn...
关于tomcat启动项目时一直卡住无反应的场景之一:
最近碰到一次项目启动半天没反应,也不报错,项目在其它电脑上能正常启动运行。日志中有时候会报数据库连接超时,有时候会报类似于接连池问题。
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Caused by: java.net.ConnectException: Connection timed out: connect
最终问大神找到原因,是系统没有打开telnet. 然而我其它电脑也没有开这个功能也照样运行。不知道什么造成这样的结果
telnet
搭建或配置网络环境时,经常会使用ping命令检查网络是否可达。有些时候Ping命令也不好使,比如因防火墙禁止或访问策略限制等。则可使用telnet测试映射端口或远程访问主机。
Telnet协议是TCP/IP协议族的其中之一,是Internet远程登录服务的标准协议和主要方式,常用于网页服务器的远程控制,可供使用者在本地主机运行远程主机上的工作。
启用telnet
操作过程:点击"开始"→"控制器面板"→" 查看方式:类型"则点击"程序"("查看方式:大图标"则点击"程序和功能")→ "启动或关闭windows功能"→ 在"Windows功能"界面勾选Telnet服务器。
https://blog.csdn.net/sosozha/article/details/85014735
加入log4j日志,debug级别查看:
https://blog.csdn.net/u013870094/article/details/79518028
log4j.properties:
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout
很简单,加入log4j日志,debug级别 ,查看为啥。
结果发现 就是 日志配置文件没加。。。一直卡住
tomcat 启动卡住不动的场景三:
启动tomcat , 控制台停在这个地方不动了
[2018-10-10] 11:20:11.551 assets- [RMI TCP Connection(3)-127.0.0.1]-[DefaultServerProvider.java:109]-[INFO] Environment is set to [dev] by JVM system property 'env
没有任何报错,郁闷。
既然是卡住了,那就是在访问某个东西的时候一直没有响应,而tomcat 却不放弃,一直重试。。
可能是数据库、缓存以及消息中间件等都是有可能的。
想到可能是数据库请求的原因,一般我们开发中必须要链接数据库。。
于是想到用 JVisualVm 查看线程情况
看到 Druid 有多个线程,状态为休眠和驻留。。
看来是数据库无法链接的原因了。。。以后遇到类似问题,可以考虑 java 自带的一些工具。。如visualvm
消息队列 ActiveMQ 造成 Tomcat 启动卡住:
https://hacpai.com/article/1530777741707
项目中引入消息队列 ActiveMQ 造成 Tomcat 启动不了,一直处于假死状态,其相关配置如下:
<!-- 配置消息中间件ActiveMQ的连接工厂 --> <bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="failover:${activemq_url}"></property> </bean>
<!-- 配置消息中间件ActiveMQ的连接工厂 --> <bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="failover:${activemq_url}"/> </bean>
原因解释:
上述配置的 property 中 brokenURL 的 value 的failover代表的意思是失效重连,Tomcat 在启动的时候会一直去连接 ActiveMQ,如果 ActiveMQ 不可用,这样就会导致 Tomcat 一直卡在那里。
解决方法:
一. 修改配置
1. 加上maxReconnectAttempts参数,其代表的意思是重连次数 <!-- 配置消息中间件ActiveMQ的连接工厂 -->
<bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="failover:(${activemq_url})?maxReconnectAttempts=10"></property>
</bean>
2. 删除failover参数
<!-- 配置消息中间件ActiveMQ的连接工厂 -->
<bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${activemq_url}"></property>
</bean>
1. 加上maxReconnectAttempts参数,其代表的意思是重连次数 <!-- 配置消息中间件ActiveMQ的连接工厂 --> <bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="failover:(${activemq_url})?maxReconnectAttempts=10"/> </bean> 2. 删除failover参数 <!-- 配置消息中间件ActiveMQ的连接工厂 --> <bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="${activemq_url}"/> </bean>
排除各个可能导致不停的访问出错导致的卡住,在循环访问
直接关掉那些不停访问的程序
更多推荐
所有评论(0)