1

私はこのシナリオを持っています:

[ file: config.php ]
$conn=mysql_connect(...
mysql_select_db

[ file: function.php ]
include('db.php');
function a()
{
mysql_query("INSERT INTO...");
}

[ file: index.php ]
include('function.php');
a();
mysql_close($conn);

ファイル config.php には mysql_connect および mysql_select_db 関数があり、ファイル function.php には非常に長い関数があり、「index.php」ファイルにはこの関数 (INSERT クエリを実行する) を呼び出し、その後、私はmysql 接続を閉じます。

すべて問題ないように見えますが、そのスクリプトのパフォーマンスを ApacheBenchmark でテストすると、多くのスリープ接続と mysql が max_user_connection の制限に達していることがわかります。

| 20592 | admin_tracker        | localhost       | admin_tracker | Sleep   | 0    |       |                  | 0.000    |
| 20593 | admin_tracker        | localhost       | admin_tracker | Sleep   | 0    |       |                  | 0.000    |
| 20594 | admin_tracker        | localhost       | admin_tracker | Sleep   | 0    |       |                  | 0.000    |
| 20595 | admin_tracker        | localhost       | admin_tracker | Sleep   | 0    |       |                  | 0.000    |
| 20596 | admin_tracker        | localhost       | admin_tracker | Sleep   | 0    |       |                  | 0.000    |
| 20597 | admin_tracker        | localhost       | admin_tracker | Sleep   | 0    |       |                  | 0.000    |

そこで、mysql_pconnect 関数を使用しました。

**まず、接続時に、関数は最初に、同じホスト、ユーザー名、およびパスワードで既に開かれている (永続的な) リンクを見つけようとします。見つかった場合は、新しい接続を開く代わりに、その識別子が返されます。

次に、スクリプトの実行が終了しても、SQL サーバーへの接続は閉じられません。代わりに、リンクは将来の使用のために開いたままになります (mysql_close() は、mysql_pconnect() によって確立されたリンクを閉じません)。**

しかし、問題は解決しません:

[Wed Jul 27 07:12:46.153812 2016] [:error] [pid 29741] [client XX.XX.XX.XX:43853] PHP Warning:  mysql_pconnect(): Too many connections in /home/admin/web/XXXXXXXXXXX/public_html/config.php on line 2
[Wed Jul 27 07:12:46.177555 2016] [:error] [pid 29744] [client XX.XX.XX.XX:43854] PHP Warning:  mysql_pconnect(): Too many connections in /home/admin/web/XXXXXXXXXXX/public_html/config.php on line 2
[Wed Jul 27 07:12:46.202182 2016] [:error] [pid 29738] [client XX.XX.XX.XX:43851] PHP Warning:  mysql_pconnect(): Too many connections in /home/admin/web/XXXXXXXXXXX/public_html/config.php on line 2
[Wed Jul 27 07:12:46.446825 2016] [:error] [pid 29729] [client XX.XX.XX.XX:43852] PHP Warning:  mysql_pconnect(): Too many connections in /home/admin/web/XXXXXXXXXXX/public_html/config.php on line 2

ファイルが同じで、mysql_pconnect が同じユーザー/パスワード/データベースを使用している場合、なぜこのようなことが起こるのでしょうか?

どうすればこの問題を解決できますか? ありがとう

4

0 に答える 0