Java中-jar命令参数设置的完整指南
作者:Full Stack Developme
这篇文章主要为大家详细介绍了Java中-jar命令参数设置有哪些分类以及如何设置,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
java -jar 命令的参数设置可以分为几类,以下是详细的参数说明:
一、标准参数(Standard Options)
1.JVM 内存设置
# 堆内存设置 -Xms512m # 初始堆大小 -Xmx2g # 最大堆大小 -Xmn1g # 新生代大小 # 方法区(元空间)设置 -XX:MetaspaceSize=256m # 初始元空间大小 -XX:MaxMetaspaceSize=512m # 最大元空间大小 # 栈内存设置 -Xss256k # 每个线程的栈大小
2.GC 相关参数
# 指定垃圾收集器 -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 -jar \ -Dserver.port=8080 \ -Dspring.profiles.active=prod \ -Dlogging.level.root=INFO \ -Djava.net.preferIPv4Stack=true \ app.jar
2.常用系统属性示例
# 网络相关 -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 -jar app.jar --server.port=9090 --spring.datasource.url=jdbc:mysql://localhost:3306/db
2.标准输入输出重定向
java -jar app.jar > output.log 2>&1 # 重定向输出和错误到文件 java -jar app.jar < input.txt # 从文件读取输入
四、完整示例
1.Spring Boot 应用示例
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 -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 编译优化
-XX:+TieredCompilation # 分层编译(Java 8 默认) -XX:TieredStopAtLevel=1 # 只使用 C1 编译器 -XX:ReservedCodeCacheSize=256m # 代码缓存大小
2.堆外内存设置
-XX:MaxDirectMemorySize=256m # 直接内存大小 -Dio.netty.maxDirectMemory=0 # Netty 直接内存设置
3.监控和调试
# 内存溢出时生成堆转储 -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
六、容器环境优化
Docker/K8s 环境
# 使用容器内存限制 -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.时区问题
-Duser.timezone=GMT+08
2.DNS 缓存
-Dsun.net.inetaddr.ttl=60 # DNS 缓存时间(秒)
3.SSL/TLS 设置
-Djavax.net.debug=ssl # 调试 SSL -Dhttps.protocols=TLSv1.2,TLSv1.3
八、命令行使用技巧
1.多行书写(Linux/Mac)
java -jar \ -Xmx2g \ -Dspring.profiles.active=prod \ app.jar
2.Windows 环境
java -jar ^ -Xmx2g ^ -Dspring.profiles.active=prod ^ app.jar
3.使用环境变量
export JAVA_OPTS="-Xmx2g -Dspring.profiles.active=prod" java $JAVA_OPTS -jar app.jar
注意事项
- 参数顺序:JVM 参数在
-jar之前,程序参数在 jar 文件之后 - 内存设置:根据应用实际情况调整,避免过大或过小
- 监控配置:生产环境建议配置 GC 日志和内存溢出转储
- 版本兼容:某些参数仅适用于特定 Java 版本
根据具体应用需求和运行环境,选择合适的参数组合可以显著提升应用性能和稳定性。
