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 版本
根据具体应用需求和运行环境,选择合适的参数组合可以显著提升应用性能和稳定性。
发表评论