首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 應用啟動腳本 start.sh 參數詳解與運行指南

     編輯:Java 綜合教學

前言

在部署 Java 生產環境應用時,啟動腳本 start.sh 的配置直接關係到 JVM 的性能表現與穩定性。本文將詳細解析啟動腳本中常見的 JAVA_OPTS 與 JAVA_MEM_OPTS 參數含義,並說明如何正確運行該腳本。

核心參數配置解析

JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
JAVA_MEM_OPTS=" -Xms2g -Xmx2g -Xmn1g -Xss256k -XX:PermSize=256m -XX:MaxTenuringThreshold=20 -XX:+CMSScavengeBeforeRemark -XX:CMSInitiatingOccupancyFraction=80 -XX:SurvivorRatio=6 -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=16 -XX:+UseParNewGC -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:$LOGS_DIR/gc.log"

堆內存設置

  • -Xms2g:初始堆大小設置為 2GB。
  • -Xmx2g:最大堆大小設置為 2GB。通常建議 -Xms 與 -Xmx 設為相同值,避免堆動態擴縮容帶來的性能波動。
  • -Xmn1g:新生代大小設置為 1GB。新生代過大可能導致老年代過小,需根據對象存活特性調整。

棧與元空間配置

  • -Xss256k:每個線程的棧大小為 256KB。若線程數極多,可適當調小以節省內存;但過小可能導致 StackOverflowError。
  • -XX:PermSize=256m:永久代(Java 8 以前)或元空間初始大小 256MB。Java 8 以降建議使用 -XX:MetaspaceSize。

CMS 垃圾收集器優化參數

  • -XX:MaxTenuringThreshold=20:對象晉升老年代的年齡閾值為 20。增大該值可讓對象在新生代多經歷幾次 Minor GC,減少過早晉升。
  • -XX:+CMSScavengeBeforeRemark:在 CMS Remark 階段前觸發一次 Minor GC,降低 Remark 階段的停頓時間。
  • -XX:CMSInitiatingOccupancyFraction=80:當老年代佔用達到 80% 時觸發 CMS 收集。生產環境常設為 70%-75% 以預留緩衝。
  • -XX:SurvivorRatio=6:Eden 與 Survivor 區比例為 6:1,即 Eden 佔新生代 6/8,兩個 Survivor 各佔 1/8。
  • -XX:+UseConcMarkSweepGC:啟用 CMS 收集器(老年代)。
  • -XX:+UseParNewGC:啟用 ParNew 收集器(新生代,多線程並行),常與 CMS 搭配使用。
  • -XX:ParallelGCThreads=16:並行 GC 線程數設為 16,通常等於 CPU 核心數。

故障診斷與日誌參數

  • -XX:+HeapDumpOnOutOfMemoryError:發生 OOM 時自動導出堆轉儲快照,便於事後分析。
  • -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails:開啟詳細 GC 日誌,包含時間戳與各代詳細信息。
  • -Xloggc:$LOGS_DIR/gc.log:指定 GC 日誌輸出路徑,建議使用絕對路徑並配置日誌輪轉。

如何運行 start.sh

  1. 賦予執行權限:chmod +x start.sh
  2. 前台運行(調試用):./start.sh 或 bash start.sh
  3. 後台守護進程運行(生產推薦):
    nohup ./start.sh > /dev/null 2>&1 &
    或使用 systemd、supervisor 等進程管理工具托管。
  4. 檢查進程狀態:ps -ef | grep java 或 jps -l
  5. 查看啟動日誌:tail -f $LOGS_DIR/gc.log 及應用自定義日誌文件。

最佳實踐建議

  • 根據機器物理內存大小調整 -Xms/-Xmx,預留 1-2GB 給操作系統與堆外內存。
  • Java 8+ 環境請將 PermSize 替換為 MetaspaceSize 並設置 MaxMetaspaceSize。
  • 考慮遷移至 G1 或 ZGC 收集器(JDK 11+),獲得更低延遲與更簡單調優。
  • 定期歸檔並分析 GC 日誌,建立性能基線。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved