Django/Postgresql 内存泄漏与持久连接
我发现一些Postgres进程的内存使用量随着时间的推移增长,最多能达到25%。这些Postgres连接是通过Django建立的,而Django主要是在创建新记录。
我想搞清楚为什么Postgres进程会使用这么多内存,尽管我在Django的设置文件中把CONN_MAX_AGE设置为600秒,试图解决这个问题。不过,这些Postgres进程似乎能存在好几天,所以我不太相信CONN_MAX_AGE真的起作用。
我把DEBUG设置为False,并且正在使用Django 1.6.2。有没有人知道该如何调试这个问题?有没有人遇到过类似的情况?
1 个回答
1
PostgreSQL 可能并没有实际使用更多的内存,只是你的进程监控工具显示的内存使用情况让人觉得它占用了很多。
你可以查看以下链接了解更多:
如果你的系统整体内存使用量上升,并且在你用 pg_terminate_backend
结束 PostgreSQL 后明显下降,那你可能真的遇到了问题。不过,大多数情况下,你看到的只是每个后台进程接触到的共享内存页变多了。
PostgreSQL 对内存泄漏的抵抗力很强,因为它使用 palloc
和内存上下文来进行分层的、上下文敏感的内存管理。在查询内部发生泄漏的情况很少见,而在查询之间持续存在的泄漏则非常罕见。我通常只在使用自定义 C 扩展时,或者在使用像 PL/Perl 或 PL/Python 这样的过程语言并在共享上下文中存储持久信息时,才会看到内存泄漏的情况。