问题现象
开启 cgroup 使用 ps,出现如下堆栈的 core。
#3 oceanbase::obmysql::ObEasySqlRequestOperator::get_sql_session (this=<optimized out>, req=0x7fd6336cec48) at ./deps/oblib/src/rpc/obmysql/ob_easy_sql_request_operator.cpp:33
#4 0x000000000bfff8fb in oceanbase::rpc::ObSqlRequestOperator::get_sql_session (this=<optimized out>, req=0x7fd6336cec48) at ./deps/oblib/src/rpc/ob_sql_request_operator.h:84
#5 oceanbase::observer::ObMPPacketSender::get_conn (this=0x7fd3aa435120) at ./src/observer/mysql/obmp_packet_sender.cpp:689
#6 oceanbase::observer::ObMPBase::get_conn (this=0x7fd3aa4350e0) at ./src/observer/mysql/obmp_base.cpp:186
#7 oceanbase::observer::ObMPStmtExecute::process_execute_stmt (this=this@entry=0x7fd3aa4350e0, multi_stmt_item=..., session=..., has_more_result=false, force_sync_resp=false, async_resp_used=@0x7fdb4b0c03c3: true) at ./src/observer/mysql/obmp_stmt_execute.cpp:1772
#8 0x000000000c0012fd in oceanbase::observer::ObMPStmtExecute::process (this=0x7fd3aa4350e0) at ./src/observer/mysql/obmp_stmt_execute.cpp:1901
#9 0x000000000541ff5e in oceanbase::rpc::frame::ObSqlProcessor::run (this=0x7fd3aa4350e0) at ./deps/oblib/src/rpc/frame/ob_sql_processor.cpp:50
问题原因
代码中为了做资源隔离的控制,在执行完请求回了包以后,调用 get_conn 接口获取连接,但是此时连接可能已经不可访问了,导致了 core。
问题的风险及影响
导致 OBServer 随机的 core,在关闭 sql_nio 的情况下概率更大。
影响版本
OceanBase 数据库 V3.2.4 BP4(oceanbase-3.2.4.4-104000052023062021)、V4.1.0 BP2(oceanbase-4.1.0.1-102000042023061309)及之前的 BP 版本,V4.2.0 Beta 及之前版本。
解决方法及规避方式
- 关闭 cgroup,也就是取消挂载的 cgroup 目录后重启,可以避免这个问题。
- 升级到问题已修复版本,目前已修复的版本包含 OceanBase 数据库 V3.2.4 BP5(oceanbase-3.2.4.5-105000012023081513)、V4.1.0 BP3(oceanbase-4.1.0.2-103000072023081111)、V4.2.0 GA(oceanbase-4.2.0.0-100010082023083014)及之后版本。