idea远程调试
今天和其他中心联调我写的一个接口,遇到了一些问题。我上周三就写好了接口,一部分逻辑本地测没通,数据库捞不到一些有用的数据,只能等其他中心的开发完再联调。过两天这个接口就要上生产环境了,测试说这个接口涉及场景有点多,被催着赶紧联调,然后整个下午就都在排错了。一开始没通,经过排查是其他中心生成数据时,漏了一个关键字段,于是没有跑通,这个从报错就定位到问题了,但是定位具体漏掉的原因也花了我不少时间,最后是其他的业务逻辑问题,和我接口也没多大关系,于是手动补上关键字段继续测,但是最终调用其他中心接口一直报500错误。在其他部门的师兄帮助下,才发现本地环境配置文件有问题,导致调用失败。
没有其他中心的代码,直接检索日志宛如大海捞针。直接登录服务器实时查看对应服务的输出日志,访问发现没有任何日志输出,这也解释了为什么数次检索日志都没效果。
tail -f xx.log
突然意识到本地服务有问题,于是将代码合并到测试环境后再测,有日志输出,但是我写的接口返回值是null,需要在测试环境进行debug才能找出问题。
项目启动
启动参数
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 remote-debug-1.0.jar
后台启动
nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 mytool-0.0.1-SNAPSHOT.jar &
查看java进程启动参数
jps -l # 查看java进程
jcmd 14816 VM.command_line # 查看vm启动参数
# linux 命令行查看java进程,包含命令行启动参数
ps -ef | grep java
# 或者
ps -aux | grep java
ps命令参数
- e:显示所有进程
- f:树形结构输出
- a: 显示与终端相关的进程
- x:显示不于终端相关的进程
- u:可读”的详细格式输出进程信息,或者筛选用户
ps -eu ekko # 筛选用户
ps -e u # 所有进程可读输出
| → 管道
- 命令A | 命令B : 命令A 的输出 → 传给 → 命令B 的输入
& → 后台执行
- 放在命令末尾,多条命令一起执行也可以用&隔
> → 覆盖重定向 / >> → 追加重定向
-
把命令的“标准输出(stdout)”重定向到指定的文件(覆盖写入) 命令 > 文件名
> empty.log # 快速情况empty.log
nohup
-
让命令在“终端关闭或用户退出后”仍然继续运行,不受 SIGHUP 信号影响。默认将输出写入nohup.out,通过和&一起用
nohup java -jar myjar.jar & # 后台执行 nohup java -jar my.jar > my.log 2>&1 & # 标准输出写入my.log,错误输出重定向到标准输入,也就是都写入my.log,顺序不能反,&1表示文件描述符1
grep命令
-
grep [选项] 模式 [文件...]
grep "error" app.log # 输出包含error的行 grep -i "error" app.log # 忽略大小写 grep -n "warning" app.log # 显示行号 grep -v "success" app.log # 不包含的行 grep -l "main" *.java # 只显示文件名称,这里显示包含main且后缀为.java的
远程连接
创建远程调式启动配置
配置远程调试ip和端口,有必要也配一下module
启动,打上断点,发请求