これは私を殺しています。MySQLデータベースにASP.NET/Monoアプリケーションがあります。何ヶ月もの間、「指定されたMySQLホストのいずれにも接続できません」という完全にランダムで一貫した発生に悩まされてきました。私は決してMySQLのプロではないので、これがばかげていることを願っています。
詳細:
MySQL 5.5.17
MySQL Connector / Net 6.4.4
Mono 2.10.8
MonoDevelop 2.8.6.5
接続文字列:SERVER = localhost、3306; DATABASE = xxx; UID = xxx; PWD = xxx; CONNECTION TIMEOUT = 90; Encrypt = false;
Max_connectionsは150に設定されています。接続は5つを超えることはなく、すべてアクティブです(おそらくプーリングが原因です)。
アプリケーションはC#ASP.NET3.5です。Windows / IISで何年もの間、岩のように堅実に動作します。9か月前、私たちの市場は私たちをWindowsから脱却させたので、私たちは(簡単に追加するかもしれませんが)すべてをMono/Apacheに移しました。
この問題はMono側でのみ発生しますが、Windowsのサポートを終了したため、これは重大です。
平均して1時間に約10回発生しますが、間隔は大きく異なります。
この問題は、次の構成で確認されています。
Ubuntu 11 / Apache2 / mod_mono
OSX Lion / Apacke2 / mod_mono
Ubuntu 11 / xsp2/MonoDevelopデバッグサーバー
OSXLion/ xsp2/MonoDevelopデバッグサーバー
キープアライブ、wait_timeout、connectionresetなどを台無しにして無駄にしました。タイミングは効果がないようです。このエラーは、接続タイムアウト後ではなく、conn.openで瞬時に発生します。
ここに手がかりがあります-アプリはPooling=falseでは絶対に実行されません。ほぼすべての接続試行が失敗します。もちろん、プールをオンにしたいのですが、それなしでは機能しない理由がわかりません。
アプリケーションには、2分ごとに「ハートビート」(データベース内のユーザーのセッション)が組み込まれています。
すべての中で最も腹立たしいですか?実行中の環境でオンデマンドで再現することは絶対にできません。ランダムです。クエリのサイズや実行時間などを調べました。
ちょうど1つのシナリオで、それを実現できます。UbuntuサーバーまたはOSXの最初の起動時に、Monoが初めてMySQLに接続するとき、それが発生します。その後、それは誰の推測でもあります。