
问题
维他明不是维他命
这个作者很懒,什么都没留下…
展开
-
mysql的datetime列的长度导致的问题
背景java使用mybatis框架,更新一个datetime数据类型的值,插入后查询获取该字段并转成时间戳,发现插入前的时间戳和取出后的时间戳不一致。原因更新后数据库里该字段的时间戳跟程序中的时间戳相比,后面三位数都是0,说明是数据入库时被截断了。后面三位数刚好是毫秒数,可以判断出是datetime数据入库时,毫秒数未被保存。通过查资料和核对表设计,发现该datetime列的长度为0,即保存0位毫秒数。解决办法如果需要保持入库时程序中的时间和数据库里的时间精度一致,有以下两种方案:可以通过原创 2021-06-18 11:55:18 · 3361 阅读 · 0 评论 -
读取redis数据反序列化导致的线上事故分析
背景线上发版时,由于是多个节点分批发布,所以会有一部分服务节点是新代码,一部分服务节点是旧代码。在发布一半节点以后,线上陆续收到反馈了问题。排查和分析过程排查也比较简单,查看异常信息错误日志时,日志里就打印出了明确的错误信息:org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unrecognized field一个序列化异常,原因是无法识别的字段。再结合本次发版的内容,是原创 2020-09-10 22:30:00 · 394 阅读 · 0 评论 -
redis慢查询导致的线上事故
背景接入流量涨了将近一倍时,用户就反馈系统的反应很慢,发起一个请求后,要很久才能实际看到响应的结果。排查和分析过程1.因为用户是在浏览器页面上操作的,所以做的第一件事就是打开网页和开发者工具,然后模拟用户操作发起请求。发现这个过程有些操作的响应是很快的,而有些不是,初步排除是服务出了问题(内存溢出,死循环等),然后根据请求的响应时间确定出现延时的接口。2.确定了接口后,查看接口的实现,发现全部都是基于redis的读操作。初步判断是redis出了问题。马上登上redis服务器,查看redis进程的各项原创 2020-08-30 20:11:35 · 297 阅读 · 0 评论 -
关于ArrayList抛出的UnsupportedOperationException异常
场景很常见的场景,有一组集合,需要遍历集合,然后去掉集合里面的多个对象。现象当调用iterator的remove方法时,报出了异常"UnsupportedOperationException"。原因分析打断点对源码进行调试,发现遍历的集合类是Arrays.ArrayList类,继续跟踪,发现remove方法并没有覆盖AbstractList的remove方法,所以调用remove方法的时候直接抛出了一个UnsupportedOperationException异常. //AbstractList原创 2020-06-01 19:25:31 · 632 阅读 · 0 评论 -
关于使用netty进行通讯连接时连接断开重连的错误实践
问题线上监控发现某个服务所在的容器CPU使用率很高,内存也不低。问题排查1.使用top指令查看是什么进程的CPU使用率最高,发现是java进程,再使用top -Hp对进程内的线程进行监控,查看是那些线程的CPU使用率那么高。执行指令后得出几个异常的数据值:1.线程数有一千多个,2.有九个线程的CPU使用率一直很高。2. 使用jstack导出java进程的栈信息,根据步骤1中CPU使用率高的...原创 2020-03-01 23:49:15 · 3199 阅读 · 0 评论 -
分布式集群架构下的mysql错误 "too many connections"
背景项目采用微服务,分布式集群的方式进行部署,每个服务有2至3个节点。问题新增了一个服务,开了两个节点,发布到线上环境后,过了一段时间,发现其他服务的消息积压了。原因经过查看各个相关服务的日志,发现数据库无法写入,日志中首先出现了Communications link failure,The last packet successfully received from the serve...原创 2019-05-02 01:10:27 · 201 阅读 · 0 评论 -
关于在数据量比较大的时候进行插入或更新操作的问题
背景最近需要每天从A库拉取5W+数据,然后需要插入B库,而且插入的过程,要先判断是否需要插入,判断后再进行插入或更新操作。问题如果每条数据都要先进行数据库查询看库中有没有数据再进行更新或插入操作,就会多出5W+的查询操作,每次又涉及到数据库连接的断开和连接,这样就导致性能的下降和时间的提高。解决办法使用 ON DUPLICATE KEY UPDATE 可解决此问题,将判断逻辑交由数据库去...原创 2019-04-25 23:09:42 · 1776 阅读 · 1 评论 -
关于对数据库查询结果排序时,将特定的某个值排在最前面的问题
应用场景前台传入一个查询字段id,要求查询后返回的结果中,该name所在的数据在第一行,其他数据行按照正常的字典序排序。解决方法在order by语句中,使id字段等于前台传入的值,则整个表达式会作为排序的依据,如前台传入2:则结果会先将id=2的数据输出,其他行则按字典顺序或其他排序字段的顺序列出。...原创 2019-04-01 23:29:33 · 14555 阅读 · 3 评论 -
关于SpringMVC解析json参数时解析失败的问题
情景项目中某一个接口使用@RequestBody将传入的Json字符串参数解析注入进封装的参数对象中,但是前台发送请求后却总是报错,一直提示json解析失败,但是在swagger中测试该接口却成功,于是开始了JSON参数的对比,并一点一点猜想并排除:是否String值的类型没有用双引号、是否布尔值需要双引号、是否字符编码不一样,最后在格式化工具的帮助下发现了问题。两者参数对比{userna...原创 2019-04-03 23:34:10 · 2008 阅读 · 0 评论 -
mysql的远程连接问题以及解决办法
场景部署项目时,数据库连接url使用了ip地址而不是localhost,导致启动项目时连接池无法连接数据库而报错。解决办法原创 2019-03-07 17:12:04 · 173 阅读 · 0 评论 -
在spring boot项目中使用maven的profiles无法替换资源文件中的占位符的原因和解决办法
原因在springboot项目中,本来想通过maven的profiles和resources插件对资源文件进行动态打包的,但是发现配置好后,资源文件中的占位符就是无法被替换为值,于是想起springboot项目依赖了spring−boot−starter−parent,于是翻看此parent的pom文件,发现此pom中使用了resources插件,同时引用了{}就是无法被替换为值,于是想起spr...原创 2019-03-07 12:32:42 · 3407 阅读 · 4 评论