Java开发中,总是会碰到各种各样奇葩的问题,有时候明明在本地完美执行,可是一放到服务器上就各种崩溃,搞得人一头雾水,调试的时候也非常艰难。对于开发人员来说,复现问题通常是解决问题的前提,本地可以复现,解决起来相对会顺利一些。
idea集成的remote远程调试功能,可以完美的解决远端调试的困境,至少在一定程度上,使得复现问题变得有据可循。以下便是Linux+idea+tomcat的remote配置。
一、修改bin目录下catalina.sh文件。
查找JPDA_ADDRESS变量,找到位置
if [ -z "$JPDA_ADDRESS" ]; then JPDA_ADDRESS="localhost:8000"
修改localhost为0.0.0.0:5005,8000端口可不变,0.0.0.0为可支持远程调试
if [ -z "$JPDA_ADDRESS" ]; then JPDA_ADDRESS="0.0.0.0:5050"
二、启动tomcat调试服务,在bin目录下执行
./catalina.sh jpda start
此时,服务端配置已完成,接下来配置idea的remote服务。
一、打开edit Configurations配置项,添加一个template,配置Remote JVM Debug如图

二、使用所配置的template配置服务,如图

三、启动成功后会在Console窗口打印Connected to the target VM ...

到此所有服务都配置完成,你就可以在本地断点调试服务器上的程序了。
【配置过程中你可能碰到的问题集锦】
一、java.lang.OutOfMemoryError: Java heap space。这个问题不一定在你配置此服务时出现,问题原因也有很多,其中有一点是因为内存泄漏导致,在idea中我们可以通过配置VM option为-XX:PermSize=512M -XX:MaxPermSize=1024m完美解决。在Linux的tomcat可通过添加相同配置解决,在catalina.sh文件中的第一行添加
JAVA_OPTS='-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M'
二、查看端口是否开启
netstat -an | grep 5005
三、配置过程中你可能会碰到端口5005未开启的问题。
vim /etc/sysconfig/iptables #打开配置端口号文件
添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5005 -j ACCEPT
重启iptables生效
systemctl restart iptables
浙公网安备 33010602011771号