MySQL(InnoDB)-等待 futex 的进程

MySQL(InnoDB)-等待 futex 的进程

目前正在对 MySQL 服务器进行故障排除,该服务器在 futex 系统调用上花费了大量时间。所有数据库都是 InnoDB,并且在我的 16 核机器上负载很高,并且超过一半的 CPU 时间都在系统中。

对某个进程运行 strace 可以发现它在 futex 上花费了大量时间

root@db1:~# strace -c -p 5026
Process 5026 attached
^CProcess 5026 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 99.95    9.583778        3651      2625       897 futex
  0.02    0.001987          86        23           poll
  0.01    0.001349         337         4           pwrite
  0.01    0.000702         351         2           access
  0.01    0.000561           5       121           sendto
  0.00    0.000410           3       125        23 recvfrom
  0.00    0.000082          41         2           setsockopt
  0.00    0.000071          36         2           getpeername
  0.00    0.000000           0        74           read
  0.00    0.000000           0        18           write
  0.00    0.000000           0         4           open
  0.00    0.000000           0         6           close
  0.00    0.000000           0        14         1 lstat
  0.00    0.000000           0        45           lseek
  0.00    0.000000           0         7           pread
  0.00    0.000000           0         5           sched_yield
  0.00    0.000000           0         2           shutdown
  0.00    0.000000           0         2           unlink
  0.00    0.000000           0         3         3 readlink
------ ----------- ----------- --------- --------- ----------------
100.00    9.588940                  3084       924 total

我的配置中与 InnoDB 相关的部分如下,innodb_thread_concurrency 设置为 16,与 CPU 数量相匹配,所以我很惊讶它正在等待 futex:

innodb_buffer_pool_size = 26000M
innodb_log_file_size = 1250M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_flush_neighbors = 0
innodb_log_files_in_group = 3
innodb_log_buffer_size = 8M
innodb_thread_concurrency = 16
innodb_file_io_threads = 4
innodb_lock_wait_timeout = 180
innodb_file_per_table
innodb_max_dirty_pages_pct = 90

还有什么其他事情会导致 futex 长时间等待?我们的主机是否有问题,从而导致这种情况?

相关内容