Java问题排查

145 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

镜像中的JAVA程序问题排查

生成dump文件

1. tar zxvf jdk1.8.0_131.tgz   //解压压缩包
2. docker cp jdk1.8.0_131 xxx:/home/admin //将jdk包拷入容器
3. docker exec -it xxx bash //进入容器
4. cd jdk1.8.0_131/bin //进入jdk的bin目录 \ 5. ps -ef | grep 'xxx'   //获取console的进程id
6. ./jmap -dump:live,format=b,file=aaa.hprof 进程id //生成hprof文件
7. exit # 退出容器
8. docker cp xxx:/home/admin/jdk1.8.0_131/bin/aaa.hprof /home/admin //从容器中拷出 \

Arthas

请求事件监控导出数据报数据格式错误异常

问题描述:点击事件监控的导出按钮 报数据格式错误异常,检查error.log无明确报错信息打印,不能确 定是什么字段数据类型错误。

  • 翻阅代码 异常最终会被ControllerExceptionHandler拦截处理
  • watch命令查看handleException的入参
watch
com.xxx.xxx.xxx.xxx.ControllerExceptionHandler
handleException '{params,returnObj,throwExp}' -v -n 5 -x 3 '1==1
  • 发现问题 发现入参的异常对象打印出了 logExortParam.policyStatus 字段。 查看代码发现该字段为 Sting 类型,在SET方法中未对传入 空字符串 情况做处理。
    最终异常为 java.lang.IllegalArgumentException: No enum constant com.xxx.xxx.xxx.constant.PolicyStatus.POLICYSTATUS

Docker引入方式

FROM xxx/basic/oracle-jdk:8

COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas

有的镜像使用了特殊的JRE基础镜像,无法正常使用Arthas,可以将Arthas拷入JDK包,再将JDK包拷入

镜像中,在bin目录使用 ./java -jar arthas-boor.jar 启动。