java.exe 内存_windows java.exe内存暴涨解决、idea跑java\ tomcat内存无限增长

在使用IDEA运行Tomcat服务时,遇到内存迅速消耗完的问题,通过调整IDEA的Tomcat配置和VM选项,以及使用jvisualvm监控,都无法有效控制Java进程内存。最终通过在命令行指定JVM最大内存限制`java -Xmx2048m -XX:MaxPermSize=1024m -version`解决了内存暴涨问题。同时,文章还提到线程卡死导致内存持续增长的情况,通过jstack分析找到卡死线程并优化代码,避免了Thread.sleep()导致的阻塞。
摘要由CSDN通过智能技术生成

最近突然遇到个问题:用 idea 跑 Tomcat 服务,不到30分钟 内存就吃完了。用任务管理器查看,发现 java.exe占了10G内存!!

查了各种方法

一、 idea Tomcat 配置

cf68c660950f7df41f3d2d34e5d4ae65.png

没用!!!

二、idea idea64.exe.vmoptions

安装目录下的 bin 下的 idea64.exe.vmoptions 配置,还是 C:\Users\Administrator\.IntelliJIdea2019.1\config 下的 idea64.exe.vmoptions 配置 改成如下

10030cafc120e4194748c67e13aebbb5.png

也没用!!

三、jvisualvm.exe 检查

然后打开 jdk/bin的 jvisualvm.exe 监控发现里面的 堆,栈等内存空间也是正常的

7662975f8c213073adcc6881f03e1d4d.png

着实郁闷,感觉java线程的最大内存完全不由这些配置控制。

四、线程状态检查

后来根据这

五、解决

最后是解决了,方法是

打开控制台,执行【 java -Xmx2048m -XX:MaxPermSize=1024m -version】

da1e04a62609dbee7a1b57e135d278b4.png

如此内存是控制住了。

【猜想】:如果没有给JVM 设置内存上限,他会一直跟操作系统申请内存。前面几步都没能设置到位,或者说设置不成功。

补充:java Thread卡死 项目内存一直增长

1.今天项目中出现了一个问题,虚拟内存、物理内存一直持续增长,项目需要每隔一小时重启一次。很是蛋疼。。怎么办呢? 很捉急啊。以下是解决方案,有相同问题的小伙伴,可以参考参考。

首先查看内存

1.top

查看pid 11112 (我的进程号)

2.top -H -p 11112

查看线程占用比例 得到线程11140 比较高

3. printf %x 11140

转换为16进制 2b84

4.jstack 11112 | grep 2b84 -A 30

jdk的bin目录下查看代码

报错:

"pool-4392-thread-1" prio=10 tid=0x00007fa4321be800 nid=0x2786 waiting on condition [0x00007fa2dc013000]

java.lang.Thread.State: WAITING (parking)

at sun.misc.Unsafe.park(Native Method)

- parking to wait for <0x00000000fc0c7ba0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)

at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)

at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)

at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)

at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

at java.lang.Thread.run(Thread.java:745)

出现以上问题是因为线程卡死问题。经过查看代码,是由于在循环中Thread.sleep()线程了,导致卡死。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值