记一次线上Tomcat服务内存溢出的问题处理

devtools/2025/2/27 17:42:43/

背景:JavaWeb项目部署在Tomcat服务器上,服务器用的Windows。

问题表现:系统出现偶发性无法访问(隔几天就会在早上无法访问)

Tomcat的日志catalina中,有如下报错信息。

java.lang.OutOfMemoryError: GC overhead limit exceeded
通过查询资料,显示该错误表示 Java 虚拟机(JVM)花费了大量时间进行垃圾回收(GC),但回收的内存却很少,达到了一个限制,从而抛出该异常。这通常意味着应用程序存在内存泄漏或者内存使用效率极低的问题。

问题排查过程:

一开始通过重启Tomcat解决这个问题,后来隔一段时间就会出现这种情况,发现不对劲,此时意识到问题的严重性。

开始排查这个问题,因为项目中有定时任务,每天凌晨2点会执行。想到的是不是这个定时程序中内存出现了泄漏,没有及时关闭文件流或者链接什么的。

沿着这个思路,开始看定时任务每天执行的日志。

发现有个定时任务的日志,只有开始日志,没有看到结束的日志。

推测程序应该是在执行这个定时任务的过程中出现了问题,开始逐步调试这个任务的代码,这个任务的主要工作是把本地的文件转成pdf格式的文件,然后调用第三方接口,把pdf文件传输给对方。

通过代码调试,发现程序走到这个方法的时候,进程会卡死在这里,不会继续往下走,即使等待了很久也不会继续执行代码,基本上定位到问题发生的地方了。

这个方法是把ppt格式文件转为pdf格式文件。

执行save方法时,如果文件有10M大小,那么就会卡死这这个地方。

解决问题:

又查了一下资料,可以通过改变Tomcat内存的大小来解决,下面是一些建议:

因为服务器上的Tomcat是以服务的形式安装的,找到Tomcat配置页面:

最大内存根据实际情况来配置即可。

修改完点击应用,确定,再重启Tomcat服务器。

问题解决啦!


http://www.ppmy.cn/devtools/163121.html

相关文章

基于 C++ Qt 的 Fluent Design 组件库 QFluentWidgets

简介 QFluentWidgets 是一个基于 Qt 的 Fluent Designer 组件库,内置超过 150 个开箱即用的 Fluent Designer 组件,支持亮暗主题无缝切换和自定义主题色。 编译示例 以 Qt5 为例(Qt6 也支持),将 libQFluentWidgets.d…

34.Java 阻塞队列(阻塞队列架构、阻塞队列分类、阻塞队列核心方法)

一、阻塞队列概述 java.util.concurrent 包下的 BlockingQueue 接口很好的解决了多线程中如何高效安全传输数据的问题,可以使用这些高效并且线程安全的队列类快速搭建高质量的多线程程序 阻塞队列通过一个共享的队列,使得数据由队列的一端输入&#xff…

保护密码等敏感信息的几个常用方法

概述 在生产环境,保护数据库账号密码等敏感信息是至关重要的,这些信息不能被所有研发工程师看见,本文介绍几种避免明文存储的常用方法。 方法1: 使用配置中心加密 适用场景:已采用配置中心(如Spring Clou…

前端多个项目放在一个域名下如何配置打包文件

一、原因 当前端有三个项目,比如,大学生后台管理系统、大学生手机端网页、大学生电脑端网页,这三个项目想放在同一个域名下,此时就需要对项目打包配置进行更改,才能实现。 注:如果前端三个项目请求同一个后…

Redis面试宝典【刷题系列】

文章目录 一、什么是Redis?二、Redis相比Memcached有哪些优势?三、Redis支持的数据类型有哪些?四、Redis的主要消耗的物理资源是什么?五、Redis的全称是什么?六、Redis有哪些数据淘汰策略?七、为什么Redis需…

python爬虫学习第十一篇爬取指定类型数据

最近在学习Python爬虫的过程中,尝试用爬虫获取指定类型的数据。今天,我想和大家分享一下我的实践过程和遇到的问题。 一、实现目标 目标是从一个网站的API接口获取不同类型的食品数据。 比如,第一步我想获取汉堡、小食、甜品等不同类型的数…

计算机毕设-基于springboot的人工智能领域复合型人才校企协同培养管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

大白话css第二章深入学习

CSS学习第二阶段主要是深入掌握一些更复杂、更实用的知识和技能,以下用大白话为你详细介绍并给出代码示例: 盒模型与布局 盒模型深入理解 解释:前面说过每个HTML元素像个盒子,现在要更深入了解。内容区域就是盒子里真正放东西的…