生产环境下访问速度慢,cpu、内存、磁盘利用率都不高问题

背景:
在本地和测试环境部署都没问题,但是客户反馈生产环境系统很慢。打开一个页面要10+s。
上去生产环境测试了一下。确实比较慢。生产环境机器配置是比我们机器好很多的。

排查过一下内容:
1、cpu利用率很低
2、内存利用率低于50%
3、磁盘io利用率低于50%
4、连接数据库与查询速度快。不是数据库与sql原因。
5、也不存在网络情况。在服务器访问也是一样。
6、jvm内存充足,也不是gc导致

img

img

img

后面发现一个问题:
刷新页面会同时发起很多请求,包括前端与后台接口。这个时候就会慢。
但是我重新发起单个接口。响应又很快。

img

还曾经尝试在一个接口上每个位置增加日志打印,想找出耗时的代码。结果有一次,在这个位置。上下就打印日志,没有其他业务代码。居然也耗时3s+

img

img

img

希望各位可以帮忙指导一下。

那你就看看3s代码里面执行了什么啊 3s执行去查sql了吧 模拟一下相同条件看一下

1.前端:首先页面图片是否很多,目前提供信息是看不出来,需要看一下web页面加载的图片是否做了动静分离,对于一些图片,显示首屏的,可以采用懒加载的方式,后面scroll到的时候再加载。
2.后端:单个接口访问很快,问题也比较明显,刷新页面大量接口请求数据库,可以用异步缓存的方式,既然页面需要刷新才加载数据,不是实时刷新,可以理解为不是所有的都会经常加载,把不常变的数据缓存起来,通过ajax异步加载部分请求;这样页面可以直接加载出来,不常变的数据从缓存取,变化的数据接口异步调用。
3.对于3s问题:这个需要打印具体的sql和数据库连接池在那一瞬间的使用情况,不过从名称来看,获取的是用户组织id,从数据设计来讲,这种数据很少会变化的,建议走redis缓存。

有没有可能是客户网络上的消耗!因为本地或者是测试环境都不太能真实的反应出正式的网络环境

这个有考虑过地域延迟吗?用动态CDN加速试试,还有可能就是并发问题没考虑好

这种问题建议上skywalking或者阿里的arthas来进行分析,直接猜很难猜到原因的

  • 有没有可能是网速,
  • 数据库连接数量
  • 测试环境和生成环境的差异,找找看

如果已经发现耗时的代码段了,那就都贴出来,代码耗时无非就逻辑问题/数据连接问题/sql问题;
如果不是代码问题就服务器上面直接curl访问接口,看是不是网络问题;

看了一下,个人感觉很大可能是代码的问题.
看一下你执行的慢的方法中,有没有批量处理数据, 查询树结构, 调用递归或者循环方法 一直创建新的对象等等都会导致你的处理变得很慢.
然后就是看一下,SQL的执行时间.看看生产的日志,确定一下 SQL 的执行时间,
然后在看一下前端,确定请求,不会互相影响.我之前就遇到过一次,A请求先发起,B请求后发起,但是直到 B请求结束后,A请求才响应的情况.
定位到问题,是发生在前端, 后端还是在数据库.
还有就是,一个接口耗时3秒,其实是很长的.每个接口应该都控制在2S 以内.如果在测试环境超出2S 就要看看为什么了.

每一个请求都重新发一次试试,这些网络请求也许是按顺序请求的