weblogic jvm內(nèi)存查看的分類
調(diào)整weblogic jvm內(nèi)存參數(shù)大小,其中的原理是什么?為此學(xué)習(xí)啦小編為大家整理推薦了查到的相關(guān)信息,希望大家喜歡。
weblogic jvm內(nèi)存
調(diào)整 jvm參數(shù) A:JVM啟動(dòng)參數(shù)共分為三類:
其一是標(biāo)準(zhǔn)參數(shù)(-),所有的JVM實(shí)現(xiàn)都必須實(shí)現(xiàn)這些參數(shù)的功能,而且向后兼容;
其二是非標(biāo)準(zhǔn)參數(shù)(-X),指的是JVM底層的一些配置參數(shù),這些參數(shù)在一般開發(fā)中默認(rèn)即可,不需要任何配置。但是在生產(chǎn)環(huán)境中,并不保證所有jvm實(shí)現(xiàn)都滿足,所以為了提高性能,往往需要調(diào)整這些參數(shù),以求系統(tǒng)達(dá)到最佳性能。另外這些參數(shù)不保證向后兼容,也即是說“如有變更,恕不在后續(xù)版本的JDK通知”(這是官網(wǎng)上的原話);
其三是非Stable參數(shù)(-XX),這類參數(shù)在jvm中是不穩(wěn)定的,不適合日常使用的,后續(xù)也是可能會(huì)在沒有通知的情況下就直接取消了,需要慎重使用。
B:而JVM 內(nèi)存又可分為三個(gè)主要的域 :
新域、舊域以及永久域。JVM生成的所有新對(duì)象放在新域中。一旦對(duì)象經(jīng)歷了一定數(shù)量的垃圾收集循環(huán)后,便進(jìn)入舊域。而在永久域中是用來存儲(chǔ)JVM自己的反射對(duì)象的,如class和method對(duì)象,而且GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)永久域進(jìn)行清理。其中新域和舊域?qū)儆诙?,永久域是一個(gè)獨(dú)立域并且不認(rèn)為是堆的一部分。
C:各主要參數(shù)的作用如下 :
-Xms:設(shè)置jvm內(nèi)存的初始大小
-Xmx:設(shè)置jvm內(nèi)存的最大值
-Xmn:設(shè)置新域的大小(這個(gè)似乎只對(duì) jdk1.4來說是有效的,后來就廢棄了)
-Xss:設(shè)置每個(gè)線程的堆棧大小(也就是說,在相同物理內(nèi)存下,減小這個(gè)值能生成更多的線程)
-XX:NewRatio :設(shè)置新域與舊域之比,如-XX:NewRatio = 4就表示新域與舊域之比為1:4
-XX:NewSize:設(shè)置新域的初始值
-XX:MaxNewSize :設(shè)置新域的最大值
-XX:PermSize:設(shè)置永久域的初始值
-XX:MaxPermSize:設(shè)置永久域的最大值
-XX:SurvivorRatio=n:設(shè)置新域中Eden區(qū)與兩個(gè)Survivor區(qū)的比值。(Eden區(qū)主要是用來存放新生的對(duì)象,而兩個(gè) Survivor區(qū)則用來存放每次垃圾回收后存活下來的對(duì)象)
D:常見的錯(cuò)誤 :
java.lang.OutOfMemoryError相信很多開發(fā)人員都用到過,這個(gè)主要就是JVM參數(shù)沒有配好引起的,但是這種錯(cuò)誤又分兩種:java.lang.OutOfMemoryError: Java heap space和java.lang.OutOfMemoryError: PermGen space,其中前者是有關(guān)堆內(nèi)存的內(nèi)存溢出,可以同過配置-Xms和-Xmx參數(shù)來設(shè)置,而后者是有關(guān)永久域的內(nèi)存溢出,可以通過配置 -XX:MaxPermSize來設(shè)置。
下面是個(gè)例子,請(qǐng)根據(jù)實(shí)際情況進(jìn)行修改,修改run.conf文件中的如下內(nèi)容:
JAVA_OPTS="-Xms256m -Xmx2048m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -Djboss.platform.mbeanserver"
日志文件設(shè)置:
jbossserverdefaultlog
若需要修改JBoss默認(rèn)的log4j設(shè)置,可修改JBoss安裝目錄"serverdefaultconf下的jboss-log4j.xml文件,在該文件中可以看到,log4j的日志輸出在JBoss安裝目錄"server
如果使用log4j日志框架,將配置文件放在工程目錄下的話容易引起與jboss日志配置的沖突,一個(gè)比較好的方式就是將日志配置到j(luò)boss的 jboss-log4j.xml文件中,文件的目錄是($JBOSS)/server/default/conf。在配置文件中添加以下內(nèi)容:
<appender name="myLog" class="org.apache.log4j.DailyRollingFileAppender">
<!--設(shè)置通道名稱是:file,輸出方式DailyRollingFileAppender-->
<param name="File" value="${jboss.server.home.dir}/log/Mqs.log"/>
<!--日志文件路徑和文件名稱 -->
<param name="Append" value="true"/>
<!-- 設(shè)置是否在重新啟動(dòng)服務(wù)時(shí),在原有日志的基礎(chǔ)添加新日志 -->
<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<!-- Rollover at the top of each hour
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
-->
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message/n -->
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message/n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
</appender>
<logger name="com.all" additivity="false" >
<level value="INFO" />
<appender-ref ref="myLog"/>
</logger>
在web工程中使用日志的時(shí)候就可以這樣寫
Logger log = Logger.getLogger("com.all");
log.debug("test");
其中"com.all"與<logger name="com.all" additivity="false" > 中的name屬性值對(duì)應(yīng)。additivity屬性非常重要,它表示是否繼承root配置的輸出通道,默認(rèn)配置是true,如果不將其設(shè)為false的話會(huì)導(dǎo)致日志重復(fù)輸出到控制臺(tái)與jboss的日志文件中。