萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> 找到該死的OutOfMemoryError

找到該死的OutOfMemoryError

 


看到下面這一堆信息, 我想你應該知道要做什麼了.

 

main
  at java.lang.OutOfMemoryError.<init>()V (OutOfMemoryError.java:48)
  at java.util.Arrays.copyOfRange([CII)[C (Arrays.java:2694)
  at java.lang.String.<init>([CII)V (String.java:203)
  at java.lang.StringBuilder.toString()Ljava/lang/String; (StringBuilder.java:405)
  at com.mkk.utils.GuidGeneratorTest.outOfMemory()V (GuidGeneratorTest.java:25)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Method.java:601)

 

 

加大內存,加大內存, 內存溢出了, 於是我設置了

 

JAVA_OPTS=-server -Xms2048m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=512m -Xss512k

 

 

重啟服務器, 沒過多久又 OutOfMemoryError

 

是時候知道該死的OutOfMemoryError,

 

所以, 請給JAVA_OPTS添加 

 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/error

(注: 紅色部分為服務器的一路徑,當OutOfMemoryError是JVM信息會保存在該目錄裡)

 

 

再重啟服務器,期待下一次的OutOfMemoryError吧.

 

是的, OutOfMemoryError又來了...

 

現在,去/home/error目錄看看吧. 是否有類似java_pid6472.hprof的文件生成, 還很大(好幾十或幾百MB).

 

現在, 推薦去下載MAT(Memory Analyzer Tool)工具在看看是什麼東東把內存都消耗完了(也可用JDK自帶的jvisualvm.exe工具). 下載地址:

http://www.eclipse.org/mat/downloads.php

 

 

 

最後, 找到了源頭. 去修改代碼吧.

copyright © 萬盛學電腦網 all rights reserved