## user-center 执行start.sh ![](https://box.kancloud.cn/f4ad5db2b02d31e1568640533d60ce92_753x367.png) cd cd /app/ocp/user-center/bin && ./start.sh ## start.sh ``` #!/bin/bash cs=`echo ../lib/*jar | sed 's/ /:/g'` export JAVA_OPTS='-XX:+UseG1GC -Xms128m -Xmx128m -XX:MetaspaceSize=64M -XX:MaxGCPauseMillis=100 -XX:InitiatingHeapOccupancyPercent=45 -XX:+ParallelRefProcEnabled -XX:MaxTenuringThreshold=3 -XX:+AlwaysPreTouch -XX:+UseStringDeduplication -XX:StringDeduplicationAgeThreshold=3 -XX:-OmitStackTraceInFastThrow -Djava.security.egd=file:/dev/./urandom -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintTenuringDistribution -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC -Xloggc:/tmp/logs/gc_%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/logs -XX:ErrorFile=/tmp/logs/hs_error_pid%p.log -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=2199 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false' nohup java -server $JAVA_OPTS -cp .:$cs com.open.capacity.UserCenterApp &>/dev/null & echo $! >pid& ``` ## 4c4g配置 ``` -Xmx2688M -Xms2688M -Xmn960M -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:+CMSClassUnloadingEnabled -XX:+ParallelRefProcEnabled -XX:+CMSScavengeBeforeRemark -XX:ErrorFile=/tmp/hserrpid%p.log -Xloggc:/tmp/gc.log -XX:HeapDumpPath=/tmp -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC -XX:+PrintCommandLineFlags -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=8090 ``` ## 4核8G服务器的jvm参数配置 ``` #!/bin/bash cs=`echo ../lib/*jar | sed 's/ /:/g'` export JAVA_OPTS='-XX:+UseG1GC -XX:G1HeapRegionSize=16m -Xmx5440M -Xms5440M -XX:MaxMetaspaceSize=256M -XX:MetaspaceSize=256M -XX:MaxDirectMemorySize=100M -XX:ReservedCodeCacheSize=268435456 -XX:MaxGCPauseMillis=100 -XX:InitiatingHeapOccupancyPercent=45 -XX:+ParallelRefProcEnabled -XX:MaxTenuringThreshold=3 -XX:+AlwaysPreTouch -XX:+UseStringDeduplication -XX:StringDeduplicationAgeThreshold=3 -XX:-OmitStackTraceInFastThrow -Djava.security.egd=file:/dev/./urandom -verbose:gc -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintTenuringDistribution -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=2199 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false' nohup java $JAVA_OPTS -Xloggc:/tmp/logs/app_`date +%Y%m%d`.log -Xloggc:/tmp/logs/gc_`date +%Y%m%d%H%k%M`_%p.log -XX: -XX:HeapDumpPath=/tmp/logs/dump_`date +%Y%m%d%H%k%M`.hprof -XX:ErrorFile=/tmp/logs/hs_error_`date +%Y%m%d%H%k%M`_pid%p.log -server -cp .:$cs com.open.capacity.UserCenterApp &>/dev/null & echo $! >pid& ``` ## GC 日志 * -verbose:gc :打印 GC 日志 * PrintGCDetails : 打印详细 GC 日志 * PrintGCDateStamps:系统时间,更加可读,PrintGCTimeStamps 是 JVM 启动时间 * PrintGCApplicationStoppedTime: 打印 STW 时间 * PrintTenuringDistribution: 打印对象年龄分布,对调优 MaxTenuringThreshold 参数帮助很大 * loggc: 将以上 GC 内容输出到文件中 ## OOM 时的参数: * HeapDumpOnOutOfMemoryError:OOM 时 Dump 信息,非常有用 * HeapDumpPath: Dump 文件保存路径 * ErrorFile: 错误日志存放路径 ## G1 垃圾回收器参数 * -XX:MaxGCPauseMillis:用于设置目标停顿时间,G1 会尽力达成。 * -XX:G1HeapRegionSize:用于设置小堆区大小,这个值为 2 的次幂,不要太大,也不要太小,如果实在不知道如何设置,建议保持默认。 * -XX:InitiatingHeapOccupancyPercent:表示当整个堆内存使用达到一定比例(默认是 45%),并发标记阶段 就会被启动。 * -XX:ConcGCThreads:表示并发垃圾收集器使用的线程数量,默认值随 JVM 运行的平台不同而变动,不建议修改。 * -XX:AutoBoxCacheMax:用于加大 IntegerCache 。 * -Djava.security.egd=file:/dev/./urandom:这个参数使用 urandom 随机生成器,在进行随机数获取时,速度会更快。 * -XX:-OmitStackTraceInFastThrow:用于减少异常栈的输出,并进行合并。虽然会对调试有一定的困扰,但能在发生异常时显著增加性能。 * -XX:-UseBiasedLocking: 理论上在高并发下会增加效率,这个需要实际进行观察,在无法判断的情况下,不需要配置。