java -jar 命令的参数设置可以分为几类,以下是详细的参数说明:
一、标准参数(Standard Options)
1. JVM 内存设置
java
# 堆内存设置
-Xms512m # 初始堆大小
-Xmx2g # 最大堆大小
-Xmn1g # 新生代大小
# 方法区(元空间)设置
-XX:MetaspaceSize=256m # 初始元空间大小
-XX:MaxMetaspaceSize=512m # 最大元空间大小
# 栈内存设置
-Xss256k # 每个线程的栈大小
2. GC 相关参数
java
# 指定垃圾收集器
-XX:+UseG1GC # 使用 G1 收集器
-XX:+UseParallelGC # 使用并行收集器
-XX:+UseConcMarkSweepGC # 使用 CMS 收集器
-XX:+UseZGC # 使用 ZGC(Java 11+)
-XX:+UseShenandoahGC # 使用 ShenandoahGC
# GC 日志
-Xlog:gc*:logs/gc.log:time,uptime,level,tags
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintHeapAtGC
-XX:+PrintTenuringDistribution
二、系统属性设置
1. 使用 -D 设置系统属性
java
java -jar \
-Dserver.port=8080 \
-Dspring.profiles.active=prod \
-Dlogging.level.root=INFO \
-Djava.net.preferIPv4Stack=true \
app.jar
2. 常用系统属性示例
java
# 网络相关
-Djava.net.preferIPv4Stack=true
-Djava.net.preferIPv6Addresses=false
# 文件编码
-Dfile.encoding=UTF-8
-Dsun.jnu.encoding=UTF-8
# 时区设置
-Duser.timezone=Asia/Shanghai
# 安全策略
-Djava.security.egd=file:/dev/./urandom # 加速随机数生成
三、程序参数
1. 在 jar 文件后添加程序参数
java
java -jar app.jar --server.port=9090 --spring.datasource.url=jdbc:mysql://localhost:3306/db
2. 标准输入输出重定向
java
java -jar app.jar > output.log 2>&1 # 重定向输出和错误到文件
java -jar app.jar < input.txt # 从文件读取输入
四、完整示例
1. Spring Boot 应用示例
java
java -jar \
-Xms512m \
-Xmx2g \
-Xmn256m \
-XX:MetaspaceSize=128m \
-XX:MaxMetaspaceSize=256m \
-XX:+UseG1GC \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-Xloggc:./logs/gc.log \
-Dspring.profiles.active=prod \
-Dserver.port=8080 \
-Dfile.encoding=UTF-8 \
-Duser.timezone=Asia/Shanghai \
myapp.jar \
--logging.file.path=./logs \
--spring.datasource.url=jdbc:mysql://localhost:3306/mydb
2. 微服务应用配置
java
java -jar \
-Xms1g \
-Xmx2g \
-XX:+UseZGC \
-XX:+ZGenerational \
-XX:MaxGCPauseMillis=200 \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=./heapdump.hprof \
-Dspring.cloud.config.uri=http://config-server:8888 \
-Deureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka \
-Dspring.zipkin.base-url=http://zipkin:9411 \
service.jar
五、性能优化参数
1. JIT 编译优化
java
-XX:+TieredCompilation # 分层编译(Java 8 默认)
-XX:TieredStopAtLevel=1 # 只使用 C1 编译器
-XX:ReservedCodeCacheSize=256m # 代码缓存大小
2. 堆外内存设置
java
-XX:MaxDirectMemorySize=256m # 直接内存大小
-Dio.netty.maxDirectMemory=0 # Netty 直接内存设置
3. 监控和调试
java
# 内存溢出时生成堆转储
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./heapdump.hprof
# JMX 监控
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
# 远程调试
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
六、容器环境优化
1. Docker/K8s 环境
java
# 使用容器内存限制
-XX:+UseContainerSupport # 自动使用容器内存限制(Java 8u191+)
-XX:MaxRAMPercentage=75.0 # 使用容器内存的 75%
-XX:InitialRAMPercentage=50.0 # 初始使用 50%
# 或者直接设置
-XX:MaxRAM=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
七、常见问题解决参数
1. 时区问题
java
-Duser.timezone=GMT+08
2. DNS 缓存
java
-Dsun.net.inetaddr.ttl=60 # DNS 缓存时间(秒)
3. SSL/TLS 设置
java
-Djavax.net.debug=ssl # 调试 SSL
-Dhttps.protocols=TLSv1.2,TLSv1.3
八、命令行使用技巧
1. 多行书写(Linux/Mac)
java
java -jar \
-Xmx2g \
-Dspring.profiles.active=prod \
app.jar
2. Windows 环境
java
java -jar ^
-Xmx2g ^
-Dspring.profiles.active=prod ^
app.jar
3. 使用环境变量
java
export JAVA_OPTS="-Xmx2g -Dspring.profiles.active=prod"
java $JAVA_OPTS -jar app.jar
注意事项:
-
参数顺序 :JVM 参数在
-jar之前,程序参数在 jar 文件之后 -
内存设置:根据应用实际情况调整,避免过大或过小
-
监控配置:生产环境建议配置 GC 日志和内存溢出转储
-
版本兼容:某些参数仅适用于特定 Java 版本
根据具体应用需求和运行环境,选择合适的参数组合可以显著提升应用性能和稳定性。