本篇博客主要記錄博主在使用springboot時,相關的操做:java
(1)編譯打包、執行springboot項目linux
本地:mvn clean package -U --settings D:\devsoft\apache-maven-3.5.3\conf\huxs1settings.xml -Dmaven.test.skip=true -Pdevspring
服務器:mvn clean package -U -Dmaven.test.skip=true -Ptestapache
(2)運行springboot項目bootstrap
java -jar xxx.jarspringboot
//pinpoint-agent監控的方式啓動springboot項目
nohup java -Xms6144m -Xmx6144m -XX:PermSize=1024m -XX:MaxPermSize=1024m -javaagent:/home/xpp/apm/pinpoint-agent/pinpoint-bootstrap.jar -Dpinpoint.agentId=PP_123.xx.xx.115 -Dpinpoint.applicationName=crs_bb_bb-xxx-data -jar xxx.jar 服務器
(3)SpringBoot開啓遠程debug與遠程監控
a.開啓遠程debug併發
nohup java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=3286,suspend=n -jar wtp-service-pay-0.0.1-SNAPSHOT.jar --spring.profiles.active=test > wtp-service-pay.log 2>&1 &
b.開啓jvisualVM遠程監控app
nohup java \
-Djava.rmi.server.hostname=12x.xx.xx.112 \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9999 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.rmi.port=9999 \
-jar wtp-service-pay-0.0.1-SNAPSHOT.jar --spring.profiles.active=test > wtp-service-pay.log 2>&socket
//同時也能夠使用
<!-- JMX monitor -->
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
(4)生產調優(8G內存,64位linux,JDK1.8)--壓測調優結果
nohup java \
-Xms6144m -Xmx6144m -Xmn2048M -XX:OldSize=4096M -Xss1024k \
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m \
-XX:+UseConcMarkSweepGC \
-XX:+UseParNewGC \
-XX:+UseCMSCompactAtFullCollection \
-XX:CMSFullGCsBeforeCompaction=10 \
-XX:+CMSClassUnloadingEnabled \
-XX:+CMSParallelRemarkEnabled \
-XX:+UseCMSInitiatingOccupancyOnly \
-XX:CMSInitiatingOccupancyFraction=70 \
-Djava.rmi.server.hostname=12x.xx.xx.112 \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9999 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.rmi.port=9999 \
-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=121.xx.xx.112 :8000,suspend=n -jar $JAR_NAME --spring.profiles.active=test >/home/app/logs/xxxxsearch-catli.out 2>&1 &
最後關於JVM說明:
-XX:PermSize=1024M 永久代大小
-XX:MaxPermSize=1024M -Xms4096M -Xmx4096M MaxPermSize爲最大永久代大小,
-Xmn1024M -XX:SurvivorRatio=8
-XX:+DisableExplicitGC 關閉程序主動調用gc
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+UseCMSCompactAtFullCollection 全量垃圾回收後,是否進行內存整理
-XX:CMSFullGCsBeforeCompaction=10 多少次全量垃圾回收與後進行一次內存整理
-XX:+CMSClassUnloadingEnabled 是否容許(永久代)清理
-XX:+CMSParallelRemarkEnabled 下降標記停頓
-XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSInitiatingOccupancyOnly指定HotSpot VM老是使用-XX:CMSInitiatingOccupancyFraction的值做爲old的空間使用率限制來啓動CMS垃圾回收。若是沒有使用-XX:+UseCMSInitiatingOccupancyOnly,那麼HotSpot VM只是利用這個值來啓動第一次CMS垃圾回收,後面都是使用HotSpot VM自動計算出來的值。
-XX:CMSInitiatingOccupancyFraction=70 這個值指定了CMS垃圾回收時old代的空間佔用率該是什麼值。舉例說明,若是你但願old代佔用率是65%的時候,啓動CMS垃圾回收,你能夠設置-XX:CMSInitiatingOccupancyFraction=65。
-XX:TargetSurvivorRatio=90 設定survivor區的目標使用率。默認50,即survivor區對象目標使用率爲50%。
-XX:MaxTenuringThreshold=20 晉升年齡最大閾值,默認15。在新生代中對象存活次數(通過YGC的次數)後仍然存活,就會晉升到老年代。每通過一次YGC,年齡加1,當survivor區的對象年齡達到TenuringThreshold時,表示該對象是長存活對象,就會直接晉升到老年代。
(5)調優中監控命令(此處未完待續)
a.命令行:jps、 jstat、jinfo、jmap、jhat、jstack
b.jdk工具(bin目錄):jvisualvm.exe、jconsole.exe
(6)常見配置彙總
堆設置
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:設置年輕代大小
-XX:NewRatio=n:設置年輕代和年老代的比值。如:爲3,表示年輕代與年老代比值爲1:3,年輕代佔整個年輕代年老代和的1/4
-XX:SurvivorRatio=n:年輕代中Eden區與兩個Survivor區的比值。注意Survivor區有兩個。如:3,表示Eden:Survivor=3:2,一個Survivor區佔整個年輕代的1/5
-XX:MaxPermSize=n:設置持久代大小
收集器設置
-XX:+UseSerialGC:設置串行收集器
-XX:+UseParallelGC:設置並行收集器
-XX:+UseParalledlOldGC:設置並行年老代收集器
-XX:+UseConcMarkSweepGC:設置併發收集器
垃圾回收統計信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
並行收集器設置
-XX:ParallelGCThreads=n:設置並行收集器收集時使用的CPU數。並行收集線程數。
-XX:MaxGCPauseMillis=n:設置並行收集最大暫停時間
-XX:GCTimeRatio=n:設置垃圾回收時間佔程序運行時間的百分比。公式爲1/(1+n)
併發收集器設置 -XX:+CMSIncrementalMode:設置爲增量模式。適用於單CPU狀況。 -XX:ParallelGCThreads=n:設置併發收集器年輕代收集方式爲並行收集時,使用的CPU數。並行收集線程數