springboot项目编译、运行优化等相关操作

Easter79
• 阅读 593

   本篇博客主要记录博主在使用springboot时,相关的操作:

(1)编译打包、执行springboot项目

           本地:mvn clean package -U --settings D:\devsoft\apache-maven-3.5.3\conf\huxs1settings.xml -Dmaven.test.skip=true -Pdev

        服务器:mvn clean package -U -Dmaven.test.skip=true -Ptest

(2)运行springboot项目

        java -jar xxx.jar

       //pinpoint-agent监控的方式启动springboot项目
       nohup java -Xms6144m -Xmx6144m -XX:PermSize=1024m -XX:MaxPermSize=1024m -javaagent:/home/xpp/apm/pinpoint-agent/pinpoint-bootstrap.jar -Dpinpoint.agentId=PP_123.xx.xx.115 -Dpinpoint.applicationName=crs_bb_bb-xxx-data -jar xxx.jar 

(3)SpringBoot开启远程debug与远程监控
         a.开启远程debug

            nohup java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=3286,suspend=n -jar wtp-service-pay-0.0.1-SNAPSHOT.jar --spring.profiles.active=test > wtp-service-pay.log 2>&1 &
         b.开启jvisualVM远程监控

           nohup java \
          -Djava.rmi.server.hostname=12x.xx.xx.112 \
          -Dcom.sun.management.jmxremote \
          -Dcom.sun.management.jmxremote.port=9999 \
          -Dcom.sun.management.jmxremote.authenticate=false \
          -Dcom.sun.management.jmxremote.ssl=false \
          -Dcom.sun.management.jmxremote.rmi.port=9999 \
          -jar wtp-service-pay-0.0.1-SNAPSHOT.jar --spring.profiles.active=test  > wtp-service-pay.log 2>&

         //同时也可以使用

         
         
             org.jolokia
            jolokia-core
         
 

(4)生产调优(8G内存,64位linux,JDK1.8)--压测调优结果
        nohup java  \
              -Xms6144m -Xmx6144m -Xmn2048M -XX:OldSize=4096M -Xss1024k \
              -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m \
              -XX:+UseConcMarkSweepGC \
              -XX:+UseParNewGC \
              -XX:+UseCMSCompactAtFullCollection \
              -XX:CMSFullGCsBeforeCompaction=10 \
              -XX:+CMSClassUnloadingEnabled \
              -XX:+CMSParallelRemarkEnabled \
              -XX:+UseCMSInitiatingOccupancyOnly \
              -XX:CMSInitiatingOccupancyFraction=70 \
              -Djava.rmi.server.hostname=12x.xx.xx.112 \
              -Dcom.sun.management.jmxremote \
              -Dcom.sun.management.jmxremote.port=9999 \
              -Dcom.sun.management.jmxremote.authenticate=false \
              -Dcom.sun.management.jmxremote.ssl=false \
              -Dcom.sun.management.jmxremote.rmi.port=9999 \
              -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=121.xx.xx.112 :8000,suspend=n -jar $JAR_NAME --spring.profiles.active=test              >/home/app/logs/xxxxsearch-catli.out 2>&1 &      

        最后关于JVM说明:

        -XX:PermSize=1024M 永久代大小
        -XX:MaxPermSize=1024M -Xms4096M -Xmx4096M     MaxPermSize为最大永久代大小,
        -Xmn1024M -XX:SurvivorRatio=8 
        -XX:+DisableExplicitGC 关闭程序主动调用gc
        -XX:+UseConcMarkSweepGC 
        -XX:+UseParNewGC 
        -XX:+UseCMSCompactAtFullCollection 全量垃圾回收后,是否进行内存整理
        -XX:CMSFullGCsBeforeCompaction=10 多少次全量垃圾回收与后进行一次内存整理
        -XX:+CMSClassUnloadingEnabled 是否允许(永久代)清理
        -XX:+CMSParallelRemarkEnabled 降低标记停顿
        -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSInitiatingOccupancyOnly指定HotSpot VM总是使用-XX:CMSInitiatingOccupancyFraction的值作为old的空间使用率限制来启动CMS垃圾回收。如果没有使用-XX:+UseCMSInitiatingOccupancyOnly,那么HotSpot VM只是利用这个值来启动第一次CMS垃圾回收,后面都是使用HotSpot VM自动计算出来的值。
        -XX:CMSInitiatingOccupancyFraction=70    这个值指定了CMS垃圾回收时old代的空间占用率该是什么值。举例说明,如果你希望old代占用率是65%的时候,启动CMS垃圾回收,你可以设置-XX:CMSInitiatingOccupancyFraction=65。
        -XX:TargetSurvivorRatio=90 设定survivor区的目标使用率。默认50,即survivor区对象目标使用率为50%。
        -XX:MaxTenuringThreshold=20 晋升年龄最大阈值,默认15。在新生代中对象存活次数(经过YGC的次数)后仍然存活,就会晋升到老年代。每经过一次YGC,年龄加1,当survivor区的对象年龄达到TenuringThreshold时,表示该对象是长存活对象,就会直接晋升到老年代。

(5)调优中监控命令(此处未完待续)

         a.命令行:jps、 jstat、jinfo、jmap、jhat、jstack

         b.jdk工具(bin目录):jvisualvm.exe、jconsole.exe 

(6)常见配置汇总
         堆设置
         -Xms:初始堆大小
         -Xmx:最大堆大小
         -XX:NewSize=n:设置年轻代大小
         -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
         -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
         -XX:MaxPermSize=n:设置持久代大小

         收集器设置
         -XX:+UseSerialGC:设置串行收集器
         -XX:+UseParallelGC:设置并行收集器
         -XX:+UseParalledlOldGC:设置并行年老代收集器
         -XX:+UseConcMarkSweepGC:设置并发收集器

         垃圾回收统计信息
         -XX:+PrintGC
         -XX:+PrintGCDetails
         -XX:+PrintGCTimeStamps
         -Xloggc:filename

         并行收集器设置
         -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
         -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
         -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

         并发收集器设置
         -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
         -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Stella981 Stella981
3年前
SpringBoot使用RedisTemplate操作Redis时,key值出现 -xac-xed-x00-x05t-x00-tb
原因分析原因与RedisTemplate源码中的默认序列化方式有关defaultSerializernewJdkSerializationRedisSerializer(classLoader!null?classLoader:this.getClass().getClassLoader()
Easter79 Easter79
3年前
SpringBoot使用RedisTemplate操作Redis时,key值出现 -xac-xed-x00-x05t-x00-tb
原因分析原因与RedisTemplate源码中的默认序列化方式有关defaultSerializernewJdkSerializationRedisSerializer(classLoader!null?classLoader:this.getClass().getClassLoader()
Stella981 Stella981
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k