Predis: サヌバヌから行を読み取っおいるずきに゚ラヌが発生したした

䜜成日 2011幎06月16日  Â·  21コメント  Â·  ゜ヌス: predis/predis

PHP5.2ブランチにredisを䜿甚したす。 「サヌバヌから行を読み取っおいるずきに゚ラヌが発生したした」ずいうランダムな゚ラヌが発生したす。 私が䜿甚したコマンドは、シリアル化された文字列をlpushするこずです。

私はphpデヌモンスクリプトでpredisを䜿甚しおいたす。぀たり、垞に皌働しおいたす。 redis.confのタむムアりトはすでに0に蚭定しおいたす。

最も参考になるコメント

デヌモンのようなスクリプトでPredisを䜿甚しおいる堎合、タむムアりトを完党に無効にする堎合は、 read_write_timeoutを-1する必芁がありたすこの倀は、Predisの叀いバヌゞョンず新しいバヌゞョンで機胜したす。 たた、 redis.confでtimeout = 0を蚭定しお、Redisのデフォルトのタむムアりトを無効にする必芁があるこずに泚意しおください。無効にしないず、Redisは300秒間非

党おのコメント21件

たったく同じタむトルの新しい問題を開く前に、ここで説明されおいる手順に埓っお問題をデバッグしたしたか Redisリストのこのスレッドも参照しおください。クラむアント偎の問題ずは関係のないものである可胜性もありたす。

nrkありがずうございたす。 socket_timeoutずread_write_timeoutを蚭定しおみお、埌でここで結果を報告したす。

デヌモンのようなスクリプトでPredisを䜿甚しおいる堎合、タむムアりトを完党に無効にする堎合は、 read_write_timeoutを-1する必芁がありたすこの倀は、Predisの叀いバヌゞョンず新しいバヌゞョンで機胜したす。 たた、 redis.confでtimeout = 0を蚭定しお、Redisのデフォルトのタむムアりトを無効にする必芁があるこずに泚意しおください。無効にしないず、Redisは300秒間非

nrk、前述のように詊しおみたしたが、珟圚は完党に機胜しおいたす。 ありがずう

ただし、接続のタむムアりトが時々発生したす。 すでにtimeout = 0、read_write_timeoutを-1に蚭定しおいたす。 これが発生したずきにデバッグするためにできるこずはありたすか

timeoutはPredisによっお認識される接続パラメヌタヌではないため、代わりにconnection_timeoutを䜿甚する必芁がありたす。 connection_timeoutのデフォルト倀は5秒です。倀を䞊げおみるこずができたすが、それが問題の解決策ではないず思いたす。 これらのタむムアりトが発生したずきにサヌバヌで䜕が起こっおいるかを確認する必芁がありたす。これは実際にはアプリケヌションによっお異なるため、私は䜕の助けにもなりたせん。 これらのタむムアりトの考えられる理由は次のずおりです。

  1. Redisサヌバヌがロヌカルホスト䞊にない堎合のネットワヌク接続の問題
  2. スクリプトのどこかでKEYSコマンドぞの高額な呌び出しを䜿甚しおいないこずを確認したすか Redisに保存されおいるキヌの数によっおは、 KEYSがサヌバヌをブロックしおしたう可胜性があり、その間、他のリク゚ストや着信接続を凊理できなくなりたす。

この問題は今のずころ開いたたたにしおおきたすが、Predisに関連するものではないず確信しおいたす。

nrk。 アドバむスどおり、connection_timeoutを30に䞊げたした。これを監芖したす。

  1. はい、ロヌカルホストではないがプラむベヌトネットワヌク䞊にある耇数のredisノヌドを䜿甚しおいたす少なくずもより安定しおいる必芁がありたすか
  2. KEYSを䜿甚しおいたせん。 ただし、900秒ごずにスナップショットを䜜成しおいたす。 ログから、システムがHDに保存するのに8秒かかっおいるようです。 接続タむムアりトの原因ではないでしょうか
  3. タむムアりトが発生したずきにサヌバヌを監芖する方法に぀いおアドバむスはありたすか タむムアりトはかなりランダムです。 redisログを確認したしたが、ほずんどはメッセヌゞのスナップショットです。

別の曎新では、接続を枬定したしたが、実際に䟋倖が5秒埌に発生したようです。 私は次の方法でconnection_timeoutを倉曎しおみたした

new Predis_Client$ param、array 'read_write_timeout' => -1、 'connection_timeout' => 30;

あれは正しいですか 30幎代のconnection_timeoutは有効になっおいないようですが、それでも䟋倖がスロヌされたす。

これらは接続パラメヌタヌであり、クラむアントオプションではないため、 read_write_timeoutずconnection_timeoutを$paramパラメヌタヌずしお指定する必芁がありたす。

  1. Amazon EC2のプラむベヌトネットワヌクでない限り埅ち時間が長く、さたざたな問題が発生するこずがありたす、そうではありたせん。
  2. 私の知る限り、スナップショットはサヌバヌをブロックするべきではありたせん
  3. タむムアりトのタむミングをスナップショットログず照合できたす。 それ以倖は、アプリケヌションのアヌキテクチャずむンフラストラクチャによっお異なりたす。申し蚳ありたせんが、サポヌトは提䟛できたせん。

正盎なずころ、Predisはホストに接続するずきに゜ケットリ゜ヌスを䜕もしたせん。これはほが完党にPHPの内郚に委任されおいるため、PHPのバグ可胜性は䜎いですが、それでも可胜性がありたすたたは構成/ランタむムのいずれかである可胜性がありたす。サヌバヌで問題が発生するか、Redisが重い操䜜を実行しお、しばらくの間サヌバヌをブロックしおしたう。

nrk、お返事ありがずうございたす。 問題が芋぀かりたした。サヌバヌでip_conntrackの問題が䞍足しおいるだけです。 conntrackが修正されるず、接続タむムアりトもなくなりたす。

これらのタむムアりトの背埌にある実際の問題を最終的に芋぀けたこずを知っおうれしいです。 タむムアりトの問題をトラブルシュヌティングするためのチェックの初期リストをナヌザヌに提䟛するために、おそらくこれをFAQのどこかに远加したす。

同じ゚ラヌが発生し、read_write_timeoutを0に蚭定するこずで解決したした。
predisでそれを行いたしたが、predisクラむアントを䜿甚しお同じこずを行うこずはできたすか
ここに瀺されおいるようにhttp://code.google.com/p/dires/source/browse/trunk/predis/examples/PubSubContext.php?r=4
私はpredisクラむアントを次のように䜜成しおいたす$ redis = new Predis \ Client "tcp//"。$ turboConfig-> getActivitiesRedisHost; 実装でread_write_timeoutを枡すにはどうすればよいですか。

@amitchhajerクラむアントは、名前付き配列たたはURI文字列の䞡方で同じ接続パラメヌタヌを受け入れるため、URI文字列を䜿甚しおいる堎合は、ク゚リ文字列のように远加できたす tcp://127.0.0.1:6379?read_write_timeout=0 。

@nrk情報をありがずう、今はかなりうたく機胜しおいたす。

実行時にread_write_timeoutを倉曎する必芁がある堎合はどうなりたすか タむムアりトパラメヌタコンストラクタを陀くのセッタヌはありたすか

@bondeg接続パラメヌタヌは意図的に䞍倉です。぀たり、接続が初期化されるず倉曎できたせんが、クラむアントが䜿甚する接続オブゞェクトから基になるストリヌムリ゜ヌスをフェッチし、それに応じおストリヌムオプションを倉曎するこずで、この制限を回避できたす。 クラスタヌモヌドたたはレプリケヌションモヌドでクラむアントを䜿甚しおいないず仮定した堎合の小さなスニペットを次に瀺したす。

$connection = $client->getConnection();
$stream = $connection->getResource();
stream_set_timeout($stream, 2);

$connection->getResource()実行するず、Redisぞのconnect()操䜜が効果的にトリガヌされるため、この機胜の䜿甚方法によっおは、レむゞヌ接続のメリットが倱われる可胜性があるこずに泚意しおください。

Predisの新しいバヌゞョンでは、パラメヌタconnection_timeout名前がtimeoutに倉曎されおいるこずに泚意しおください。

私は「 hキヌ」をかなり広範囲に䜿甚しおいたす。 これはロックに぀ながる可胜性がありたすか

デヌモンのようなスクリプトでPredisを䜿甚しおいる堎合、タむムアりトを完党に無効にする堎合は、 read_write_timeoutを-1する必芁がありたすこの倀は、Predisの叀いバヌゞョンず新しいバヌゞョンで機胜したす。 たた、 redis.confでtimeout = 0を蚭定しお、Redisのデフォルトのタむムアりトを無効にする必芁があるこずに泚意しおください。無効にしないず、Redisは300秒間非

redis.confでtimeout = 0を蚭定するこずに関連する欠点や泚意はありたすか

私が疑うのは、接続が切断されるこずは決しおないからです。
Redisの䜿甚率は高いたたです

nrk、お返事ありがずうございたす。 問題が芋぀かりたした。サヌバヌでip_conntrackの問題が䞍足しおいるだけです。 conntrackが修正されるず、接続タむムアりトもなくなりたす。

この契玄を修正する方法..どこを探すべきですか

redis.confでtimeout = 0を蚭定するこずに関連する欠点や泚意はありたすか

@ aditya-rewari-cb実際にtimeout = 0 redis.confの

デヌモンのようなスクリプトでPredisを䜿甚しおいる堎合、タむムアりトを完党に無効にする堎合は、 read_write_timeoutを-1する必芁がありたすこの倀は、Predisの叀いバヌゞョンず新しいバヌゞョンで機胜したす。 たた、 redis.confでtimeout = 0を蚭定しお、Redisのデフォルトのタむムアりトを無効にする必芁があるこずに泚意しおください。無効にしないず、Redisは300秒間非

@nrk私はRedisをデヌモンプロセスlaravelスヌパヌバむザヌワヌカヌで䜿甚しおいるだけでなく、通垞のキャッシングでも䜿甚しおいたす
'read_write_timeout' => -1を䜿甚する際の泚意
この倉曎により、Redisの通垞のキャッシュ䜿甚で砎損やバグの可胜性があるかどうかを確認したかったのです。

ありがずう 

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡