网站运营
位置:首页>> 网站运营>> tomcat内存溢出问题解决经历

tomcat内存溢出问题解决经历

作者:冰湖一角  发布时间:2023-11-02 14:05:42 

标签:tomcat,内存,溢出

前一段时间提交了一个产品版本给测试人员测试,测试结果简直出人意料!

测试一段时间后页面就卡死了,当时根据这个现象下意识的怀疑是卡到数据库这一层,然后查看数据库连接相关的参数,如意料之中的相似,连接数太多了!当把数据库连接数解决后,本以为这个bug解决了,但是...

测试一段时间后页面又卡死了!!!

打开任务管理器,发现tomcat内存超过了1.5G,而且tomcat关不掉!是什么原因导致的呢?左思右想之后,想到了一个可能会导致tomcat内存上涨的点,那就是多线程,然后翻代码找线程池的配置,发现也没什么可疑之处。

那就先解决下tomcat关不掉的问题吧,百度...检查代码...几十分钟后找到了,在tomcat * 的销毁方法(contextDestroyed)里没有关闭线程池,这种情况下,由于线程池没法关闭,进而导致tomcat无法关闭的问题。

将代码改为:


public class InitListener implements ServletContextListener{
 private Logger logger = Logger.getLogger(InitListener.class);
 @Override
 public void contextInitialized(ServletContextEvent sce) {
   logger.info("启动tomcat");
 }
 @Override
 public void contextDestroyed(ServletContextEvent sce) {
   logger.info("关闭tomcat,关闭线程池");
   ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml");
   ThreadPoolTaskExecutor myTaskExecutor = (ThreadPoolTaskExecutor) classPathXmlApplicationContext.getBean("myTaskExecutor");
   myTaskExecutor.shutdown();
 }
}

来源:https://www.cnblogs.com/bingyimeiling/p/11505844.html

0
投稿

猜你喜欢

手机版 网站运营 asp之家 www.aspxhome.com