虚拟内存不释放

weixin_41297360 2020-09-07 10:21:12
在windowsServer2012R2系统的服务器上跑springBoot jar包+tomcat启动的war包,还有matlab、redis,数据库是oracle12c。刚启动没报错,跑了两天然后c盘虚拟内存占满了,Oracle12C服务自动关了,重启服务器之后c盘恢复了。各位大佬这是什么问题。跪求
...全文
2607 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
a863922230 2020-09-25
  • 打赏
  • 举报
回复
建议你用linux做服务器吧,windows不靠谱是出名的。
Kevin.Y.K 2020-09-08
  • 打赏
  • 举报
回复
内存泄露+windows的问题,某一时刻流量增加,应用服务器、缓存、数据库都在竞争资源,内存泄露很正常,然后windows做服务器天然不靠谱。
qybao 2020-09-07
  • 打赏
  • 举报
回复
引用 2 楼 weixin_41297360 的回复:
但是我在win10上运行就没有问题,代码应该没什么问题

windowsServer2012R2和win10安装的软件(比如jdk,orcale之类的)的版本都一样吗?如果都一样,那就可能是操作系统本身有内存泄漏(一般windows长期开机会越来越慢也是因为系统本身有内存泄漏)。
冰思雨 2020-09-07
  • 打赏
  • 举报
回复
查一下 tomcat , matlab , redis 和 oracle 的具体的版本号,你 Win10 系统 和 WinServer 系统 上面的这些软件的具体版本号,肯定是不相同的。 尤其是老版本的 tomcat 有的版本 时间长了,是会出现问题的。有可能是 tomcat 和 JDK 不兼容引起的。 具体的原因,我也不知道是怎么回事,一般情况下 虚拟内存 写满硬盘, 肯定是内存泄露了 。 Oracle 对内存的管理很严格的,通常是不会出现内存泄漏的状况。 redis 会有这个可能,你的程序如果缓存的数据都是常驻内存的,从不清理缓存(或者说,数据没有生存周期),一直往里面存,当然会内存溢出了。 matlab 的内存溢出,一般情况就是你的实验数据太大,一步一步的执行过程中,没有释放内存,一直积累这些中间结果,然后,内存溢出了。 tomcat 很少有内存溢出的情况,除非你更改了启动参数,或者,使用 Java Native 方法。 springBoot 的程序,如果要内存溢出的话,那也是编程的问题,这个和redis的使用一样,只能靠编程经验来避免,要是想查原因的话,下载一些工具,比如 jmap 之类的,查一下内存状况,线程的执行情况。
weixin_41297360 2020-09-07
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
那估计是你程序的什么地方有内存泄漏了,检查一下代码,有没有被全局引用的对象,导致这些对象无法被垃圾回收。
但是我在win10上运行就没有问题,代码应该没什么问题
qybao 2020-09-07
  • 打赏
  • 举报
回复
那估计是你程序的什么地方有内存泄漏了,检查一下代码,有没有被全局引用的对象,导致这些对象无法被垃圾回收。
KeepSayingNo 2020-09-07
  • 打赏
  • 举报
回复
Oracle12 一般直接占文件磁盘,因此我觉得可能是REDIS的问题,你把REDIS的持久化方式由AOF换成RDB试试
weixin_41297360 2020-09-07
  • 打赏
  • 举报
回复
引用 3 楼 冰思雨 的回复:
查一下 tomcat , matlab , redis 和 oracle 的具体的版本号,你 Win10 系统 和 WinServer 系统 上面的这些软件的具体版本号,肯定是不相同的。 尤其是老版本的 tomcat 有的版本 时间长了,是会出现问题的。有可能是 tomcat 和 JDK 不兼容引起的。 具体的原因,我也不知道是怎么回事,一般情况下 虚拟内存 写满硬盘, 肯定是内存泄露了 。 Oracle 对内存的管理很严格的,通常是不会出现内存泄漏的状况。 redis 会有这个可能,你的程序如果缓存的数据都是常驻内存的,从不清理缓存(或者说,数据没有生存周期),一直往里面存,当然会内存溢出了。 matlab 的内存溢出,一般情况就是你的实验数据太大,一步一步的执行过程中,没有释放内存,一直积累这些中间结果,然后,内存溢出了。 tomcat 很少有内存溢出的情况,除非你更改了启动参数,或者,使用 Java Native 方法。 springBoot 的程序,如果要内存溢出的话,那也是编程的问题,这个和redis的使用一样,只能靠编程经验来避免,要是想查原因的话,下载一些工具,比如 jmap 之类的,查一下内存状况,线程的执行情况。
jdk1.8 tomcat8.5 应该不是matlab的问题 我跑项目就没事,我跑项目之后没有调用matlab打的jar也是内存溢出。数据量也没多大, redis设置的定时自动清理数据,win10和winServer2012R2 的环境都一样。主要是我只启动了,并没有任何操作,当时没事两天后它也会把c盘虚拟内存占满。我看了下任务管理器I/O写入、提交大小也没什么明显的变化。就很奇怪,是不是系统的问题
weixin_41297360 2020-09-07
  • 打赏
  • 举报
回复
引用 4 楼 qybao 的回复:
[quote=引用 2 楼 weixin_41297360 的回复:]但是我在win10上运行就没有问题,代码应该没什么问题
windowsServer2012R2和win10安装的软件(比如jdk,orcale之类的)的版本都一样吗?如果都一样,那就可能是操作系统本身有内存泄漏(一般windows长期开机会越来越慢也是因为系统本身有内存泄漏)。[/quote] 版本什么的都一样

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧