带有 DRF API 的 Django 在几周或几个月后速度变慢

Django with DRF APIs slows down after few weeks or months

提问人:DJDeveloper 提问时间:4/23/2022 更新时间:4/23/2022 访问量:160

问:

我有带有 DRF 的 Django 网站,它有几个基于 DRF 的 API,带有 GenericAPI 视图和 API 视图。API 用于计算 XML 与 XML 以及 JSON 与 JSON 的差异。两个对象作为正文传递给这些 API,API 返回差异数和发现差异的确切节点。它还使用添加或删除的节点进行响应。

当我的环境刚刚启动并运行几周(比如 2 周)时,sight 和 API 工作得很好。我最近观察到,一个月或 3 周后,相同的 API 需要更多的时间来计算同一组数据的差异。

通常它非常快,例如,如果我们有大型 JSON 对象,则每秒处理 1k 个差异。如果我们有非常小的 JSON 或 XML 对象,比如 5 到 10 个键(非常基本),那么主库函数就会计算出大约几毫秒的差异。因此,总体 API 时间约为 200 毫秒。

现在我遇到的问题是,假设 3 周或一个月后,相同的非常基本的 JSON 对象比较(只有 5-10 个键)需要 20 秒才能响应。库函数需要将近 20 秒才能计算出一两个差值。

我在这里没有使用任何缓存。我的任何库函数都不涉及数据库操作。

我确实在 python 中使用 dict 和 list 数据类型来存储计算的差异。知道为什么会这样吗?

基础设施详细信息:

  1. 具有 16 GB RAM 的 4VCPU 计算机 (AWS t3.xlarge)
  2. 使用 Nginx、Gunicorn Django 的 Docker Compose 环境
python django 性能 django-rest-framework 比较

评论

1赞 D Malan 4/23/2022
您是否检查过 RAM 使用率是否随时间增加?
0赞 DJDeveloper 4/23/2022
是的。我的RAM使用量很大。即使没有网站流量。以下是详细信息。我的RAM快满了
0赞 DJDeveloper 4/23/2022
我在这里看到了一个重要的问题是,每次 API 调用后我的 RAM 使用量都会增加,并且永远不会减少。我有许多函数在内部调用另一个函数,并在其上交换字典以及设置和列表数据类型。我最近优化了代码。但是,始终增加内存使用量的问题尚未消失
1赞 hendrikschneider 4/23/2022
您是否将文件保存在本地?您是否正确关闭它们以释放内存?您是否以某种方式将一些数据存储在内存中而不是释放它?
0赞 DJDeveloper 4/23/2022
我对本地文件不做任何事情。到目前为止,我所做的是,我几乎遇到了同样的问题,如果我的 API 视图被调用 100 次,它会将我的内存增加 10 MB,即 ~1GB,我需要始终重新启动我的服务器以释放内存。我什至没有 CACHE,但这仍然会发生。我在 python 中使用了 cProfile 和内存配置文件,我看到在我的 API 视图的每个请求后,def post(request) 函数都会将 ~10 MB 分配给一些 JSON 字典数据,我将其作为响应(Response(data=dict_data))发送回去,并且它总是增加我的内存,从不关闭它。

答: 暂无答案