Python和MySQL神秘的内存泄漏

时间:2013-07-25 13:20:01

标签: python mysql ubuntu mysql-python

我正在运行一个python应用程序,它正在查询(选择)mysql数据库,一次读取~1k行,用它们执行计算并重复几个小时。读取的表有大约20米的读数,它由MyISAM引擎供电。 MySQLdb连接器用于从python访问MySQL。

问题是在几个小时后使用了所有服务器的内存,使服务器只有16mb内存可用。

第一个想法是python应用程序中的内存泄漏,但memory_profiler和dozer / dowser都显示所有变量都已正确释放。

接下来尝试抓住泄漏者在内存耗尽前后采取进程内存使用快照(ps vax | sort -k8n)。

当服务器有280mb免费时,快照(按内存排序)(来自顶部的信息):http://pastebin.com/0F3Wht0s 2小时后...... 快照母鸡服务器只有18mb免费(来自顶部的信息):http://pastebin.com/9MJkLX2g

令我惊讶的是,mysqld和statcalculator进程的内存消耗几乎相同。

我显然遗漏了与linux内存分配相关的内容。 如何查看哪个进程分配了该内存?

服务器正在运行Ubuntu Server 10.04,总共有1GB内存。 MySQL和MySQLdb来自ubuntu repo。如果需要任何其他信息,我会在这里添加。

TLDR :Python应用程序不断通过选择从mysql读取。几个小时后,内存全部消失,但top显示mysqld或python进程的内存分配没有增加。

1 个答案:

答案 0 :(得分:0)

正如@ebyrob建议的那样,LinuxAteMyRam(.com)。

$ free -m确认时,“丢失”内存已用于磁盘缓存,实际上可用于应用程序。

谢谢,@ ebyrob。