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

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

查了各种方法

一、 idea Tomcat 配置

没用!!!

二、idea idea64.exe.vmoptions

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

也没用!!

三、jvisualvm.exe 检查

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

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

四、线程状态检查

后来根据这 篇文章做了排查,发现也不是程序引发的问题。

五、解决

最后是解决了,方法是

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

如此内存是控制住了。

【猜想】:如果没有给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()线程了,导致卡死。

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

(0)

相关推荐

  • Java 输入流中的read(byte[] b)方法详解

    我就废话不多说了,大家还是直接看代码吧~ public int read(byte[] b) throws IOException 从一个输入流中读取一定数量的字节,并将这些字节存储到其缓冲作用的数组b中.这个函数会返回一次性读取的字节数. 这个函数是一个阻塞式的函数,当它读到有效数据.确认的文件尾(EOF)或者抛出一个异常时它才会执行其他语句,否则一直停在read()函数处等待. 比如下面的列子: ServerSocket server = new ServerSocket(port) Soc

  • 修改idea的这些启动参数,令你的idea健步如飞

    idea这个工具真的很好 很强大.而且非常的好用.用过idea的人,估计都不想用eclipse了. idea这个工具虽然好用,但是对硬件还是有点要求,如果你的电脑内存是2G,我建议您还是 直接使用eclipse吧,但是现在2G的电脑 应该少的很了. 如果你要用idea 建议内存8G/16G/32G- 硬件虽然满足了,但是我还是要简单配置一下.如果你不配置,可能再好的电脑配置,都跑不出来 效果.如果小项目,可以不用配置,但是您如果稍微运行大一点的项目 ,你的idea就需要配置一下 启动参数. 下面

  • 在windows下揪出java程序占用cpu很高的线程并完美解决

    我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线程分别占用的cpu呢所以在windows平台上要找出到底是哪个线程占用的cpu还不那么容易,linux用top就简单多了 最后的解决方法: 1.找到java进程对应的pid. 找pid的方法是:打开任务管理器,然后点击 "查看" 菜单,然后点击 "选择列",把pid勾上

  • IDEA之启动参数,配置文件默认参数的操作

    配置文件写法: isPay是key,如果启动参数不传,则采用默认值是1. 启动类传参: 补充:IDEA使用指定配置文件 在VM options 中添加 -Dspring.profiles.active=xxx 如 以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们.如有错误或未考虑完全的地方,望不吝赐教.

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

    最近突然遇到个问题:用 idea 跑 Tomcat 服务,不到30分钟 内存就吃完了.用任务管理器查看,发现 java.exe占了10G内存!! 查了各种方法 一. idea Tomcat 配置 没用!!! 二.idea idea64.exe.vmoptions 安装目录下的 bin 下的 idea64.exe.vmoptions 配置,还是 C:\Users\Administrator\.IntelliJIdea2019.1\config 下的 idea64.exe.vmoptions 配置

  • doscan.exe进程占用了大量的CPU和内存的解决方法

    症状 在安装完Symantec AntiVirus Corporate Edition 10.0或Symantec Client Security 3.0重启电脑后,发现doscan.exe进程占用了大量的CPU和内存,在doscan.exe进程结束后,rtvscan.exe进程使用约40 MB的内存,使电脑运行速度变慢. 解决方法 这个问题已在Symantec AntiVirus 10.0.1 和 Symantec Client Security 3.0.1 中得到修复,安装上述版本的软件就可

  • 解决vue-cli项目开发运行时内存暴涨卡死电脑问题

    最近开发一个vue项目时遇到电脑卡死问题,突然间系统就非常卡,然后卡着卡着就死机了,鼠标也动不了了,只能冷启动.而且因为是突然卡死,没来得及打开任务管理器. 最开始以为是硬盘的问题,但是在卡死几次后,就想到把任务管理器开着玩项目,看看到底是不是哪个程序把硬盘或者CPU占满了导致的卡死.经过一番排查,发现是node.js进程的内存一直在暴涨,内存直接100%,然后系统将所有休眠进程换到虚拟内存,但是还是不够,就一直换直到崩盘,硬盘也被占满100%. 这时候我才知道是运行项目开发环境导致的.然后想到

  • 基于Keras 循环训练模型跑数据时内存泄漏的解决方式

    在使用完模型之后,添加这两行代码即可清空之前model占用的内存: import tensorflow as tf from keras import backend as K K.clear_session() tf.reset_default_graph() 补充知识:keras 多个模型测试阶段速度越来越慢问题的解决方法 问题描述 在实际应用或比赛中,经常会用到交叉验证(10倍或5倍)来提高泛化能力,这样在预测时需要加载多个模型.常用的方法为 mods = [] from keras.ut

  • Java详解线上内存暴涨问题定位和解决方案

    前因: 因为REST规范,定义资源获取接口使用GET请求,参数拼接在url上. 如果按上述定义,当参数过长,超过tomcat默认配置 max-http-header-size :8kb 会报一下错误信息: Request header is too large 可以修改springboot配置,调整请求头大小 server: max-http-header-size: xxx 后果: 如果max-http-header-size设置过大,会导致接口吞吐下降,jvm oom,内存泄漏. 因为tom

  • 有关tomcat内存溢出的完美解决方法

    tomcat内存溢出设置JAVA_OPTS 答案1 设置Tomcat启动的初始内存 其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等选项可 进行设置 三.实例,以下给出1G内存环境下java jvm 的参数设置参考: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -D

  • Tomcat内存溢出分析及解决方法

    JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆是留给JVM自己用的,用来存放类的信息的.它和堆不同,运行期内GC不会释放空间. 一.内存溢出类型 1.java.lang.OutOfMemoryError: PermGen space JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的.它和堆不同,运行期内GC不会释放空间.如果web app用了大量的第三方jar或者

  • 如何解决项目中java heap space的问题

    起因 17年的一个项目出了OOM(java heap space)问题,眼下有个问题:法院项目,不能外网,一连接外网高院会直接定位到计算机,发出警报(档案的机密性啊)不能远程,那只能视频教他们怎么做了,全程和一个文员说代码,真的很累==! 过程 这个过程对一个不太了解内存的问题的开发无疑是艰难的,搜了一下,知道了是内存溢出导致的,于是着手解决 网上大多数都说调整运行内存,我也跟这个试了,但是不见效果,具体操作过程如下 设置-Xms256m  -Xmx512m -XX:PermSize=64M -

  • EXPLORER.EXE病毒手动解决方法

    行为: 1.释放文件: C:\WINDOWS\system\SERVICES.EXE  65536 字节 C:\WINDOWS\system\SYSANALYSIS.EXE  65536 字节 C:\WINDOWS\system\explorer.exe 976896 字节 2.删除备份文件: C:\WINDOWS\system32\dllcache\explorer.exe 3.覆盖系统文件:C:\WINDOWS\explorer.exe 系统启动时先执行病毒体,再执行C:\WINDOWS\s

  • linux解决Tomcat内存溢出的问题

    Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机.JAVA程序启动时JVM会分配一个初始内存和最大内存给程序.当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃. 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space 即JVM Heap溢出 解释说明:JVM在启动的时候会自动设置JVM Heap的值,JVM堆的设置是指java程序运行过程中JVM可以调配使用的

随机推荐