springBoot项目部署过程及遇到的问题

项目部署过程

· 申请线上机器工单
后端服务一台,执行机N台。
前端机器无需申请,前端需部署到公司公用的nginx服务器上
· 申请机器root权限工单
· 申请数据库工单
在以前申请的数据库实例中加数据库
· 申请redis工单
· 申请线上配置变更工单
文件中配置了用户名密码,由运维放到机器的某个目录下
· 申请域名工单
· 申请nginx工单,选择域名指向nginx
提供具体的配置信息给OP
· 创建jenkins job
· 在机器上创建目录
文件需具有写权限
/apps/srv/instance/castor-.com/bin/jardeploy.sh
/apps/srv/instance/castor-com/bin/logs/castor.log
/apps/srv/instance/castor-.com/bin/restart.sh
/apps/srv/instance/castor-/bin/startup.sh
/apps/srv/instance/castor-/bin/stop.sh
/apps/srv/instance/castor-.com/conf
/apps/srv/instance/castor-.com/logs/stderr.log
/apps/srv/instance/castor-.com/logs/stdout.log
· 申请建数据库表工单
· 修改项目配置文件

问题一

CAS /ac/getAuth请求404

现象:前端页面一直刷,登录成功 有生成cookie,但每次生成的cookie都不一样。登录成功后重定向auth接口一直失败。

            后端一直报 o.j.c.client.proxy.ProxyGrantingTicketStorageImpl - No Proxy Ticket found for []

在这里插入图片描述

原因: nginx少了配置ac转发信息

问题二

/ac/getAuth 使用postman请求是ok的,但是浏览器请求308

原因:

/ac/getAuth是https请求,我们的系统是http请求。  我们没有申请http请求重定向到https请求,解析失败。

postman默认可以重定向。

解决方法:

前后端请求配置都改成https 
或者nginx配置中允许http请求重定向到https请求

问题三

部署后端 shell 命令中scp 源文件为空
在这里插入图片描述
原因:

打包失败,需关注打包的问题

问题四

jenkins无权限拉代码

在这里插入图片描述
解决方法:
在这里插入图片描述

问题六

申请线上建数据库表时,提示有不规范字段

表字段不要使用:像name  type desc method     database host   level  等。

问题七:beta部署申请域名的同时还要申请nginx,需要运维帮配置nginx,前端静态文件需部署要nginx服务器上

在这里插入图片描述

问题八

mvn clean install -Ptest -Dmaven.test.skip=true
-Ptest 没有加载对应的配置文件
解决:
pom.xml中配置

<build>
    <finalName>castor..com</finalName>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <!-- spring-boot-maven-plugin (提供了直接运行项目的插件:如果是通过parent方式继承spring-boot-starter-parent则不用此插件) -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <env>dev</env>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <env>prod</env>
        </properties>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <env>test</env>
        </properties>
    </profile>
</profiles>

application.yml

spring:
  # 环境 dev|prod
  profiles:
    active: '@env@'   //不加单引号 本地跑不起来

本地执行需配置dev
在这里插入图片描述
单元测试时添加
@ActiveProfiles(profiles = “dev”)
在这里插入图片描述

问题九

在这里插入图片描述
原因:pom.xml中配置

<build>
    <finalName>castor.**.com</finalName>
</build>

部署脚本

#! /bin/sh
        RATEL_PROCESS_STR=`ps -ef | grep 'ratel-0.0.1-SNAPSHOT.jar' | grep -v grep`
        PROCESS_ARRAY=(${RATEL_PROCESS_STR})
        PROCESS_ID=${PROCESS_ARRAY[1]}
        echo "0:"${PROCESS_ARRAY[0]}
        echo "1:"${PROCESS_ARRAY[1]}
        if [ -n "$JDATASERVICE_PROCESS_ID" ]; then
        echo "PID: "$PROCESS_ID
        kill -9 $PROCESS_ID
        sleep 15
        echo "shutdown ratel success."
        else
        echo "ratel is not run."
        fi

        nohup java -server -Xmx2g -Xms2g -Xmn1g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m  -XX:NativeMemoryTracking=detail -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGC -Xloggc:/apps/home/rd/deploy/logs/ratel/ratel_gc.log  -XX:HeapDumpPath=/apps/home/rd/deploy/logs/ratel/dump/ -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true -Dsun.zip.disableMemoryMapping=true  -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 ratel-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &

        tail -f "./logs/ratel.log"

JVM参数
-Xmx 分配给应用程序的最大JVM堆内存,默认是物理内存的1/4

-Xms 分配给应用程序的最小JVM堆内存,默认是物理内存的1/64
默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。

-Xmn2G:设置年轻代大小为2G。JVM会从本地内存中分配相当大的一块以维护其元数据(metadata),应用代码,JIT生成的代码,以及内部数据结构等等。为了维护加载类的元数据,JVM使用了一个专门的非堆区域,该区域称为元空间。

-XX:MetaspaceSize:主要控制matesaceGC发生的初始阈值,也就是最小阈值。也就是说当使用的matespace空间到达了元空间大小的时候,就会触发元空间的GC。
默认情况下,对应一个64位的服务端JVM来说,其默认的-XX:MetaspaceSize值为21MB

MaxMetaspaceSize表示的是保证committed的内存不会超过这个值,一旦超过这个值就会触发GC。最重要的内存数据区域之一是JVM的栈,每一条线程都有一个独立维护的栈。栈保存本地变量和部分的结果,扮演方法调用的重要角色。

-XX:NativeMemoryTracking=detail:使得可以本地内存追踪。off|summary|detail。默认地,NMT是关闭的

-XX:+UseConcMarkSweepGC:CMS为基于标记清除算法实现的多线程老年代垃圾回收器。CMS为响应时间优先的垃圾回收器,适合于应用服务器,如网络游戏,电商等和电信领域的应用。
为了实现这个目的,与其他垃圾回收器不同的是,CMS是与应用程序并发执行的,即在CMS对老年代进行垃圾回收时,应用程序大部分时间里是可以继续执行的,应用程序只需进行非常短暂的停顿。由于与应用程序并发执行,同一时刻同时存在垃圾回收线程和应用线程,故对服务器的CPU消耗较大,需要保证服务器CPU资源充足。

-XX:HeapDumpOnOutOfMemoryError
通过jvm参数-XX:+HeapDumpOnOutOfMemoryError可以让JVM在出现内存溢出时候Dump出当前的内存转储快照。快照格式为java_pid2821.hprof(2821为Java进程号)

参数设置:
-XX:+HeapDumpOnOutOfMemoryError :当内存溢出时触发java.lang.OutOfMemo: Java heap space
-XX:HeapDumpPath=/opt/heap·: 内存溢出时,保存内存快照文件

-verbose:gc //在控制台输出GC情况
-XX:+PrintGCDateStamps:
GC的打印基于日期的时间戳

-XX:+PrintGCDetails:打印详细信息

-XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGC

-Xloggc:/apps/home/rd/deploy/logs/ratel/ratel_gc.log

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize: -verbose:class 可以看到加载了那些类 推荐 将 结果 保存到文件,然后分析
但是你会发现 有些类名 被压缩了,根本看不出来,此时,你需要再加上一个参数

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize= true
此命令也可以表示直接关闭bytecode反射机制,加上jvm参数后,可以继续运行程序,看一下到底是加载了那些类

-Xdebug 远程断点调试 ,-Xdebug是通知JVM工作在DEBUG模式下

-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 -Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境
transport是监听Socket端口连接方式(也可以dt_shmem共享内存方式,但限于windows机器,并且服务提供端和调试端只能位于同一台机)。
server=y表示当前是调试服务端,=n表示当前是调试客户端。
suspend=n表示启动时不中断(如果启动时中断,一般用于调试启动不了的问题)。address=8000表示本地监听8000端口

–spring.profiles.active=prod 指定配置文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值