如何调试“无法从客户端接收数据:由同行重置连接”

时间:2013-11-12 14:05:47

标签: django database-connection celery django-celery django-postgresql

我正在Ubuntu-12.04上运行django-celery应用程序。

当我从我的web界面运行芹菜任务时,我收到以下错误,采取的形式是postgresql-9.3 logfile(最大日志级别):

2013-11-12 13:57:01 GMT tss_usr 8113 LOG:  could not receive data from client: Connection reset by peer

tss_usr是django应用程序数据库的postgresql用户(在这个例子中)8113是杀死连接的进程的pid,我想。

您是否知道为何会发生这种情况或者至少如何调试此问题?

为了让事情再次发挥作用,我需要重新启动postgresql,这非常不舒服。

3 个答案:

答案 0 :(得分:2)

我知道这是一篇较旧的帖子,但我刚发现它,因为我今天在postgres日志中遇到了同样的错误。我将其缩小为PDO select语句。我在Ubuntu Precise上使用Zend Framework 1.10.3。

如果$ opinion是一个长文本字符串,则以下pdo语句会生成错误。列意见是我的postgres表中的文本类型。如果$ opinion在一定数量的字符下,则查询成功。 1000个字符工作正常。 2000个字符失败,"无法从客户端接收数据:连接由同行重置"。

  $select = $this->db->select()
           ->from( 'datauserstopics' )
           ->where("opinion = ?",trim($opinion))
           ->where("datatopicsid = ?",trim($tid))
           ->where("datausersid= ?",$datausersid);

  $stmt = $this->db->query($select);

我通过使用以下方式规避了问题:    - > where(" substr(opinion,1,100)=?",trim(substr($ opinion,1,100)))

这不是一个完美的解决方案,但就我的目的而言,使用substr()的select语句就足够了。

请注意,将长字符串插入同一个表/列中没有问题。仅在具有相对较长文本字符串的PDO选择中,我才会出现断开连接问题。

答案 1 :(得分:1)

我在2017年以9.4获得它,我没有文本字段,不知道什么是PDO。我的select语句长约50个字节,我正在尝试获取int4和double精度。我怀疑错误信息可能意味着多件事。

我发现https://dba.stackexchange.com/questions/142350/postgres-could-not-receive-data-from-client-connection-reset-by-peer后发现它可能是客户端配置的问题。我的客户端是libpg,PQconnectdb()给我一个CONNECTION_OK返回。它至少部分起作用。

答案 2 :(得分:0)

对我来说,重新启动虚拟机管理程序,Postgres和使用它的应用程序都将提供帮助。不过,我之前在dmesg中看到过堆栈跟踪。