您现在的位置是:首页 > 技术人生 > 后端技术后端技术
记一次开发环境和本地环境不同导致问题的解决Cannot find the system Java compiler
高晓波2020-02-16【后端技术】人已围观
简介问题:logService为系统的日志记录服务,利用切面记录其他各服务调用情况、也包括一些业务的处理,如商品上架记录至动态表等;出现的问题是商品上架等过程执行完成后,动态表未能正常
问题:
logService为系统的日志记录服务,利用切面记录其他各服务调用情况、也包括一些业务的处理,如商品上架记录至动态表等;
出现的问题是商品上架等过程执行完成后,动态表未能正常入库数据。
解决过程:
1、首先看代码,由于主键生成器的更改,入库对象没使用最新的主键生成策略,加上-->本地测试-->通过;
2、线上开发环境问题依旧存在,OK,加点日志,追踪线上代码执行过程;
3、线上日志打印太快且乱,发现logService代码中多处利用线程池多线程调用,百度IDEA多线程debug方案:断点处右击,suspend选择all,添加condition,如下图:
找到需要拦截的线程后,代码打日志也加上过滤条件;其中,怀疑过多线程导致问题,后缕清代码发现并无不妥;
4、线上代码执行到某处后中断,然后本地此处是正常执行的;猜测线上maven私服和本地使用maven私服某些jar包不同导致(本地环境使用的maven私服和线上使用的maven私服为不同私服);遂,将本地代码打包编译单独上传至主机上启动运行,问题依旧存在;
5、将线上jvm内存由512M改为1024M,问题依旧存在;
6、尝试利用jstate查看jvm内存状态,报jstate命令不存在,查看jdk版本,为openJDK1.8;
7、改写代码,逻辑未变,仅调用方式,初始化等做调整,上传、运行、报错:
Exception in thread "main" java.lang.IllegalStateException: Cannot find the system Java compiler. Check that your class path includes tools.jar
此时问题终于浮出水面,openJDK lib目录中缺少tools.jar,上传完整版jkd1.8至主机,解压,配置环境变量,启动,测试,完美;
8、测试没问题后,运行jenkins编译发布任务,再次测试,问题又出现;经反复尝试,检查启动脚本,发现jenkins启动用的还是原来的openjdk,卸载openjdk,问题解决;
9、至此,两天过去了;
总结:
1、相同的代码,在不同环境下运行出现问题,99%问题出在环境不一致,可能是数据环境,可能是运行环境等等;
2、此次问题耗费大量时间定位,因为原代码结构没能正确的将错误堆栈打印,表现为一切正常、无报错,掩盖掉报错日志即挖了个深坑;
Tags:java
很赞哦! ()
上一篇:Mysql now()加减指定秒
下一篇:SpringBoot排除自动配置
相关文章
随机图文
-
Springboot集成quartz定时任务可视化配置
使用quartz定时任务已经有一段时间了,今天记录一下Springboot 2.x集成Quartz。 -
通过Redis限制API调用次数
最近在做微信公众号返利机器人,通过曲线救国的方式拿到的淘宝客工具商权限(用别人的App Key),在服务器搭建了透传程序。 使用过程中发现一个问题:阿里妈妈对淘宝API的调用频率有限制,报错信息反馈是40次/秒。 -
SpringBoot排除自动配置
SpringBoot的自动配置给我们开发带来了极大的便利,但有些时候也带来了一些问题。 问题场景: 该项目是基于Springboot + dubbo的微服务架构,框架结构web + facade + service,某 -
mybatis plus生成实体entity没有id
总是写很多重复的增删改查毫无意义,浪费生命,于是乎准备弄一个增删改查代码生成工具。网上查了一下mybatis plus挺好的,于是乎打开官网 Quick Start!按照官网的演示栗子:// 演示