多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > jvm調優經驗分享

jvm調優經驗分享

來源:程序員人生   發布時間:2014-11-14 08:39:39 閱讀次數:2364次

當Java程序申請內存,超越VM可分配內純的時候,VM首先可能會GC,如果GC完還是不夠,或申請的直接超夠VM可能有的,就會拋出內 存溢出異常。從VM規范中我們可以得到,1下幾種異常。

java.lang.StackOverflowError:(很少)
java.lang.OutOfMemoryError:heap space(比較常見)
java.lang.OutOfMemoryError: PermGen space (常常出現)

java.lang.OutOfMemoryError: GC overhead limit exceeded(某項操作使用大量內存時產生)

以下分別解釋1下,從最多見的開始:

java.lang.OutOfMemoryError: PermGen space 這個異常比較常見,是說JVM里的Perm內 存區的異常溢出,由于JVM在默許的情況下,Perm默許為64M,而很多程序需要大量的Perm區內 存,特別使用到像Spring等框架的時候,由于需要使用到動態生成類,而這些類不能被GC自動釋放,所以致使OutOfMemoryError: PermGen space異常。解決方法很簡單,增大JVM的 -XX:MaxPermSize 啟動參數,就能夠解決這個問題,如過使用的是默許變量通常是64M[5.0 and newer: 64 bit VMs are scaled 30% larger; 1.4 amd64: 96m; 1.3.1 -client: 32m.],改成128M就能夠了,-XX:MaxPermSize=128m。如果已是128m(Eclipse已是128m了),就改成 256m。我1般在http://www.vxbq.cn/server/上為安全起見,改成256m。

java.lang.OutOfMemoryError:heap space或其它OutOfMemoryError,這個異常實際上跟上面的異常是1個異常,但解決方法不同,所以分開來寫。上面那個異常是由于JVM的perm區內 存辨別少了引發的(JVM的內 存辨別為 young,old,perm3種)。而這個異常是由于JVM堆內 存或說整體分少了。解決方法是更改 -Xms -Xmx 啟動參數,通常是擴大1倍。xms是管理啟動時最小內 存量的,xmx是管里JVM最大的內 存量的。
注:OutOfMemoryError可能有很多種緣由,根據JVM Specification, 可能有1下幾種情況,我先簡單列出。stack:stack分區不能動態擴大,或不足以生成新的線程。Heap:需要更多的內 存,而不能取得。Method Area :如果不能滿足分配需求。runtime constant pool(從Method Area分配內 存)不足以創建class or interface。native method stacks不能夠動態擴大,或生成新的本地線程。

 

java.lang.OutOfMemoryError: GC overhead limit exceeded,這個是JDK6新添的毛病類型。這個hotspot VM1.6定義的1個策略,是1種保護機制,通過計算GC時間來預測是不是需要OOM了,提早拋出異常,避免OOM的產生,官方的定義是:并行/并發回收器在GC回收時間太長會拋出OutOfMemoryError(太長的定義是超過98%的時間用來GC并回收了不到2%的堆內存,用來避免內存太小造成利用不能正常工作。我在JSP導大Excel的時候碰到過。終究解決方案是,關閉該功能,使用―― -XX:-UseGCOverheadLimit,預測OOM有啥用呢?雖然可能不能終究解救你的利用,但是可以在掛掉前做最后的掙扎,比如數據保存和保存現場(Heap Dump),固然這個策略會帶來比如加載某1個大內存時頻繁OOM。加入生產環境遇到這個問題,在不知道緣由的情況下不要簡單規避這個問題,可以通過-verbose:gc -XX:+PrintGCDetails看1下究竟是甚么緣由釀成的異常。通常緣由都是由于年老代(old區)占用過量致使頻繁FullGC,終究致使GC overhead limit exceed。如果gc log不夠可以借助JProfile等工具查看內存占用,old區是不是有內存泄漏。。分析內存泄漏有1個方法 -XX:HeapDumpOnOutOfMemoryError, 這樣OOM時會自動做Heap Dump,可以拿MAT來排查了。另外留意新生代(young區),如果有過量短暫對象分配,可能也會致使這個異常。


最后說說java.lang.StackOverflowError,老實說這個異常我也沒碰見過,但JVM Specification就提1下,規范上說有1下幾種境況可能拋出這個異常,1個是Stacks里的線程超過允許的時候,另外一個是當native method要求更大的內 存,而超過native method允許的內 存的時候。根據SUN的文檔,提高-XX:ThreadStackSize=512的值。

總的來講調優JVM的內 存,組要目的就是在使用內 存盡量小的,使程序運行正常,不拋出內 純溢出的bug。而且要調好最小內 存,最大內 存的比,避免GC時浪費太多時間,特別是要盡可能避免FULL GC。

 

補充:由于JDK1.4新增了nio,而nio的buffer分配內存比較特殊(讀寫流可以同享內存)。如果有大量數據交互,也可能致使java.lang.OutOfMemoryError。相應的JDK新增了1個特殊的參數:-XX:MaxDirectMemorySize 默許是64M,可以改大些如128M。

 -XX:MaxDirectMemorySize=<size>
Specifies the maximum amount of memory in bytes that the Java? NIO library can allocate for direct memory buffers. The default is 64 megabytes, which corresponds to
-XX:MaxDirectMemorySize=64m . The use of direct memory buffers can minimize the copying cost when doing I/O operations.


 
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 1区2区3区 | 国产性生活视频 | 亚洲天堂影院 | v影院最新在线v视频 | 亚洲精品国产一区二区在线 | 中文乱码在线观看 | 亚洲专区视频 | free性欧美黑人 | 欧美一级毛片免费大片 | 日韩欧美一区二区三区四区 | 欧美笫一页 | 琪琪免费影院 | 中文字幕国产视频 | 亚洲欧美一区二区三区九九九 | 日本美女一级黄色片 | 最近的免费中文字幕1 | 国产免费播放一区二区三区 | 国产一级做a爰片久久毛片99 | a级片网 | 我想看一级毛片 | 欧美最猛同性video | 亚洲嫩草影院久久精品 | 国产免费资源高清小视频在线观看 | 97影院3| 亚洲精品精品 | 天天躁夜夜 | 国内精品哆啪啪 | 国产精品国产三级国产在线观看 | 国产精品99一区二区三区 | 三级国产在线观看 | 国产精品不卡高清在线观看 | 狠狠躁 | 婷婷亚洲国产成人精品性色 | 欧美精品网| 国产视频一区在线 | 91久久精品国产一区二区 | 午夜dj免费视频观看在线播放 | 一级做a爱久久久久久久 | 国产精品αv在线观看 | 免费欧美在线视频 | 亚洲日本一区二区三区 |