环境:
nginx+Java应用程序(tomcat)+redis(缓存)+mysql数据库
服务器的迁移是将redis的服务器迁移到另外一个阿里云账号下的另一个可用区内。所以出问题的应用服务器和redis不在同一可用区。
可用区E:Java应用程序(tomcat)、mysql数据库、nginx
可用区H:redis(缓存)
问题:
超级用户在拉取得网络数据量很大,某个接口(getPersonalInfoInNetwork)访问速度太慢,慢的时候需要7.8秒
排查
- 因为是pc端出现的问题,所以定位nginx转发pc请求的两台服务器(暂用20,23代替这两台服务器)。
- 最开始先是在20去ping redis服务器,发现延迟比较大。这是因为之前做了服务器的迁移,将redis服务器迁移到另一个阿里云的帐号的另一个可用区下。
然后后端将代码修改逻辑,将redis的缓存去掉。
- 之后好了一段时间,发现这个接口还是有点卡。这次重新查日志。
- 首先需要用超级用户访问系统,访问那个接口。打开检查页面,找出view source
- 然后将这一段参数拿出来。运用23的ip+端口+接口+?(传参)+下面这段参数
- 在新的页面访问
http://172.16.*.23:*/ws/user/getPersonalInfoInNetwork?timestamp=1583214795880&campId=****&uid=****&terminal=1&version=-1&kick=true&sign=866cada60b420b6706da72db48bcf0ef
- 新的页面中打开检查页面,拿出这个页面的sign值
- 然后到kibana上面查找服务端的日志,利用短语匹配sign值
{"match_phrase":{"message":"a62f6232322949808c13e5168bb48e1e"}}
拿到traceid
- 然后继续短语匹配traceid,搜找cost或者那个接口名getPersonalInfoInNetwork,看这个Java程序流程哪个地方耗时比较久
- 可以看出这个不关数据库的事,是应用程序内部接口响应时间过长。这就需要后端人员优化一下代码。