有效方法的小企業(yè)網(wǎng)站建設(shè)百度推廣一天費(fèi)用200
問(wèn)題描述
最近搞了一臺(tái)1年的阿里云服務(wù)器,安裝了一下常用的MySQL,Redis,rabbitmq,minio,然后有安裝了一下nacos,結(jié)果一啟動(dòng)nacos內(nèi)存占用就很高,就比較限制我繼續(xù)安裝其他鏡像或者啟動(dòng)別的服務(wù)。
啟動(dòng)nacos之前:
啟動(dòng)nacos之后
問(wèn)題分析
nacos啟動(dòng)參數(shù)初識(shí)
nacos本質(zhì)就是啟動(dòng)了一個(gè)jar包,這里有它運(yùn)行的一些參數(shù)
/usr/local/software/jdk/jdk1.8.0_371/bin/
java
-Djava.ext.dirs=/usr/local/software/jdk/jdk1.8.0_371/jre/lib/ext:/usr/local/software/jdk/jdk1.8.0_371/lib/ext
-Xms512m -Xmx512m -Xmn256m
-Dnacos.standalone=true
-Dnacos.member.list=
-Xloggc:/usr/local/software/ali/nacos/8848/nacos/logs/nacos_gc.log -verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=10
-XX:GCLogFileSize=100M
-Dloader.path=/usr/local/software/ali/nacos/8848/nacos/plugins/health,/usr/local/software/ali/nacos/8848/nacos/plugins/cmdb,/usr/local/software/ali/nacos/8848/nacos/plugins/selector
-Dnacos.home=/usr/local/software/ali/nacos/8848/nacos
-jar /usr/local/software/ali/nacos/8848/nacos/target/nacos-server.jar
--spring.config.additional-location=file:/usr/local/software/ali/nacos/8848/nacos/conf/
--logging.config=/usr/local/software/ali/nacos/8848/nacos/conf/nacos-logback.xml
--server.max-http-header-size=524288
這些參數(shù)是啥?
java -X
[root@iZuf61wy7p4tbr7lmwv18iZ ~]# java -X-Xmixed 混合模式執(zhí)行(默認(rèn))-Xint 僅解釋模式執(zhí)行-Xbootclasspath:<用 : 分隔的目錄和 zip/jar 文件>設(shè)置引導(dǎo)類(lèi)和資源的搜索路徑-Xbootclasspath/a:<用 : 分隔的目錄和 zip/jar 文件>附加在引導(dǎo)類(lèi)路徑末尾-Xbootclasspath/p:<用 : 分隔的目錄和 zip/jar 文件>置于引導(dǎo)類(lèi)路徑之前-Xdiag 顯示附加診斷消息-Xnoclassgc 禁用類(lèi)垃圾收集-Xincgc 啟用增量垃圾收集-Xloggc:<file> 將 GC 狀態(tài)記錄在文件中(帶時(shí)間戳)-Xbatch 禁用后臺(tái)編譯-Xms<size> 設(shè)置初始 Java 堆大小-Xmx<size> 設(shè)置最大 Java 堆大小-Xss<size> 設(shè)置 Java 線程堆棧大小-Xprof 輸出 cpu 分析數(shù)據(jù)-Xfuture 啟用最嚴(yán)格的檢查,預(yù)計(jì)會(huì)成為將來(lái)的默認(rèn)值-Xrs 減少 Java/VM 對(duì)操作系統(tǒng)信號(hào)的使用(請(qǐng)參閱文檔)-Xcheck:jni 對(duì) JNI 函數(shù)執(zhí)行其他檢查-Xshare:off 不嘗試使用共享類(lèi)數(shù)據(jù)-Xshare:auto 在可能的情況下使用共享類(lèi)數(shù)據(jù)(默認(rèn))-Xshare:on 要求使用共享類(lèi)數(shù)據(jù),否則將失敗。-XshowSettings 顯示所有設(shè)置并繼續(xù)-XshowSettings:system(僅限 Linux)顯示系統(tǒng)或容器配置并繼續(xù)-XshowSettings:all顯示所有設(shè)置并繼續(xù)-XshowSettings:vm 顯示所有與 vm 相關(guān)的設(shè)置并繼續(xù)-XshowSettings:properties顯示所有屬性設(shè)置并繼續(xù)-XshowSettings:locale顯示所有與區(qū)域設(shè)置相關(guān)的設(shè)置并繼續(xù)-X 選項(xiàng)是非標(biāo)準(zhǔn)選項(xiàng)。如有更改,恕不另行通知。
進(jìn)一步解析
-XX參數(shù)主要有3種:行為參數(shù),調(diào)優(yōu)參數(shù),調(diào)試參數(shù)行為參數(shù)(功能開(kāi)關(guān))
-XX:-DisableExplicitGC 禁止調(diào)用System.gc();但jvm的gc仍然有效
-XX:+MaxFDLimit 最大化文件描述符的數(shù)量限制
-XX:+ScavengeBeforeFullGC 新生代GC優(yōu)先于Full GC執(zhí)行
-XX:+UseGCOverheadLimit 在拋出OOM之前限制jvm耗費(fèi)在GC上的時(shí)間比例
-XX:-UseConcMarkSweepGC 對(duì)老年代采用并發(fā)標(biāo)記交換算法進(jìn)行GC
-XX:-UseParallelGC 啟用并行GC
-XX:-UseParallelOldGC 對(duì)Full GC啟用并行,當(dāng)-XX:-UseParallelGC啟用時(shí)該項(xiàng)自動(dòng)啟用
-XX:-UseSerialGC 啟用串行GC
-XX:+UseThreadPriorities 啟用本地線程優(yōu)先級(jí)性能調(diào)優(yōu)
-XX:LargePageSizeInBytes=4m 設(shè)置用于Java堆的大頁(yè)面尺寸
-XX:MaxHeapFreeRatio=70 GC后java堆中空閑量占的最大比例
-XX:MaxNewSize=size 新生成對(duì)象能占用內(nèi)存的最大值
-XX:MaxPermSize=64m 老年代對(duì)象能占用內(nèi)存的最大值
-XX:MinHeapFreeRatio=40 GC后java堆中空閑量占的最小比例
-XX:NewRatio=2 新生代內(nèi)存容量與老生代內(nèi)存容量的比例
-XX:NewSize=size 新生代對(duì)象生成時(shí)占用內(nèi)存的默認(rèn)值
-XX:ReservedCodeCacheSize=32m 保留代碼占用的內(nèi)存容量
-XX:ThreadStackSize=512 設(shè)置線程棧大小,若為0則使用系統(tǒng)默認(rèn)值
-XX:+UseLargePages 使用大頁(yè)面內(nèi)存調(diào)試參數(shù)
-XX:-CITime 打印消耗在JIT編譯的時(shí)間
-XX:ErrorFile=./hs_err_pid<pid>.log 保存錯(cuò)誤日志或者數(shù)據(jù)到文件中
-XX:-ExtendedDTraceProbes 開(kāi)啟solaris特有的dtrace探針
-XX:HeapDumpPath=./java_pid<pid>.hprof 指定導(dǎo)出堆信息時(shí)的路徑或文件名
-XX:-HeapDumpOnOutOfMemoryError 當(dāng)首次遭遇OOM時(shí)導(dǎo)出此時(shí)堆中相關(guān)信息
-XX:OnError="<cmd args>;<cmd args>" 出現(xiàn)致命ERROR之后運(yùn)行自定義命令
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" 當(dāng)首次遭遇OOM時(shí)執(zhí)行自定義命令
-XX:-PrintClassHistogram 遇到Ctrl-Break后打印類(lèi)實(shí)例的柱狀信息,與jmap -histo功能相同
-XX:-PrintConcurrentLocks 遇到Ctrl-Break后打印并發(fā)鎖的相關(guān)信息,與jstack -l功能相同
-XX:-PrintCommandLineFlags 打印在命令行中出現(xiàn)過(guò)的標(biāo)記
-XX:-PrintCompilation 當(dāng)一個(gè)方法被編譯時(shí)打印相關(guān)信息
-XX:-PrintGC 每次GC時(shí)打印相關(guān)信息
-XX:-PrintGCDetails 每次GC時(shí)打印詳細(xì)信息
-XX:-PrintGCTimeStamps 打印每次GC的時(shí)間戳
-XX:-TraceClassLoading 跟蹤類(lèi)的加載信息
-XX:-TraceClassLoadingPreorder 跟蹤被引用到的所有類(lèi)的加載信息
-XX:-TraceClassResolution 跟蹤常量池
-XX:-TraceClassUnloading 跟蹤類(lèi)的卸載信息
-XX:-TraceLoaderConstraints 跟蹤類(lèi)加載器約束的相關(guān)信息
回過(guò)頭分析nacos
# 設(shè)置了Java的初始堆大小和最大堆大小,以及新生代大小
-Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -- 單體模式啟動(dòng)
-Dnacos.member.list=
-Xloggc:/usr/local/software/ali/nacos/8848/nacos/logs/nacos_gc.log -verbose:gc# 和gc相關(guān)的參數(shù)
-XX:+PrintGCDetails -- 每次GC時(shí)打印詳細(xì)信息
-XX:+PrintGCDateStamps -- 應(yīng)該是打印一下日期
-XX:+PrintGCTimeStamps -- 打印每次GC的時(shí)間戳
-XX:+UseGCLogFileRotation -- GC的日志
-XX:NumberOfGCLogFiles=10 -- 日志文件數(shù)量
-XX:GCLogFileSize=100M -- 日志文件大小
問(wèn)題解決
嘗試設(shè)置參數(shù)
下面是原來(lái)的參數(shù),可以看到似乎初始堆大小和最大堆大小,以及新生代大小遵循 2:2:1的比例,所以嘗試把他們都除以2
參數(shù)修改如下所示
啟動(dòng)查看
現(xiàn)在啟動(dòng)試試,可以看到內(nèi)存占用87%,確實(shí)少了,還能再運(yùn)行其他的jar包
前端控制臺(tái)也能正常啟動(dòng),后續(xù)還需要進(jìn)一步驗(yàn)證參數(shù)是否設(shè)置的合適