用python寫了個守護進程調用django的models定時去查詢數據庫信息python
後來發現進程運行以後內存持續增加,懷疑是內存泄漏,因而google一下,發現了兩個有用的庫 gc和objgraph數據庫
在可疑處代碼中引入django
import gc import objgraph ### 強制進行垃圾回收 gc.collect() ### 打印出對象數目最多的 50 個類型信息 objgraph.show_most_common_types(limit=50)
查看輸出發現dict類型的對象持續增加bash
[root@localhost templates]# tailf /tmp/main.log|grep '^dict' ide
dict 5154google
dict 5172spa
dict 5190orm
dict 5208對象
dict 5226進程
dict 5244
dict 5262
dict 5280
dict 5298
dict 5316
dict 5334
dict 5352
dict 5370
dict 5388
繼續排查將一些代碼暫時屏蔽掉,最終鎖定在調用django的orm查詢部分,查庫的遊標沒被釋放引發的
在官方文檔https://docs.djangoproject.com/en/dev/faq/models/ 找到了方法
在每次定時查詢完成後調用reset_queries()釋放鏈接
from django.db import reset_queries reset_queries()