【问题标题】:How to debug "could not receive data from client: Connection reset by peer"如何调试“无法从客户端接收数据:对等方重置连接”
【发布时间】:2013-11-12 14:05:46
【问题描述】:

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

当我从 Web 界面运行 celery 任务时,我收到以下错误,来自 postgresql-9.3 日志文件(最大日志级别):

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,这非常不舒服。

【问题讨论】:

  • 当 Postgres 发现已连接的应用程序已消失且未关闭与数据库的连接时,通常会记录此消息。我真的很惊讶您必须重新启动 Postgres 才能获得新连接。这与任何应用程序有关吗?还是只是你的?可以通过 psql 连接吗?
  • 我用谷歌搜索,发现这条消息是什么意思,但我不知道如何检查是什么原因。我有一个使用 celery 的 django 应用程序,但我没有直接管理连接关闭的线路。我可以通过 psql 进行连接,但是当连接中断时,我也无法从本地终端执行任何操作!
  • 您的非超级用户连接可能已用完(您的配置文件将显示 ,但如果 PostgreSQL 本身停止响应,我会感到惊讶。
  • 但是我的 tss_usr 用户在 django app 数据库上拥有超级用户权限...你说的是哪个配置文件,postgresql.conf?

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


【解决方案1】:

我知道这是一篇较旧的帖子,但我刚刚找到它是因为我今天在我的 postgres 日志中遇到了同样的错误。我将其缩小为 PDO 选择语句。我在 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 选择上,文本字符串相对较长。

【讨论】:

    【解决方案2】:

    我在 2017 年使用 9.4 获得它,我没有文本字段,不知道 PDO 是什么。我的 select 语句长约 50 个字节,我试图获取一个 int4 和一个双精度。我怀疑错误消息可能意味着多种情况。

    我已经找到了https://dba.stackexchange.com/questions/142350/postgres-could-not-receive-data-from-client-connection-reset-by-peer,这表明它可能是客户端配置的问题。我的客户是 libpg 并且 PQconnectdb() 给了我一个 CONNECTION_OK 返回。它至少部分有效。

    【讨论】:

    • 你找到解决办法了吗,我也是用libpg连接postgres的,卡住了这个错误
    • 对不起,我不记得了
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多