我看到一些 postgres 进程的内存利用率随着时间的推移增长了 25%。 postgres 连接由 django 建立,而 django 主要只是创建新记录。
我想了解为什么 postgres 进程使用了这么多内存,尽管我确实尝试通过在我的 django 设置文件中将 CONN_MAX_AGE 设置为 600 来解决这个问题。 postgres 进程似乎已经存在了好几天,所以我不相信 CONN_MAX_AGE 正在做任何事情。
我有 DEBUG = False 并且正在运行 Django 1.6.2。关于如何调试这个的任何想法?有没有其他人看到过类似的问题?
最佳答案
PostgreSQL 可能实际上并没有使用更多的内存,这只是您的进程记帐报告内存使用情况的方式。
见
如果您的整体系统 RAM 使用率上升,并且当您使用 pg_terminate_backend
终止 PostgreSQL 后端时再次显着下降,您可能会遇到真正的问题。不过,您所看到的很可能只是更多的共享内存页面被每个后端触及。
PostgreSQL 由于使用 palloc
和内存上下文来进行分层上下文相关的内存管理,因此它对内存泄漏具有很强的抵抗力。查询中的泄漏并不常见,在查询之间持续存在的泄漏非常罕见。我真正看到它们的唯一一次是在使用自定义 C 扩展时,或者当人们使用 PL/Perl 或 PL/Python 等过程语言并在共享上下文中存储持久信息时。
关于python - Django/Postgresql 内存泄漏和持久连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22532553/