sysbench
sysbench copied to clipboard
memory leaking when killing queries is part of test case
With minor changes to the oltp_read_write adding a KILL connection results in sysbench leaking memory (quickly).
sysbench files - https://gist.github.com/grooverdan/1c956eb324261adf1b093521f9d43542
sysbench-master-df89d34c410a2277e19f77e47e535d0890b2029b affected.
mariadb-connector-c 3.2.7-1.fc36 used (no outstanding memory leak faults).
The attempted patch of the following wasn't sufficient:
diff --git a/src/drivers/mysql/drv_mysql.c b/src/drivers/mysql/drv_mysql.c
index 58600b8..61985a1 100644
--- a/src/drivers/mysql/drv_mysql.c
+++ b/src/drivers/mysql/drv_mysql.c
@@ -595,6 +595,7 @@ int mysql_drv_prepare(db_stmt_t *stmt, const char *query, size_t len)
log_text(LOG_INFO,
"Failed to prepare query \"%s\" (%d: %s), using emulation",
query, rc, mysql_error(con));
+ mysql_stmt_close(mystmt);
goto emulate;
}
else
@@ -788,6 +789,9 @@ static db_error_t check_error(db_conn_t *sb_con, const char *func,
db_mysql_conn_t *db_mysql_con = (db_mysql_conn_t *) sb_con->ptr;
MYSQL *con = db_mysql_con->mysql;
+ if (sb_con->state == DB_CONN_RESULT_SET)
+ mysql_drv_free_results(&sb_con->rs);
+
const unsigned int error = mysql_errno(con);
DEBUG("mysql_errno(%p) = %u", con, sb_con->sql_errno);
$ sudo /usr/share/bcc/tools/memleak -c "sysbench/src/sysbench --mysql-user=root --mysql-db=test --mysql-socket=/tmp/build-mariadb-server-10.6.sock --threads=16 --time=60 --report-interval=20 --mysql-ignore-errors=1927,1213,2013,2006 oltp_read_write_kill_MDEV-29190.lua run" Executing 'sysbench/src/sysbench --mysql-user=root --mysql-db=test --mysql-socket=/tmp/build-mariadb-server-10.6.sock --threads=16 --time=60 --report-interval=20 --mysql-ignore-errors=1927,1213,2013,2006 oltp_read_write_kill_MDEV-29190.lua run' and tracing the resulting process. sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3) Running the test with following options: Number of threads: 16 Report intermediate results every 20 second(s) Initializing random number generator from current time Initializing worker threads... Threads started! Attaching to pid 395171, Ctrl+C to quit. [18:57:47] Top 10 stacks with outstanding allocations: 640 bytes in 5 allocations from stack db_connection_create+0x16 [sysbench] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] 896 bytes in 7 allocations from stack db_connection_create+0x16 [sysbench] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] [unknown] 1536 bytes in 12 allocations from stack db_connection_create+0x16 [sysbench] [unknown] [unknown] [unknown] [unknown] [unknown] 6144 bytes in 48 allocations from stack db_connection_create+0x16 [sysbench] [unknown] [unknown] [unknown] [unknown] [unknown] 6784 bytes in 53 allocations from stack db_connection_create+0x16 [sysbench] [unknown] [unknown] [unknown] [unknown] [unknown] 1300800 bytes in 13550 allocations from stack [unknown] [libmariadb.so.3] 1967328 bytes in 13662 allocations from stack mysql_store_result+0x53 [libmariadb.so.3] 224603472 bytes in 27506 allocations from stack [unknown] [libmariadb.so.3] [18:57:53] Top 10 stacks with outstanding allocations: 49152 bytes in 6 allocations from stack [unknown] [libmariadb.so.3] [unknown] 352640 bytes in 380 allocations from stack mysql_stmt_init+0x1a [libmariadb.so.3] 416976 bytes in 51 allocations from stack mysql_optionsv+0x1454 [libmariadb.so.3] 729344 bytes in 352 allocations from stack mysql_stmt_init+0x196 [libmariadb.so.3] 814296 bytes in 393 allocations from stack mysql_stmt_init+0xf1 [libmariadb.so.3] 835584 bytes in 51 allocations from stack [unknown] [libmariadb.so.3] 2018800 bytes in 490 allocations from stack mysql_stmt_init+0x146 [libmariadb.so.3] 4833312 bytes in 50347 allocations from stack [unknown] [libmariadb.so.3] 7267248 bytes in 50467 allocations from stack mysql_store_result+0x53 [libmariadb.so.3] 830521856 bytes in 101696 allocations from stack [unknown] [libmariadb.so.3] [18:57:59] Top 10 stacks with outstanding allocations: 12032 bytes in 94 allocations from stack db_connection_create+0x16 [sysbench] [unknown] [unknown] [unknown] [unknown] [unknown] 25984 bytes in 28 allocations from stack mysql_stmt_init+0x1a [libmariadb.so.3] 60088 bytes in 29 allocations from stack mysql_stmt_init+0x196 [libmariadb.so.3] 65408 bytes in 8 allocations from stack mysql_optionsv+0x1454 [libmariadb.so.3] 68376 bytes in 33 allocations from stack mysql_stmt_init+0xf1 [libmariadb.so.3] 114688 bytes in 7 allocations from stack [unknown] [libmariadb.so.3] 197760 bytes in 48 allocations from stack mysql_stmt_init+0x146 [libmariadb.so.3] 2391744 bytes in 24914 allocations from stack [unknown] [libmariadb.so.3] 3598560 bytes in 24990 allocations from stack mysql_store_result+0x53 [libmariadb.so.3] 409584264 bytes in 50149 allocations from stack [unknown] [libmariadb.so.3]