2011-10-18 8 views
0

私は誰かが私を助けてくれることを願っています。MySQLデータベースでは、毎回フラッシュテーブルが必要です。これを解決するために何かスクリプトを書くことはできますか?

現在、私たちのスクリプト(JavaとPHP)がlocalhost mysqlデータベースに接続しようとすると、何度もエラーが発生します。

多くの接続エラーが原因でホスト 'myhost'がブロックされています。 'mysqladmin flush-hosts'でブロックを解除してください。

この問題は、主に午前中の早朝に発生しているようです。なぜこれが起こっているのかを調べるために多くの検索を行った結果、今度はホスティング会社がバックアッププロセスを実行していることが原因である可能性があるという結論に至りました。私の理論は、このバックアッププロセス中(これは私たちの最も忙しい時期です)、すべての接続を使い切ってしまい、このエラーが発生するということです。

私はこれらのバックアップが発生する時間を変更することについて私たちのホストに話しましたが、これは不可能であり、単にバックアップが開始されていることを保証するものです重要な期間はバックアップが発生した正確な時期であることを通知した)。私は、サーバーに接続している

ものがあります:

  • PHPファイルは、着信ポート接続をリッスンソケットリスナーとして実行するようにクロンジョブ
  • にJavaアプリケーションのカップルを使用して実行

    1. PHPのウェブサイトmysqlデータベースを使用してユーザーの資格情報をチェックし、未処理のメッセージをチェックします。

    私たちは通常、いつでも300〜600のソケット接続を開き、これらの平均動作は約1〜3回/秒です。

    私は、これらの問題を自動的に解決するのに役立つかもしれないことを願って、いくつかのmysqlプラグインと共にいくつかのmysqlプラグインをインストールしました。

    私の質問は以下のとおりです。

    1. は、この問題が発生した場合、私は自動
    2. をクリアするためにデータベースをフラッシュすることができますので、私は自動ポーリングにMySQLデータベースを行うことができるものがあり、これは、サーバーのバックアップに潜在的にも関係しています。バックアップが発生している間に95%の時間が発生するのは偶然のようです。
    3. その他の参考になるアイデア。他のウェブサイトへのリンク、または私がホストに手伝ってくれる質問。

    私たちは現在、PHPバージョン5.2.6-1 + lenny9 Apacheで動作しています。

    さらに詳しい情報が必要な場合は、私にお知らせください。ありがとう。

    UPDATE:私は共有仮想ホスト上で動作し、私は自分のデータベースクラスでこのコードを持っているように私は私のウェブサイトの接続を閉じかなり確信しています

    function __destruct() { 
        @mysql_close($this->link); 
        } 
    

    私は私が使用していないかなり確信しています@mysql_connectコマンドをdbに接続すると、PHPスクリプトを介した永続的な接続が可能になります。

    UPDATE: max_connectionsの制限を100から200に変更し、php.iniのmysql.persistant変数をOnからOffに変更しました。今度は2日間、サーバを実行し、主にmySqlデータベースへの接続が完了しました。私はサーバーに1GBのRAMを1つ持っていますが、それに近づくようなことはありません。サーバーに正常に送信された最後のパケットが0だったあまりにも多くの接続

  • :また、私のmuninを見ると接続は200のマークを打つように見えることはありませんし、まだ私は、ログファイルにエラーに

    1. のSQLExceptionのようなものを取得するログに記録しますミリ秒前。ドライバはサーバからパケットを受信して​​いません。
    2. SQLException:null、サーバーからのメッセージ:「新しいスレッド(errno 12)を作成できません。使用可能なメモリが不足している場合は、OSに依存するバグのマニュアルを参照してください」
    3. SQLState ::のSQLException:HY000、VendorError ::のSQLException:1135
  • +1

    ホスティング会社を変更し、完全停止します。 – ajreal

    +0

    必要に応じてコードを見て、接続を明示的に閉じることができます。 –

    +0

    本当に、私のホスティング会社をベストアイデアに変えていますか?顧客の多くがIP経由でソケットに接続しているため、ホストの変更は苦しいことでしょうか? Salman A、明示的に近い接続を意味しますか?各PHPファイルの最後に、クローズを呼び出すフッタが含まれています。そして私のJavaでは、私は各クエリのために接続を開いたままにしておきます。 – dreza

    答えて

    0

    私は本当にそれをソートしたことはありませんが、私はこの質問への回答を投稿する提案がありました。

    最後に、私が望む最大接続数の上限を維持しながら接続を共有できるJava接続プールクラスを実装しました。また、RAMを増やして最大接続数を増やすことを提案しました。私はこれらのことを両方ともやっていましたが、それは問題のほんの少しのものでした。私たちはまた、私たちが行ったものがあまり協力していなかったので、ホスティングプロバイダを移動させました。

    これらの小さな実装の後、私はこの問題が少なくとも8ヶ月間発生していることに気付きませんでした。

    その他の提案では、スレッドプーリング機能も実装する必要がありますが、現在の要求ではこの必要性は必要ありません。

    1

    私たちは、バックエンドとしてMySQLを使用して大規模なeコマースのインストールと同様の問題を持っていた私は、あなたは、MySQLの「MAX_CONNECTIONS」の設定を変更することをお勧めしたいです。 MySQLを起動する前に "ulimit"を使ってファイルディスクリプタの数を変更します(/etc/init.d/mysqlの "ulimit -n 32768"を使用します)。

    +0

    私はmax_connectionsを100から200に増やしてみました。私のサーバーは現在1GBのメモリを持っていますので十分に十分でしょう。私はファイル記述子の制限をどのように変更するのかはまだ分かりませんが、今のところどのようになっているのかが分かります。 – dreza

    関連する問題