windows java.exe內存暴漲解決、idea跑java tomcat內存無限增長
最近突然遇到個問題:用 idea 跑 Tomcat 服務,不到30分鐘 內存就吃完了。用任務管理器查看,發現 java.exe占了10G內存!!
查了各種方法
一、 idea Tomcat 配置沒用!!!
二、idea idea64.exe.vmoptions安裝目錄下的 bin 下的 idea64.exe.vmoptions 配置,還是 C:UsersAdministrator.IntelliJIdea2019.1config 下的 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 30jdk的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()線程了,導致卡死。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章: