2016-08-30 16 views
1

私はgolangをMysqlで使用しています。 apache benchmark toolを使用してサーバー上の負荷をテストしています。接続エラーが多すぎます。私はthis postを読む。だから、SetMaxOpenConns(100)を自分のコードに追加しました。それでも、これはあまりにも多くの接続エラーを取得しています。 post.txtファイル35のIDS(整数型)の配列が含まれていますSetMaxOpenConns()は `Error 1040:Too many connections`を解決していません

私は

ab -n 1000 -k -c 20 -p post.txt -T application/x-www-form-urlencoded http://localhost:8084/abcd

注次のクエリをしています。これは私の主な機能です:

私はすべてのIDに対してこのルーチンを実行しています。

func getRuleforProduct(db *sql.DB, id int) map[int]string { 
    m := make(map[int]string) 
    var res string 
    err := db.QueryRow("select rules from table where product_id = ?", id).Scan(&res) 
    checkError(err) 
    m[id] = res 
    return m 
} 

1秒あたりの要求が少ない場合でもこの問題を解決する方法。 atleast 20の同時リクエストに対してコードを動作させたい

+0

netstat-antpはどのように見えますか? –

答えて

0

まず、MySQLサーバーが許容するオープン接続の数をSHOW VARIABLES LIKE 'max_connections'で確認する必要があります。デフォルトは151ですが、100より小さい場合、プログラムは明らかに多すぎる接続を開こうとします。

しかし、それが100以上であっても、簡単にそのエラーを取得できます。 MySQLのmax_connectionsは、サーバ全体に影響するグローバル変数です。プログラムが同じサーバー上の他のデータベースを使用している場合は、max_connectionsの上限にもカウントされます。または、同様に、データベースサーバーを使用する他のプログラムがある場合は、接続が不足することもあります。その場合は、SetMaxOpenConns()に小さい値を使用するか、max_connections変数を増やす必要があります。

db.SetMaxIdleConns()db.SetMaxOpenConns()より小さい値に設定することも検討してください。それ以外の場合は、接続プールを使用して100(またはSetMaxOpenConnsに与えた値)のデータベース・サーバーへのアイドル接続を行うことができます。

関連する問題