SpringBoot微服務打包容器啓動運行時就會加載打包時設置的Jvm參數,當上線後監控到內存不足時需要調整參數時就要重新打包升級版本等一系列繁瑣操作,那能不能只需要更改配置重啓就能解決問題呢?答案是需要實踐。
在手把手教你將Eureka升級Nacos註冊中心一文中已經提到了如何使用Dockerfile命令來動態設置java參數。
這裏着重說下,先看配置
<env> <JAVA_OPTS> -Xms700m -Xmx700m </JAVA_OPTS> </env> <cmd>java $JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/${project.build.finalName}-dump.hprof -jar /app/${project.build.finalName}.jar</cmd>
在容器打包時設置一個變量JAVA_OPTS,這裏的變量會轉化爲Dockerfile中的一個環境變量,這樣就可以通過改變外部的變量覆蓋掉運行時內部默認的變量。
如在K8S管理器中設置此服務的JAVA_OPTS變量:
當然也可以通過環境變量指定微服務運行時激活的配置,如上圖中的active,這裏在K8S中指定爲prd了,這樣即使是代碼中指定了dev環境在發佈時也不影響正式使用,不用發佈時改來改去。