为什么有些Django ORM查询突然以“Killed”消息结束?

时间:2010-08-19 22:19:25

标签: python django postgresql

有时候,当通过python shell或python脚本从数据库中获取数据时,python进程就会死掉,并且会向终端打印一个单词:Killed

这就是它所说的一切。它只发生在某些脚本上,但它总是发生在那些脚本上。它一直发生在这个需要一段时间才能运行的单个查询中,以及一个向数据库逐个添加一堆行的南迁移。

我最初的预感是单笔交易花了太长时间,所以我为Postgres开启了自动提交。没有解决问题。

我检查了Postgres日志,这是唯一的东西:

2010-08-19 22:06:34 UTC LOG: could not receive data from client: Connection reset by peer

2010-08-19 22:06:34 UTC LOG: unexpected EOF on client connection

我已经尝试使用谷歌搜索,但正如您所料,一个单词错误消息很难谷歌。

我在单个Ubuntu 10.4机架式云VPS上使用带有Postgres 8.4的Django 1.2,用于所有内容的库存配置。

2 个答案:

答案 0 :(得分:6)

我能想到的只有一件事会自动杀死Linux上的进程--OOM杀手。系统日志中有什么?

答案 1 :(得分:0)

如果正在使用psycopg,问题可能是数据库连接未被关闭。

根据psycopg docs示例:

# Connect to an existing database
>>> conn = psycopg2.connect("dbname=test user=postgres")
# Open a cursor to perform database operations
>>> cur = conn.cursor()
# Close communication with the database
>>> cur.close()
>>> conn.close()

请注意,如果确实删除了连接(使用dbcon.close()或删除了连接对象,则可能需要发出提交或回滚,具体取决于您的连接所处的事务类型。

有关详细信息,请参阅the close connection docs