java线上解决思路记录

某天,具体是哪天记不清楚里,时间紧要没截图里。
怀着激动的心情,终于有机会处理线上问题,特此把问题记录下,分享给小伙伴,写的有点烂,文采不好,不对的地方,大家指出

问题一、后台系统线上页面出现加载慢、加载不出来的情况。
问题是我同事发现,处理过程向他请教了不少的问题,特此谢谢他。
出现这类问题,就猜想是代码逻辑、SQL出现的问题,光想还是不切实际的。还是要去找出问题,出现问题肯定是去看日志嘛,打开业务服务器,业务服务器是我们取得名字,公司里好几个服务器,业务服务器里是项目运行的代码,cd 到对应目录下log。vim打开直接底部输入/ $日志切换到底部,日志有点多,一行一行找很耗时间,底部的日志是最新的。发现有异常开头记录的是项目名以及包名,想问题是出在这里,仔细一点找,找到对应的类以及方法,英语不好,嘿嘿,用的Google翻译,翻译大致意思方法调用超时。超时3秒,中间为什么超时,是用的zk技术,问题已经很明显里。回到本地项目,找到对应的服务下面的类、方法太多了,一个个去找很耗时间,嘿嘿,用了一个小技巧shirt + ctrl + alt + n找类很快。小伙伴们可以自己去试试。找到问题所在把代码逻辑看一遍,SQL看一遍,SQL用执行计划试一下,索引之类挺正常,我在想为什么会出问题,回到代码逻辑,猜想可以测测代码查询数据库的执行时间,currentTimeMillis() 不会的小伙伴可以去百度,我也是百度的,嘿嘿。测试结果得出一比较某一处的代码超过里2秒,时间很长,for循环查询数据库IO开销很大,随着数据的增多,问题终于找到里。这是要改逻辑,改吧。XXXX。改好里测试一下时间只有200毫秒,用posm测试代码,运行正常OK,打包上线,出问题里,数据一部分没里,逻辑改的有问题,没有本地项目测试。好吧,吸取教训一定要本地测试完才去上线,有一点是,本地测试拷贝线上的数据更准哦,老大哥那里学的。

问题二、手机系统功能页面数据是空白
1.15号解决的问题,平时工作很忙,继续记录过程,方便记录特保存了x张图片,老大哥不在,挺怀恋他的,问题是使用人员王哥发现的,群里找到这张图片。客服要我们的产品嘛,公司要把产品测试一遍确认安装过程没问题,发给客服。
在这里插入图片描述
首先谢谢刘哥,把所有的问题都排查一遍,一开始觉得问题是服务器造成的,平时没少发脾气。找到对应的服务器,服务器kill 9 进程。nohup java --重启没解决。这问题大了,你看看吧,心里默想这么难,并丢给我一张图片
在这里插入图片描述
看到前缀包名地址,后面类名,行数487。提供了定位问题的信息。去对应服务模块找,一个个太难找。有一套快捷键贼快。全局项目搜索类名,找到对应的类,大致的看了一遍代码,没去多看,找不到问题。亲自去看看服务器日志,看日志最底层时间最新,发现一个大问题特此还粘贴部分保存着,拿出来和大伙分享。

java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

看到有个方法,猜想这方法的问题,问题根源找到,机器是不会骗我的
特此还找到抛出此异常的方法,不好意思,这是mybatis源码里的异常,仔细看异常是我们log日志记录的一样
在这里插入图片描述
找到根源所在,下一步就百度。这方法什么作用,大致意思是个查询返回一条数据方法。项目中单表操作就没写sql语句,选择重写这个方法,异常信息返回的数据条数大于1条就会报错,回到项目中找到此重写的方法,返回值是一个对象。同时返回二条数据,报错。得改,改成返回Llist对象方法。接受多个对象。同步数据库数据,测试没问题。打包install,包上传到服务器,上传发布就懒得记录里。 这类问题在前期看不到,很正常。随着系统的使用,数据增多问题就自然出现。

问题三、待发现

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章