非docker环境的tomcat配置
- 使用的是linux服务器,jdk版本为1.8
- 普通的tomcat项目配置远程调试很简单,编辑
bin
目录下的catalina.sh
文件,在文件最前面增加CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
,使用catalina.sh run
启动项目,就可以实现远程调试。
docker环境的配置
-
因为使用docker部署项目时,每次创建镜像都会生成新的tomcat,所以开启远程调试就需要每次手动修改
catalina.sh
文件和重启项目。 - 如果不想每次手动修改
catalina.sh
文件,就需要在docker
创建镜像时修改catalina.sh
文件。 - 在
dockerfile
中添加的命令“sed -i ‘1i\CATALINA_OPTS=”-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005”’ /usr/local/tomcat/bin/catalina.sh”,作用是在catalina.sh
文件第一行增加CATALINA_OPTS
参数。 EXPOSE 5005
是开启5005
端口,也可以自定义其他端口,如下:
- 例子中使用的是腾讯的云服务器,需要在服务中开启
5005
的端口映射,如下:
idea中开启远程Debug
- 点击Edit Configurations
- 添加一个Remote
- 选择jvm版本、填写调试ip和端口、选择需要调试的项目,例子中
5005
端口被映射到服务器的30656
,所以这里端口填30656
。
- 点击Debug按钮启动远程调试,成功如下:
idea使用多线程调试
- 在正式环境的远程调试时,普通的断点会阻塞所有的用户请求,很影响其他用户的正常使用。
- 解决办法是使用多线程调试,并且设置断点条件可以实现只拦截某个用户的请求,并且不影响其他用户的访问。
- 在断点上右击,弹框中选择开启多线程,并设置断点条件,例子中为只拦截用户ID为1的请求:
- 如果不设置断点条件,则会拦截到所有请求,这时可以在Debugger控制台中的Threads中选择需要查看的线程和方法。