2017-05-31 17 views
0

私は基本的にRabbitMQキューとスーパーバイザでジョブメッセージを入れているSymfony 3.1アプリケーションを開発しています。私はRabbitMQメッセージを消費し、Symfonyで管理されているジョブを実行します。消費者の仕事は、メッセージをデコードし、同じカーネルを注入して、読み取り/書き込みの両方のデータベース操作を持つSymfonyコマンドを実行する新しいSymfony\Bundle\FrameworkBundle\Console\Applicationを作成することです。Mysqlエラー:Mysqlサーバーがなくなりました

ここから問題が始まります。通常、同時に、私は通常、生成された4つのワーカープロセスがメッセージを消費するようにしておきます。同時に、すべての消費者は異なるデータだけで同じデータベース操作を行い、基本的にすべてのプロセスが同じSymfony RabbitMQコンシューマを実行します。場合によっては問題なく動作しますが、MySQLはエラー"MySQL server has gone away"を返すことがあります。通常、これを修正するために、スーパーバイザサービスを再起動して、ワーカープロセスを強制終了して再度生成する必要があります。通常は再起動後、数時間は正常に動作しますが、実際には予測できないパターンです。

MySQLの接続タイムアウトではありません。小さな操作であり、MySQLのconnect_timeoutを増やしたからです。私もwait_timeoutを2日間増やしました。基本的に、これは問題を解決しません。

答えて

0

これはいくつかの問題があります。

  1. 最大パケットサイズは、コンフィギュレーションのmax_allowed_pa​​cket max_allowed_packet

  2. から、それを高めることも、いくつかのtry catchブロックを、問題をタイムアウトしますので、オープンPHPプロセスとそれが終わったことはありません、あなたが実装することができますすることができ、かつWHE mysqlエラーが発生して新しいmysql接続が作成されました。

0

アプリケーションの操作中に同様の問題が発生しました。このエラーの原因はさまざまです。

  • MySQL設定変数の微調整は、問題を修正することができ 、接続タイムアウト、接続の数と同様に、アプリケーションレベルで
  • タイムアウトmysqli_pintを待っては内部mysqli_ping実装しよう http://php.net/manual/en/mysqli.ping.php
  • catchブロックを試してみてくださいへの持続的接続を有効にしてくださいmySQL
  • 最後に、mysqlにpingをかけ続けて接続を維持するために、アプリケーション(db層)をコード化して、問題を解決/縮小しました。デモはこちらですhttp://blog.lenss.nl/2012/10/long-running-php-script-and-mysql-server-gone-away/
関連する問題