專業(yè)網(wǎng)站建設(shè)西安seo網(wǎng)站排名
JVM調(diào)優(yōu)-VisualVm
- VisualVm/ Jconsule遠(yuǎn)程連接
- 第一種方式
- 第二種方式:
- java 11開啟遠(yuǎn)程GC連接
- 如果還連不上考慮防火墻攔截了端口firewall-cmd --list-all,查看一下并暴露對(duì)應(yīng)端口
- 連接配置
- VisualVm界面簡(jiǎn)介
- 采集GC信息的一些命令
- 垃圾回收器切換
VisualVm/ Jconsule遠(yuǎn)程連接
引用自:遠(yuǎn)程連接采錄
首先了解兩個(gè)概念:
Java RMI:Java遠(yuǎn)程方法調(diào)用,即Java RMI(Java Remote Method Invocation)
Java JMX: Java管理擴(kuò)展,即Java JMX(Java Management Extensions)
參數(shù)解析:
-Djava.rmi.server.hostname=遠(yuǎn)程服務(wù)器ip //配置遠(yuǎn)程調(diào)用主機(jī)地址,即jar包運(yùn)行所在系統(tǒng)的IP地址,不配置則默認(rèn)使用hosts文件中的值
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=10034 //指定JMX的運(yùn)行端口,jconsole需要對(duì)接的既是該端口
-Dcom.sun.management.jmxremote.ssl=false // 是否允許使用ssl方式接入
-Dcom.sun.management.jmxremote.authenticate=false //是否需要進(jìn)行身份驗(yàn)證
-Dcom.sun.management.jmxremote.rmi.port=10034-Dcom.sun.management.jmxremote.local.only=true
第一種方式
java -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.rmi.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Xms1024m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:+UseParallelOldGC -XX:+UseParallelGC -XX:+UseAdaptiveSizePolicy -jar xxx.jar
第二種方式:
首先在服務(wù)器終端設(shè)置環(huán)境變量,主要是便于每次啟動(dòng)項(xiàng)目時(shí)使用:
export JAVA_OPTS='-Djava.rmi.server.hostname=你的服務(wù)器地址(公網(wǎng)ip) -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.rmi.port=8888 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false'
參數(shù)和上面一樣,就不解釋了
導(dǎo)入環(huán)境變量后,用命令重新加載配置文件:source /etc/profile;可以直接將export命令寫入profile文件最后,在加載文件便可以保持該環(huán)境變量一直生效。
切換到你服務(wù)器的jvm配置路徑:/usr/lib/jvm/…
拷貝jmxremote.password.template文件到j(luò)mxremote.pwssword:
添加寫入權(quán)限:
然后對(duì)文件進(jìn)行修改:vim jmxremote.password
取消最后兩行的注釋,保存退出。
java 11開啟遠(yuǎn)程GC連接
vim jstatd-all.policy
配置 jstatd-all.policy:
grant codebase "jrt:/jdk.jstatd" {permission java.security.AllPermission;
};
grant codebase "jrt:/jdk.internal.jvmstat" {permission java.security.AllPermission;
};
給jstatd.all.policy文件 執(zhí)行權(quán)限:chmod 777 jstatd.all.policy.
運(yùn)行命令:./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.249參數(shù)說明:
-J-Djava.security.policy=jstatd.all.policy =號(hào)后面的是文件的絕對(duì)路徑;
-J-Djava.rmi.server.logCalls=true 打開日志,如果客戶端有連接過來的請(qǐng)求,可以監(jiān)控到,便于排錯(cuò);
-J-Djava.rmi.server.hostname=192.168.1.xxx 指明本機(jī) hostname 對(duì)應(yīng)的本機(jī)地址,確保該地址可以給客戶機(jī)訪問。因?yàn)橛械姆?wù)器 hostname 對(duì)應(yīng)的 ip 不一定是外網(wǎng)能連上的,最好在這里直接明確指定;
-p 9999 指定服務(wù)的端口號(hào),默認(rèn)是1099??蛇x參數(shù)。
如果還連不上考慮防火墻攔截了端口firewall-cmd --list-all,查看一下并暴露對(duì)應(yīng)端口
[root@localhost bin]# firewall-cmd --zone=public --add-port=8889/tcp --permanent
success
[root@localhost bin]# systemctl restart firewalld
[root@localhost bin]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: eth0sources: services: dhcpv6-client sshports: 22/tcp 21/tcp 9092/tcp 3306/tcp 443/tcp 80/tcp 9093/tcp 6379/tcp 9200/tcp 9300/tcp 9094/tcp 8443/tcp 9527/tcp 9091/tcp 9530/tcp 8888/tcp 15672/tcp 5672/tcp 1099/tcp 23/tcp 8889/tcpprotocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: [root@localhost bin]#
netstat -anlp|grep 8888 // 查看端口是否啟動(dòng)
連接配置
啟動(dòng)服務(wù),查看對(duì)應(yīng)的端口是否處于監(jiān)聽狀態(tài)
netstat -apn | grep java 查看監(jiān)聽的端口
VisualVm界面簡(jiǎn)介
VisualVM使用
采集GC信息的一些命令
- JConsole, jstat, jinfo, jstack 和 jmap 這些獨(dú)立的工具,是 Java VisualVM 的一部分。Java VisualVM 通過結(jié)合使用這些工具來獲取 JVM 的數(shù)據(jù)信息,進(jìn)行重新組織,最后以圖像的形式進(jìn)行展示。另外,用戶可以通過插件擴(kuò)展 Java VisualVM 的功能。
jps 虛擬機(jī)進(jìn)程情況jps -l:輸出進(jìn)程號(hào)和jar包名稱
jstat 虛擬機(jī)運(yùn)行數(shù)據(jù)jstat -gc pid:監(jiān)視堆的情況,容量、已用空間、GC時(shí)長(zhǎng)等jstat -gcutil pid:和-gc差不多,但主要關(guān)注已使用空間占總空間的比例可以后綴時(shí)間如:jstatd -gcutil pid 5000,則每5S輸出一次
jmap 內(nèi)存映射jmap -heap pid:展示堆詳細(xì)信息,用了哪種回收器、參數(shù)配置、分代情況等jmap -dump:format=b,file=xxx.hprof pid:生成當(dāng)前時(shí)刻堆快照
jstack 堆棧跟蹤jstack pid:生成當(dāng)前時(shí)刻線程快照 threaddump
可以將信息輸出到指定文件如:jmap -hep pid >/xxx/jmapHeap.txt
垃圾回收器切換
Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)
啟用CMS: -XX:+UseConcMarkSweepGC
Parallel Old啟用:-XX:+UseParallelOldGC -XX:+UseAdaptiveSizePolicy
+UseParallelGC = 新生代ParallelScavenge + 老年代ParallelOld
+UseParallelOldGC = 同上
-UseParallelOldGC = 新生代ParallelScavenge + 老年代SerialOld
改用并行垃圾回收器
-Xms1024m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m
-XX:+UseParallelOldGC -XX:+UseParallelGC -XX:+UseAdaptiveSizePolicy