近期解决的一些问题
问题一:Redis执行部分命令时总是在报time out
解决:查看redis的slowlog发现slow命令超过1024条且较频繁,每条命令执行超过30秒,发现是针对大数据做了排序处理,将排序处理进行优化。
要点查看redis的slow日志,如下:
https://blog.csdn.net/luyaran/article/details/73801268
问题二:Spring配置多数据源切换失效,无法正确执行切换逻辑,导致程序异常
程序中在dao层使用了org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
进行数据源切换,但是发现在执行某个service的dao时,总是不能正确切换。
最后发现是该service层加了@Transactional操作导致。也就是说在程序中加入了事务拦截处理后,数据源切换逻辑失效。具体解释:
https://blog.csdn.net/xueshandugu/article/details/44344443
问题三:接口服务大量链接被占用,导致正常服务受影响
程序使用httpclient的Pooling*HttpClient*ConnectionManager连接池管理,配置总共连接1000个,但是因为某个接口有问题,10分钟不返回结果,造成大量链接被占用,导致连接池耗尽,影响正常业务。
处理方案:根据链接地址不同分配不同连接池,而不是所有链接地址都使用同一连接池
问题四:服务器cpu占用率高,告警频繁
首先htop发现总是存在线程持续占用cpu近十秒才释放,确定线程号,使用jstack打印线程堆栈,根据线程号,确定线程对应代码为某搜索引擎代码。排查代码发现,存在每次查询循环20次的bug。