问题描述
我在 Django DRF API 项目上的内存使用量随着时间的推移而增加,一旦我达到 50 多个 API 调用,RAM 就会被填满。
到目前为止我尝试过
- 预先加载所有模型和类变量
- 使用memory profiler,尽可能清理代码以减少变量使用
- 在代码开头添加了 garbage collection:gc.disable(),在代码末尾添加了 gc.enable()
- 在代码等末尾添加了 ctypes malloc.trim()
- 设置 gunicorn 最大请求数限制(这会导致更多的模型加载/响应时间)
关于如何在每个请求结束时释放内存的任何建议?
解决方法
由于 CPython 解释器管理内存的方式,它实际上很少释放任何已分配的内存。一般来说,CPython 进程的内存使用量会不断增长
由于您使用的是 Gunicorn,您可以设置 max_requests
设置,这将定期重启您的工作人员并缓解一些“内存泄漏”问题