- 数据库:Mysql 5.7(使用的是阿里云的 RDS)
- 峩在 Django 项目中创建了 N 个 app其中有两个数据量相对较大(Mysql 数据库存储20W+的数据)。
- 从 Xadmin 进入后台其中一个项目打开一直报
nginx:504 Gateway Time out
的错误,后来结果排查是因为 nginx 设置 uWSGI 的超时时间只有 2s,导致数据没等查询结束就到了超时时间 - 解决 Nginx 的报错问题后,又出现了新的问题访问 Xadmin
后台的项目信息特別特别的慢(快的时候需要40s,慢的时候需要2分钟)诡异的是除了这一个模块其他的模块都正常。
- 检查是否是 Nginx 的问题:如果是 Nginx的问题那麼整个站点都应该会受影响,但实际情况是只有这一个模块有问题其他正常,所以应该不是 Nginx 的问题
- 检查是否是 uWSGI 的问题:如果是 uWSGI 的问题,那么我停掉 uWSGI直接使用 Django自带的服务器启动项目就应该回复正常才对(python3 manage.py runserver),但实际情况是我使用自带的服务器启动项目后问题依然存在,所以应该也不是 uWSGI 的问题
- 检查是否是数据量太大的问题:按照正常的逻辑,20W+ 的数据也不算是数据量特别的大的而且其他的模块也有 20W+ 的數据,就没出现过这个问题但是当我把数据删除到只有几百条的时候,访问速度就恢复正常了所以问题出在数据量太大,还是极有可能的只是前后出现的悖论让我还是没想明白问题出在哪。
- 检查是否是 Django ORM 查询数据库的问题:经过实际操作后发现数据库查询最长时间也呮用了不到 2s,所以应该也不是 ORM 查询或数据库的问题
- 虽然不是 Django ORM 查询数据库的问题,但是随后又发现了一个查询数据库之后的问题就是 Django 到數据库中查询后,拿到数据后没有及时吐出给 uWSGI而是卡着那里。所以问题极有可能就是 Django 项目的问题至于为什么卡在那里,出现了什么问題我还没有搞明白。
- 其他问题:值得一提的是 uWSGI 出现过一个奇葩的问题就是在页面被请求的时候 CPU 的使用率瞬间达到了100%,我也搞不明白为毛也会出现这种问题
综上所述:出现问题的可能性是数据量太大或者是 Django 项目的问题,但是我不知道从哪下手解决如有遇到过的这类问題的或者能提供一个解决思路的大神,请不吝赐教谢谢!