奇怪的是,机器上4个CPU,仅CPU 0的占用较高,而其他三个CPU很闲。
继续检查发现,CPU 0的占用高,主要都花在iowait上。
可是,即便是IO高,也应该每个CPU的IOWAIT都高,毕竟mysqld是一个多线程服务器。
为了验证这点,输入:top,按f,按j,按空格,按shift+h——查看每个线程的执行情况,并显示该线程正在哪个CPU上执行。
观察发现,mysqld的线程几乎都在cpu 0上执行,难怪CPU 0的占用高。
于是简单地写个脚本来分担CPU 0的压力:
vi set_mysqld_cpu_affinity.sh
#!/bin/bash
v_list=`ps -Lf -C mysqld h| awk '{print $4}'`
for p in $v_list
do
taskset -cp 1,2,3 $p
done
for p in $v_list
do
taskset -cp 1,2,3 $p
done
执行后CPU的IO WAIT都变得比较平均了。