十五、类加载错误
1.异常堆栈
例如找不到类和方法:
Exception in thread "commons-pool-EvictionTimer" java.lang.NoClassDefFoundError: redis/clients/util/IOUtils at redis.clients.jedis.Connection.disconnect(Connection.java:226) at redis.clients.jedis.BinaryClient.disconnect(BinaryClient.java:941) at redis.clients.jedis.BinaryJedis.disconnect(BinaryJedis.java:1771) at redis.clients.jedis.JedisFactory.destroyObject(JedisFactory.java:91) at org.apache.commons.pool2.impl.GenericObjectPool.destroy(GenericObjectPool.java:897) at org.apache.commons.pool2.impl.GenericObjectPool.evict(GenericObjectPool.java:793) at org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor.run(BaseGenericObjectPool.java:1036) at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java:505) Caused by: java.lang.ClassNotFoundException: redis.clients.util.IOUtils ......2.异常描述
运行时,Jedis执行命令,抛出异常,提示某个类找不到。此类问题一般都是由于加载多个jedis版本(例如jedis 2.9.0和jedis 2.6),在编译期间代码未出现问题,但类加载器在运行时加载了低版本的Jedis,造成运行时找不到类。
3.解决方法
通常此类问题,可以将重复的Jedis排除掉,例如利用maven的依赖树,把无用的依赖去掉或者exclusion掉。
4.处理途径
客户排查自身代码。
此查询工具可以检测本地DNS、权威DNS、公共DNS的解析生效情况。使用方法可参考 解析生效测试方法 文档。
苹果电脑:下载 windows电脑:下载DRDS 分库内暂时没有可用 RDS/MySQL 实例。
示例:
ERR-CODE: [TDDL-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.当分库包含的 RDS/MySQL 实例全都不可用,或者处于 fail-fast 状态时,DRDS 会提示 TDDL-4201 错误。
通常该错误是由于 RDS/MySQL 故障导致的。请检查后端 RDS/MySQL 实例状态以定位和解决问题。如果故障解决后仍然出现 TDDL-4201 错误,请联系客服或 提工单。
答:该状态是云解析未查询到该域名的DNS服务器信息,出现此状态的原因可能为子域名未配置DNS服务器,所以您可以在子域的解析设置页面获取分配的DNS服务器名称,然后再到主域名下添加2条NS记录,分别指向云解析分配给子域的DNS服务器名称。
注意: 如果已经在主域名下配置了NS记录,域名解析页面下的DNS服务器仍然显示“运行异常”,也可能是因为DNS服务器状态是定时探测不是实时探测导致的,建议您等待几分钟后再对页面进行刷新并查看。
6. 检查日志文件是否有内容
进入业务应用容器,判断是否确实有日志生成。如果是 stdout 日志,可以直接用 docker logs 命令。