Sysbench 0.5
需要先修改drv_mysql.c代码以解决高并发下初始化超时的问题,再进行编译和安装。
- 修改drv_mysql.c代码。
修改drv_mysql.c代码,以解决在MIX场景512个并发线程时初始化超时的问题,该问题报错为:
1
FATAL: Worker threads failed to initialize within 30 seconds!
具体做法是在client发起连接时增加一个timeout参数,使连接超时得以返回,然后重新发起连接。这样就能够避免初始化超时的问题,保证程序的正常运行。
- 打开drv_mysql.c文件。
1
vi /home/sysbench-0.5/sysbench/drivers/mysql/drv_mysql.c
- 在mysql_drv_real_connect函数末尾找到“return mysql_real_connect(....) == NULL;”。
- 按“i”进入编辑模式,并将“return mysql_real_connect(....) == NULL;”这段代码替换为如下内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#if 0 return mysql_real_connect(con, db_mysql_con->host, db_mysql_con->user, db_mysql_con->password, db_mysql_con->db, db_mysql_con->port, db_mysql_con->socket, #if MYSQL_VERSION_ID >= 50000 CLIENT_MULTI_STATEMENTS #else 0 #endif ) == NULL; #else unsigned int timeout = 5; if (mysql_options(con, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&timeout)) { DEBUG("0x%p mysql_options MYSQL_OPT_CONNECT_TIMEOUT failed", con); } int ret = 0; int i = 0; for (; i < 5; i++) { ret = (mysql_real_connect(con, db_mysql_con->host, db_mysql_con->user, db_mysql_con->password, db_mysql_con->db, db_mysql_con->port, db_mysql_con->socket, #if MYSQL_VERSION_ID >= 50000 CLIENT_MULTI_STATEMENTS #else 0 #endif ) == NULL); if (ret == 0) { DEBUG("0x%p mysql_options succeed", con); break; } DEBUG("0x%p mysql_options MYSQL_OPT_CONNECT_TIMEOUT timeout", con); usleep(1000); } return ret; #endif
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开drv_mysql.c文件。
- 进入Sysbench源码所在目录。
1
cd /home/sysbench-0.5
- 编译和安装。
1 2 3 4
./autogen.sh ./configure make -j128 make -j128 install
编译命令参数-j后面的数字表示您需要同时进行并行编译的CPU核数,此数值应设置为小于或等于CPU核数。您可以使用以下命令查看CPU核数:
1
cat /proc/cpuinfo | grep processor | wc -l
- 查看Sysbench版本。
1
sysbench --version
预期结果显示为:
1
sysbench 0.5
父主题: 编译安装