问题背景:
测试环境系统有人反馈页面登陆很久都登陆不上,多刷新几次之后,虽然登陆上了,但是页面上请求很慢,经常超时,很多功能用不了,贼头疼。
1、首先想到系统资源是否已被用尽
top 后查看到cpu、mem均正常。
free -m后发现
可用内存空间很小(在这纠结了一阵,一直想可用内存这么小会不会影响功能),但启示只要jvm没有发生oom之类的问题,这并不是导致系统缓慢甚至不能用的原因。
关于这个命令结果的参数的意义请参考(讲的很形象,易于记忆):https://blog.youkuaiyun.com/makang456/article/details/78694120
2、查看系统线程资源是否够用
ulimit -a(好像并没什么关系,看了一眼,系统能打开的最大线程数已最大,不是此处的问题)
3、看下nginx.conf文件配置(看一眼,配置没毛病)
4、打开nginx的log,access.log
发现,每次有问题的请求发送之后,access.log都会经过60多秒才打印该请求日志。err.log中会包 connection time_out的错误。(access.log中每条请求日志并不是页面一旦请求到nginx就会打印,而是nginx的上游服务返回后才打印。)所以,猜想nginx转接的gateway服务可能有问题,打开gateway的tomcat access.log发现,请求并没有到达。(难道是网路抖动了,nm服务和ng都在同一台机器上,不会有网络问题。)
5. 既然gateway没有接收到请求,那nm请求跑哪里去了,卧槽看了眼,eureka。。wcnm,有个192.168.56.1的sb吧gateway的服务也注册上来了,最后发现这个192.168.56.1是哪个sb本地的虚拟虚出来的网卡IP,这sb在本地起gateway服务时,没有更变eureka地址,直接把自己本地启动的服务注册到了测试环境的eureka上,并该服务对应的IP并不是他本地物理机的IP地址,而是这个虚拟机的ip地址。。。当然ng转发到这个IP就死翘翘了。。关本地服务。。一切恢复正常。
后续:这期间也怀疑过后端其他服务调用链哪里有问题,用postman调用gateway之后发现,从gateway到最后一个服务节点,整个调用链都没问题,请求返回很快。。