日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

JVM优化(上)

發(fā)布時間:2024/3/24 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM优化(上) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

02、我們?yōu)槭裁匆獙vm做優(yōu)化:

1.標(biāo)準(zhǔn)參數(shù):
-help
-version?

2. -X參數(shù)(非標(biāo))

-Xint
-Xcomp

-Xint : interpreted
-Xcomp: complied??有卡頓,先編譯,一次編譯,之后不用編譯,運(yùn)行效率高
-Xmixed: mixed 默認(rèn)

3.-XX參數(shù)(非標(biāo),使用率較高)

-XX:newSize
-XX:UseSerialGC

4.

-Xms
設(shè)置jvm堆內(nèi)存初始大小
-Xms512m ==> -XX:InitialHeapSize=512m

-Xmx
設(shè)置jvm堆內(nèi)存最大大小
-Xmx2048m ==> -XX:MaxHeapSize=2048m
eg.java -Xms64m -Xmx128m TestJVM

5.

jps -l

jinfo -flags 4086 查詢該進(jìn)程所有參數(shù)
eg.?
[root@node01 bin]# jinfo -flags 4086
Attaching to process ID 4086, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.141-b15
Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=48234496 -XX:MaxHeapSize=752877568 -XX:MaxNewSize=250609664 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=15728640 -XX:OldSize=32505856 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC?
Command line: -Djava.util.logging.config.file=/export/servers/jvm/apache-tomcat-7.0.57/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/export/servers/jvm/apache-tomcat-7.0.57/endorsed -Dcatalina.base=/export/servers/jvm/apache-tomcat-7.0.57 -Dcatalina.home=/export/servers/jvm/apache-tomcat-7.0.57 -Djava.io.tmpdir=/export/servers/jvm/apache-tomcat-7.0.57/temp

jinfo -flag MaxHeapSize 4086 查詢某個參數(shù)MaxHeapSize

?

04、JVM運(yùn)行參數(shù)之-server與-client:

java -server -showversion TestJVM
初始堆空間大,并行垃圾回收器;
java -client -showversion TestJVM
初始堆空間小,串行垃圾回收器

?

06、JVM運(yùn)行參數(shù)之-XX參數(shù):

java -showversion -XX:+DisableExplicitGC TestJVM

java -showversion -XX:NewRatio=1 TestJVM

?

09、JVM內(nèi)存模型之jdk1.7與jdk1.8內(nèi)存模型(很重要):

jvm 1.7 年輕代 老年代 永久代

jvm 1.8 年輕代 老年代 取消了永久代,為了和JRocket VM融合。使用元空間metaspace代替老年代,元空間不在jvm中,而是在本地內(nèi)存中。

?

10、JVM內(nèi)存模型之jstat命令的使用:

jstat命令可以查看堆內(nèi)存各部分的使用量,以及加載類的數(shù)量。命令的格式如下:
jstat [-命令選項(xiàng)] [vmid] [間隔時間/毫秒] [查詢次數(shù)]
eg.
[root@node01~]#jps
7080 Jps
6219 Bootstrap

1.class加載統(tǒng)計(jì)
[root@node01?~]# jstat ‐class 6219
Loaded??Bytes??Unloaded??Bytes?????Time???
??3273??7122.3????????0?????0.0???????3.98
2.編譯統(tǒng)計(jì)
jstat -compiler 6219
3.垃圾回收統(tǒng)計(jì)
jstat -gc 4086 1000 5

?

11、jmap命令的使用:

jmap -heap 4086

jmap -histo 4086 | more

jmap -histo:live 4086 | more

將內(nèi)存使用情況dump到文件中:
jmap -dump:format=b,file=/export/servers/jvm/dump.dat 4086

?

13、通過MAT工具對dump文件進(jìn)行分析:

1.通過jhat對dump文件進(jìn)行分析:
jhat -port 9999 /export/servers/jvm/dump.dat

OQL:?
eg.
select s from java.lang.String s where s.value.length >= 100

2.通過MAT工具對dump文件進(jìn)行分析
下載mat,解壓到本地物理機(jī),然后執(zhí)行MemoryAnalyzer.exe

shallow heap:對象本身占用內(nèi)存大小,不包括它引用的對象 retained heap:當(dāng)前對象大小+當(dāng)前對象可直接或間接引用到的對象的大小總和.

?

14、內(nèi)存溢出的定位與分析:

利用mat測試內(nèi)存溢出時,必須生成一個文件java_pid12644.hprof用于分析測試,為此,需要在run/debug configuration中添加運(yùn)行參數(shù):
-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

?

16、死鎖問題:

jstack:
作用:查看jvm中的線程執(zhí)行情況,比如,發(fā)現(xiàn)服務(wù)器的CPU的負(fù)載突然增高了、出現(xiàn)了死鎖、死循環(huán)等。
將正在運(yùn)行的jvm的線程情況進(jìn)行快照,并且打印出來。

jstack 4086 查看tomcat的所有線程狀態(tài)

6種狀態(tài):
new runnable blocked waiting timed_waiting terminated

實(shí)戰(zhàn) 死鎖:
jstack 8569

Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x00007fd2bc0062c8 (object 0x00000000f115d790, a java.lang.Object),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x00007fd2bc004e28 (object 0x00000000f115d7a0, a java.lang.Object),
which is held by "Thread-1"

Java stack information for the threads listed above:
===================================================
"Thread-1":
at TestDeadLock$Thread2.run(TestDeadLock.java:41)
- waiting to lock <0x00000000f115d790> (a java.lang.Object)
- locked <0x00000000f115d7a0> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:748)
"Thread-0":
at TestDeadLock$Thread1.run(TestDeadLock.java:23)
- waiting to lock <0x00000000f115d7a0> (a java.lang.Object)
- locked <0x00000000f115d790> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:748)

Found 1 deadlock.

?

18、VirsualVM工具的使用(監(jiān)控遠(yuǎn)程進(jìn)程):

進(jìn)入jdk安裝目錄/bin
打開jvisualvm.exe

遠(yuǎn)程監(jiān)控的jvm:JMX
步驟:
1.在遠(yuǎn)程tomcat中添加參數(shù);
JAVA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false"

然后重啟tomcat,并打印日志:
./startup.sh && tail -f ../logs/catalina.out

遠(yuǎn)程--添加遠(yuǎn)程主機(jī),添加JMX連接。

轉(zhuǎn)載于:https://www.cnblogs.com/mediocreWorld/p/10934410.html

總結(jié)

以上是生活随笔為你收集整理的JVM优化(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。