1、服务器请求超时
1、现象:大部分请求正常,少部分请求超时
2、分析过程:
1)、查看日志程序逻辑是走老的代码,通讯耗时3-4s。怀疑是我们做的开关未加入到缓存存中,重启应用发现请求OK。初步结论:数据库数据与缓存中不一致
2)、现象时常发生,查看服务器CPU,内存的使用情况,发现CPU和内存全部都爆掉了,并且发现一直有个线程占用CPU资源未释放。
联系DB管理员,定位线程未释放资源是由哪些的请求造成的。
把相应的请求报文一个个请求去试,发现死循环,原因:调用外部服务的接口时续传正好20条的时候,续传未退出.
2、数据库与缓存数据中不一致
1、场景:根参数下有多个子参数,定时任务会把参数刷新到缓存中(按根参数版本为子参数的最新维护时间(秒级))
2、BUG:在同一秒时间内,更新同一根参数下两个子参数。并且定时任务正好在维护两个子参数之间,前面子参数刷新把根参数版本刷新为10:00:00,
定时任务把参数刷新到内存。没问题,后面子参数维护时间也为10:00:00,定时任务根参数版本未发生变化。就不会去刷新加载到内存
3、解决办法:延迟1秒钟加载,定时任务刷新时,刷新1s中之前的参数
3、微服务调用解析报文失败(自研框架)
1、现象:微服务调用建立连接成功,获取响应报文也成功,但在解析报文成数据对象时失败
2、源码解析过程:
1)通过应用名去微服务中获取实例(IP地址,端口),这个过程做了负载均衡,及实现了链路追踪
2)通过Socket通讯建立连接,成功后,发送请求。将接收的字节流转化为字符串(为什么转化字符串),将字符串解析成Java对象
3)将输出接口实现加入到共享域DDZ中(不加入会报错),将字符串转为Map,再将对象转化为你需要的对象(反射)。
4)框架会将类名转为全大写,驼峰式写法。在解析成这个对象时类名不一致会解析失败
4、读写分离数据库不一致
1、现象:在执行UAT测试时:通过一个入口(写库)将SQL执行成功,连接数据的客户端连的是读库,发现执行成功的sql,读库数据未发生变化
2、思考:读写分离数据一致性问题(原理,及解决办法)
5、路由出现错误:
1、现象:进行微服务调用,路由地址错误,路由到一个陌生的IP地址上(怀疑是个人进行调试,将配置信息改了),直接报错
2、解决:1)直接换个环境
2)直接修改路由配置
测试支持的问题:
1、
常见的SQL:
1、两张表连查取前N条记录:优先最小范围查询。列如:查询国别为中国的数据,先从主表中筛选出国别为中国的数据在连表查,而不是先两张表左连接在查询
2、where 条件过多,应把小范围放前面
3、围绕索引,一些失效的问题,模糊不能使用%放前面,排序尽量使用索引列排序
4、建表时字段应不能为null,空值应使用空串代替