1. 程式人生 > >jvm配置(記憶體溢位解決方法)

jvm配置(記憶體溢位解決方法)

                    JAVA_OPTS引數說明與配置

最近手頭的專案報記憶體溢位錯誤,記憶體溢位(Out Of Memofy)
錯誤資訊:Java.lang.OutOfMemoryError: Java heap space
測試環境:RHEL5.4_x64
jdk-6u20-linux-x64.bin
apache-tomcat-6.0.20

生產環境:Windows Server 2008 Enterprise Edition
jdk-6u21-windows-x64
apache-tomcat-6.0.29
Linux修改catalina.sh檔案
JAVA_OPTS=”-server -Dfile.encoding=UTF-8 -Xms=512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -verbose:gc -Xloggc:${CATALINA_HOME}/logs/gc.logdate +%Y-%m-%d-%H-%M

-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -noclassgc”

Windows修改catalina.bat檔案
set JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m

Total memory:java虛擬機器正在使用的已經從系統那裡挖到的記憶體大小,也就是java虛擬機器這個程序當時所佔用的所有 記憶體。如果在執行java的時候沒有新增-Xms引數,那麼,在java程式執行的過程的,記憶體總是慢慢的從作業系統那裡挖的,基本上是用多少挖多少,直 到挖到maxMemory()為止,所以totalMemory()是慢慢增大的。如果用了-Xms引數,程式在啟動的時候就會無條件的從作業系統中挖 -Xms後面定義的記憶體數,然後在這些記憶體用的差不多的時候,再去挖。
Max memory:java虛擬機器能夠從作業系統那裡挖到最大記憶體大小,如果在執行java程式的時候,沒有新增-Xmx引數,那麼預設就是64兆,這是java虛擬機器預設情況下能 從作業系統那裡挖到的最大的記憶體。如果添加了-Xmx引數,將以這個引數後面的值為準,建議設為記憶體的一半。
Free memory:剛才講到如果在執行java的時候沒有新增-Xms引數,那麼,在java程式執行的過程的,記憶體總是慢慢的從作業系統那裡挖的,基本上是用多少挖多少,這些挖過來而又沒有用上的記憶體,實際上就是 freeMemory,所以freeMemory的值一般情況下都是很小的,但是如果你在執行java程式的時候使用了-Xms,這個時候因為程式在啟動的時候就會無條件的從作業系統中挖-Xms後面定義的記憶體數,這個時候,挖過來的記憶體可能大部分沒用上,所以這個時候freeMemory可能會有些大。

JVM記憶體設定方法:
Linux系統直接編輯TOMCAT_HOME/bin/catalina.sh檔案,如上檔案所示,不再多說。
1、Windows系統下,安裝版的tomcat可以啟動”Configure Tomcat”——”Java”選項配置.

另外安裝JDK的時候若作業系統是64位的,安裝的JDK也必須是64位,不然沒法啟動。Tomcat安裝時指定JDK_HOME路徑就行了。

2、綠色版本的tomcat, 直接修改catalina.bat檔案,和linux系統不一樣,windows系統下環境變數的設定以set命令開頭,linux系統的shell執行時是會export環境變數的。
set JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m
引數說明:

-server:一定要作為第一個引數,在多個CPU時效能佳
-Xms:初始Heap大小,使用的最小記憶體,cpu效能高時此值應設的大一些
-Xmx:java heap最大值,使用的最大記憶體
-XX:PermSize:設定記憶體的永久儲存區域
-XX:MaxPermSize:設定最大記憶體的永久儲存區域
-XX:MaxNewSize:
+XX:AggressiveHeap 會使得 Xms沒有意義。這個引數讓jvm忽略Xmx引數,瘋狂地吃完一個G實體記憶體,再吃盡一個G的swap。
-Xss:每個執行緒的Stack大小
-verbose:gc 現實垃圾收集資訊
-Xloggc:gc.log 指定垃圾收集日誌檔案
-Xmn:young generation的heap大小,一般設定為Xmx的3、4分之一
-XX:+UseParNewGC :縮短minor收集的時間
-XX:+UseConcMarkSweepGC :縮短major收集的時間 提示:此選項在Heap Size 比較大而且Major收集時間較長的情況下使用更合適。

tomcat 的jvm 記憶體溢位問題的解決

1、首先是:java.lang.OutOfMemoryError: Java heap space
解釋:

JVM堆的設定是指java程式執行過程中JVM可以調配使用的記憶體空間的設定.JVM在啟動的時候會自動設定Heap
size的值,其初始空間(即-Xms)是實體記憶體的1/64,最大空間(-Xmx)是實體記憶體的1/4。可以利用JVM提供的-Xmn -Xms
-Xmx等選項可進行設定。Heap size 的大小是Young Generation 和Tenured Generaion 之和。 提示:在JVM中如果98%的時間是用於GC且可用的Heap size 不足2%的時候將丟擲此異常資訊。 提示:Heap Size
最大不要超過可用實體記憶體的80%,一般的要將-Xms和-Xmx選項設定為相同,而-Xmn為1/4的-Xmx值。

解決方法:

手動設定Heap size 修改TOMCAT_HOME/bin/catalina.bat,在“echo ”Using
CATALINA_BASE: $CATALINA_BASE””上面加入以下行: set JAVA_OPTS=%JAVA_OPTS%
-server -Xms800m -Xmx800m -XX:MaxNewSize=256m

2、其次是:java.lang.OutOfMemoryError: PermGen space
原因:

PermGen space的全稱是Permanent Generation
space,是指記憶體的永久儲存區域,這塊記憶體主要是被JVM存放Class和Meta資訊的,Class在被Loader時就會被放到PermGen
space中,它和存放類例項(Instance)的Heap區域不同,GC(Garbage
Collection)不會在主程式執行期對PermGen
space進行清理,所以如果你的應用中有很CLASS的話,就很可能出現PermGen
space錯誤,這種錯誤常見在web伺服器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar,
其大小超過了jvm預設的大小(4M)那麼就會產生此錯誤資訊了。

解決方法:

手動設定MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.bat(Linux下為catalina.sh),在“echo ”Using
CATALINA_BASE: $CATALINA_BASE””上面加入以下行: set JAVA_OPTS=%JAVA_OPTS%
-server -XX:PermSize=128M -XX:MaxPermSize=512m

相關推薦

jvm配置記憶體溢位解決方法

JAVA_OPTS引數說明與配置 最近手頭的專案報記憶體溢位錯誤,記憶體溢位(Out Of Memofy) 錯誤資訊:Java.lang.OutOfMemoryError: Java heap space 測試環境

JMeter學習二十八記憶體溢位解決方法

使用jmeter進行壓力測試時遇到一段時間後報記憶體溢位outfmenmory錯誤,導致jmeter卡死了,先嚐試在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms2048m -Xmn256m -XX:PermSize=128m -Xss256k",但結果執行時間增加了,

jmeter記憶體溢位解決方法OutOfMemoryError:記憶體溢位

  在執行壓力測試時候,有時候會遇到OutOfMemoryError這樣的異常;JMeter是一個純Java開發的工具,記憶體是由java虛擬機器JVM管理;如果出現了記憶體溢位的問題,可以通過調整JVM記憶體相關的引數進行優化。      具體過程如下:

Mac osx 10.10系統下MySQL的安裝安裝失敗解決方法

首先,官網下載MySQL,我下的版本是mysql-5.6.21-osx10.9-x86_64.dmg http://dev.mysql.com/downloads/mysql/ (來份度盤嗎親?連結: http://pan.baidu.com/s/1i31iz1F 密碼: uyd

小程式使用selectComponent獲取自定義元件時,返回null分析和解決方法

一、原因:        元件所在的佈局層級不同,該元件被建立的時間會有所不同,意味著ready(元件生命週期函式,元件佈局完成後執行)被呼叫的時間有所不同。由於元件建立完成的時間晚於頁面建立完成,即元件生命週期函式的ready被執行的時間晚於頁面生命週期

Java web之埠號被佔用兩種解決方法

當用eclipse開發Java web系統時,經常出現 8080埠被佔用,(windows) 解決辦法: 《一》                              1、windows==》輸入cmd,回車                            

kettle記憶體溢位解決方法

現在做的一個專案ETL採用KETTLE,通過Perl指令碼進行分天表、月表及年表的建立,並修改KETTLE建立的抽取任務模板。即使這樣在處理天表表近百萬資料量時,Kettle也會有時發生記憶體溢位現象,導致抽取任務失敗。今天發現了一哥們BLOG中的解決辦法,特分享。 以Spoon.bat為例,其他元件

jvm配置據說是阿里的

-XX:+CMSClassUnloadingEnabled 對永久代進行垃圾回收,Hotspot虛擬機器中,永久代即方法區 -XX:+UseParNewGC 新生代使用並行垃圾收集器 -XX:ParallelGCThreads=4 並行垃圾收集器的執行緒數,即同時多少個執行

[ Tomcat ] Eclispe下 Tomcat記憶體溢位解決方法

修改1: 在Eclipse中下面Servers雙擊Tomcat Server... 然後點選General InformAtion 下的Open launch configuration; 會彈出Edit Configuration,然後在選中Atg

Mybatis generator反向生成錯誤及解決方法

1、開啟pom.xml檔案 (1)在dependencies中加入以下dependency,即匯入反向生成所需要的jar包 <dependency> <groupId>org.mybatis.generator<

Android下的,OOM記憶體溢位解決方法\AsyncTask

在Android平臺上面,應用程式OOM異常永遠都是值得關注的問題。通常這一塊也是程式這中的重點之一。這下我就如何解決OOM作一點簡單的介紹。     首先,OOM就是記憶體溢位,即Out Of Memory。也就是說記憶體佔有量超過了VM所分配的最大。     怎麼解決

Mysql遍歷大表Mysql大量資料讀取記憶體溢位解決方法

mysql jdbc預設把select的所有結果全部取回,放到記憶體中,如果是要遍歷很大的表,則可能把記憶體撐爆。 一種辦法是:用limit,offset,但這樣你會發現取資料的越來越慢,原因是設定了offset,mysql需要將讀取位置移動到offset的位置,隨著offset增大,取資料也越來越慢

JVM學習筆記】jvm初體驗-記憶體溢位問題分析及解決方案

####1、開始 建立Main類和Demo類,在Main類的main方法中建立List,並向List中無限建立Demo物件,造成記憶體溢位, 並輸出記憶體溢位錯誤檔案在專案目錄下,為了使等待時間減小,設定執行堆記憶體大小。 ####2、建立Demo類 package com.ch

nodejs備忘總結(一) -- node和express安裝與配置,新建簡單專案附安裝配置過程中遇到問題的解決方法

安裝node 本文以安裝node_v8.9.0為例(win10環境),下載node-v8.9.0-x64.msi外掛 下載後,安裝,安裝目錄預設為C:\Program Files\nodejs 配置環境變數,系統變數->path,新增“C:\Program Files\nodejs\”

Win10專業版使用Hyper-V安裝Ubuntu解決系統記憶體不足的方法

最近需要學習Linux,然後我又是使用的win10專業版,自帶Hyper-V的功能,即Windows開發的一種虛擬機器技術。由於電腦儲存不夠大,記憶體4G又比較小,所以我就考慮使用win10自帶的Hyp

JMeter“監視器結果”配置監視器結果無資料的解決方法

轉自:http://blog.csdn.net/catoop/article/details/8055947 從JMeter的幫助文件可以看出它僅支援TOMCAT5以上版本,詳情見:http://jakarta.apache.org/jmeter/usermanual/bu

UE4安卓打包配置大陸內網路整頓後,Android打包時AndroidWorks無法使用的解決方法

       由於國內進行了網路整頓,UE4官網上用CodeWorksforAndroid下載安卓打包工具配置的方法已經不能使用了,開了VPN也連結不上。這使得用UE4打包配置安卓遊戲變得非常麻煩,博主搗鼓了好幾天才打包成功,深感在中國學習UE4的艱難與曲折,UE4在國內發展

Android 記憶體溢位解決方案 整理

<span style="font-size:14px;">在最近做的工程中發現載入的圖片太多或圖片過大時經常出現OOM問題,找網上資料也提供了很多方法,但自己感覺有點亂,特此,今天在不同型號的三款安卓手機上做了測試,因為有效果也有結果,今天小馬就做個詳細的總結

應用jacob元件造成的記憶體溢位解決方案java.lang.OutOfMemoryError: Java heap space

轉自(http://www.myexception.cn/ruby-rails/903889.html) 使用jacob元件造成的記憶體溢位解決方案(java.lang.OutOfMemoryError: Java heap space) 都說記憶體洩漏是C++的通病,記

Redmine郵件配置報錯502解決方法Reason: Error reading from remote server另一種原因

很久很久以前,稀裡糊塗配置成功,很久很久以後配置還是不會,然後百度到csdn看看各家文字,然後還是不成功,提示如下: Proxy Error The proxy server received an invalid response from an upstream se