Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to debug "could not receive data from client: Connection reset by peer"

I'm running a django-celery application on Ubuntu-12.04.

When I run a celery task from my web interface, I get the following error, taken form postgresql-9.3 logfile (maximum level of log):

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

tss_usr is the postgresql user of the django application database and (in this example) 8113 is the pid of the process who killed the connection, I guess.

Have you got any idea on why this happens or at least how to debug this issue?

To make things work again I need to restart postgresql which is extremely uncomfortable.

like image 349
caneta Avatar asked Nov 12 '13 14:11

caneta


People also ask

Could not receive data from client connection reset BY peer in postgres?

The messages saying 'LOG: could not receive data from client: Connection reset by peer' in the server log just means that the client went away unexpectedly. There might be a couple of reasons for that : 1. Client connection waited/idle for a long time after establishing DB connection and existed unexpectedly.

What is Connection reset by peer?

Connection Reset by peer means the remote side is terminating the session. This error is generated when the OS receives notification of TCP Reset (RST) from the remote server.


2 Answers

I know this is an older post, but I just found it because I had the same error today in my postgres logs. I narrowed it down to a PDO select statement. I'm using Zend Framework 1.10.3 on Ubuntu Precise.

The following pdo statement generated an error if $opinion is a long text string. The column opinion is type Text in my postgres table. The query succeeds if $opinion is under a certain number of characters. 1000 characters works fine. 2000 characters fails with "could not receive data from client: Connection reset by peer".

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

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

I circumvented the problem by using: ->where("substr(opinion,1,100) = ?",trim(substr($opinion,1,100)))

This is not a perfect solution, but for my purposes, the select statement using substr() suffices.

Note that I have no problem inserting long strings into the same table/column. The disconnect problem only appears for me on the PDO select with relatively long text strings.

like image 125
ken koehler Avatar answered Oct 17 '22 16:10

ken koehler


I'm getting it in 2017 with 9.4, I have no text fields, don't know what a PDO is. My select statement is about 50 bytes long, I'm trying to fetch an int4 and a double precision. I suspect the error message can mean multiple things.

I've since found https://dba.stackexchange.com/questions/142350/postgres-could-not-receive-data-from-client-connection-reset-by-peer which indicates it could be a problem with the client configuration. My client is libpg and PQconnectdb() is giving me a CONNECTION_OK return. It works at least partly.

like image 29
Alan Corey Avatar answered Oct 17 '22 15:10

Alan Corey