原创

调优-Spring常规项目和SpringBoot远程调试

Spring常规项目和SpringBoot远程调试

使用到的测试项目 https://gitee.com/jiangjiesheng/spring-boot-test

1. 常规Spring项目

war包在tomcat/webapps下启动并运行

相关远程服务器tomcat配置和端口访问问题见
《Tomcat性能监控与调优.md》

2. SpringBoot项目

2.0 20190122补充

执行运行SpringBoot的war包,命令行参数来自idea的Remote配置

# 使用war包方式
<packaging>war</packaging>
mvn clean package -Dmaven.test.skip=true

avatar

2.1 直接将源码上传到远程服务器【实测失败】

(或在git、snv仓库中继续操作)

2.1.1 在pom.xml中配置启动参数

  • 配置启动参数
       <build>
          <plugins>
              <plugin>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
                  <!--远程调试的端口-->
                  <configuration>
                      <jvmArguments>
                           -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
                      </jvmArguments>
                  </configuration>
              </plugin>
          </plugins>
      </build>
    
  • 打包上传并解压到linux服务器

      //打包
      tar -zcvf spring-boot-test-with-pom-config.tar.gz spring-boot-test/
    
      //rz命令上传
      ...
      //解压
      tar -zxvf spring-boot-test-with-pom-config.tar.gz
    
  • 启动SpringBoot项目
      mvn package spring-boot:run -Dmaven.test.skip=true
      //or
      mvn clean package spring-boot:run -Dmaven.test.skip=true
    
  • 远程调试端口成功启动提示
      [INFO] <<< spring-boot-maven-plugin:2.0.4.RELEASE:run (default-cli) @ SpringBoot <<<
      [INFO]
      [INFO] --- spring-boot-maven-plugin:2.0.4.RELEASE:run (default-cli) @ SpringBoot ---
      [INFO] Attaching agents: []
      Listening for transport dt_socket at address: 8000
    
    >
  • 测试

    Step A> idea添加Remote configuration

    Step B> 添加linux服务器ip和8000端口(虚拟机下由于网段不同导致不能访问参考《Tomcat性能监控与调优.md》)

    Step C> 启动Remote (同时关闭idea中的tomcat进程)

    Step D> 浏览器中访问测试网址

     //此8081端口是通过springboot中server.port=8081指定
     http://192.168.85.128:8081/api/user/adduser?name=11&age=2
    

注1:

上述 Step C、Step D可能出现连接失败或者请求失败

排查过程

  //首先确定linux环境中的8000和8081端口是否都启动
  netstat -ntlp
  //环境较为复杂时执行
  netstat -ntlp | grep 80*

结果:

  用于远程调试的8000端口启动成功,用于SpringBoot的8081端口未启动 (实测未能启动成功,暂停调试)

2.1.2 使用命令行添加启动命令,pom.xml中不配置

按照上述步骤打包源码到linux服务器

  • 执行命令行

      //8000失败
      mvn package spring-boot:run -Dmaven.test.skip=true -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
      //8000失败
      mvn clean package spring-boot:run -Dmaven.test.skip=true -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
    
  • pom.xml添加打包方式

      <packaging>jar</packaging>
    
  • 生成jar包

      mvn clean package -Dmaven.test.skip=true
    
  • 按照上述步骤将jar包提交到linux系统并启动jar包

      java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar SpringBoot-0.0.1-SNAPSHOT.jar
    

    注2:

    实测linux系统中8000和8081端口都已经启动时,idea无法连接到8000的调试端口,8081的接口也无法访问。尝试关闭防火墙也无效。解决方法:将以上2个端口都加入防火墙,并启动防火墙。修改和启动防火墙见 http://tech.jiangjiesheng.cn/dev/study/java/mmall/backend-1/ 【Ctrl+F搜索iptables】。然后重新连接并测试。

完成日期:20190110

正文到此结束
本文目录