2012年10月25日星期四

小记:解决mysql机器上的单CPU过高

最近某一mysql机器有告警,显示单CPU占用常常超过90%。
奇怪的是,机器上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

执行后CPU的IO WAIT都变得比较平均了。

没有评论:

发表评论