为什么我的网站API,10个并发响应时间就变成了原来的10倍?

问题

本来我单独一个请求的时候,响应速度是1秒钟以内,但如果我用Jmeter等工具,并发请求的时候,请求越多响应速度越慢。20个请求甚至会变成20+秒。这合理?

代码做了啥

里面的代码逻辑是 读取几个本地缓存(file/reids),然后查几遍数据库。然后然后返回给前台一个json数据,返回16000+bytes的数据,不涉及图片或者其他资源

环境

PHP7 + tp6 + mysql5.7 + nginx + 阿里云双核8G 1M宽带

我的尝试

我开启了数据库慢查询,时间为1秒。然而并没有任何查询被记录下来。

2020年6月18日10:24:02

1592446117(1).jpg

我把中间件都干掉了。然后只查一遍数据库。里面有75条数据。

1592447344(1).jpg

10线程请求,第一个5秒多,最后一个12秒?

561651a5616.jpg

如果单次请求的话,是这样
响应日志看不出来有什么。。php慢日志也没有记录。。用的宝塔面板,不知如何下手

redis.jpg

如果把查数据库。变成了查reids。10线程时间
如果只请求一次,那么load time 是 543。慢了10倍?
阅读 2.8k
3 个回答

可以检查一下是否是因为后端启用了阻塞型的 session 导致的

  1. 是否开启了 session
  2. 是否使用的是 php 自带的 session 机制( session_start() / session_commit() )
  3. session 的存储器是阻塞型的, 如 file, memcache 等

如果满足以上三个条件, 那么你的并发请求基本上是被串行处理的

感觉请求被后台阻塞同步处理了。

目前问题提供的信息不足,你自行可以加上系统日志排查,对逻辑复盘分析。

检查php开启了几个线程

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏