web-dev-qa-db-ja.com

「クライアントからデータを受信できませんでした:ピアによって接続がリセットされました」をデバッグする方法

Ubuntu-12.04でDjango-celeryアプリケーションを実行しています。

Webインターフェイスからセロリタスクを実行すると、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を再起動する必要があります。

11
caneta

これが古い投稿であることは知っていますが、postgresログで今日同じエラーが発生したため、見つけました。 PDOselectステートメントに絞り込みました。 UbuntuPreciseでZendFramework1.10.3を使用しています。

次のpdoステートメントは、$ opinionが長いテキスト文字列の場合にエラーを生成しました。列の意見は、私のpostgresテーブルのタイプTextです。 $ 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ステートメントで十分です。

同じテーブル/列に長い文字列を挿入しても問題がないことに注意してください。切断の問題は、比較的長いテキスト文字列を使用するPDOselectでのみ発生します。

2
ken koehler

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を返します。少なくとも部分的には機能します。

1
Alan Corey

私にとっては、Postgresとそれを使用するアプリケーションの両方が役立つハイパーバイザーを再起動しました。ただし、dmesgでスタックトレースを見たことはあります。

0
Piotr Maślanka