浅析几种不同的DEBUG方法,欢迎大家补充#
远程DEBUG#
当本地的代码因为各种原因无法正常启动的时候,可以选择使用远程DEBUG,这种方法要求和线上的代码一致,具体方法如下,
Step1: 新建一个remote jvm debug,填入需要线上服务所在服务器ip,复制Command line arguments for remote JVM,选择需要debug的module。
Step2: 服务器中启动脚本修改添加Step1中复制的arguments
1
|
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 remote-debug-1.0-SNAPSHOT.jar
|
公司的jsvc启动的话,要放在mainclass前面,注意JDK的版本,查看JAVA_HOME的版本,jdk8就配在jdk8的启动命令处,jdk11同理。配置好启动脚本后,重启服务。
1
|
$_JSVC -D${_ServerName} -home $JAVA_HOME -cwd ${_HOME_DIR}/config -umask 0011 -Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true -Dcom.sun.jndi.ldap.connect.pool.protocol="plain ssl" -XX:MetaspaceSize=${_MetaspaceSize} -XX:MaxMetaspaceSize=${_MaxMetaspaceSize} -Xms${_Xms} -Xmx${_Xmx} -Xmn${_Xmn} -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:${_HOME_DIR}/logs/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=8M -Djava.io.tmpdir=${_HOME_DIR}/temp *-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005* -Dloader.main=${_MainClass} -wait 60 -pidfile $_Pid -outfile ${_LogOut} -errfile ${_LogErr} -cp ${_Classpath_jdk8} -procname ${_SystemctlName} $1 ${_StarCLASS}
|
Step3: 重启好服务后,IDEA启动远程debug。显示连接正常即可,如果连接time out查询服务5005端口是否起来,如果没有起来则查看服务启动问题。
Step4: 打断点,线上服务页面操作即可进入断点。
Nginx代理DEBUG#
在进行某次问题的排查的时候,需要debug单点登录(外部依赖)的流程,线上和线下的组件代码不一致,但是依赖的单点登录jar包一致,测试发现IDEA远程DEBUG并不能debug外部依赖的jar包。
由于线上服务使用的频率不高,所以直接启动本地的代码作为线上服务,使用nginx反向代理线上服务到本地,此时就可以愉快的进行外部jar包的debug,具体方法如下。
Step1: 启动本地服务
Step2: 找到集群代理组件所在的服务器,进入代理组件内部/opt/opsmgr/web/components/cluster.1/data/proxy_section,修改proxy_https.conf文件,找到需要反向代理的组件location,以iface为例,修改proxy_pass的参数为本地启动服务的地址。
1
2
3
4
5
6
7
8
9
10
|
location /iface-web/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cookie_path /iface-web "/iface-web;httponly; secure";
#proxy_pass http://10.195.185.23:8037/iface-web/;
proxy_pass http://10.195.169.165:8037/iface-web/;
}
|
Step3: 重启nginx
/usr/local/cluster/nginx/sbin/nginx -t 检查脚本是否存在问题
/usr/local/cluster/nginx/sbin/nginx -s reload 重启nginx
重启完成后,则可以在线上的页面进行操作debug了。