tomcat启动项目时一直卡住无反应的解决方案

关于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>

 

排除各个可能导致不停的访问出错导致的卡住,在循环访问

直接关掉那些不停访问的程序

猜你喜欢

转载自blog.csdn.net/weixin_41249041/article/details/88411483
今日推荐