设为首页 加入收藏

TOP

MySQL 调优基础(一) CPU与进程(四)
2015-11-21 01:38:18 来源: 作者: 【 】 浏览:8
Tags:MySQL 基础 CPU 进程
[root@localhost ~]# ps -mp 2412 -o THREAD,pmem,rss,vsz,tid,pid USER %CPU PRI SCNT WCHAN USER SYSTEM %MEM RSS VSZ TID PID mysql 6.7 - - - - - 42.8 441212 752744 - 2412 mysql 6.5 19 - - - - - - - 2412 - mysql 0.0 19 - - - - - - - 2414 - mysql 0.0 19 - - - - - - - 2415 - mysql 0.0 19 - - - - - - - 2416 - mysql 0.0 19 - - - - - - - 2417 - mysql 0.0 19 - - - - - - - 2418 - mysql 0.0 19 - - - - - - - 2419 - mysql 0.0 19 - - - - - - - 2420 - mysql 0.0 19 - - - - - - - 2421 - mysql 0.0 19 - - - - - - - 2422 - mysql 0.0 19 - - - - - - - 2423 - mysql 0.0 19 - - - - - - - 2425 - mysql 0.0 19 - - - - - - - 2426 - mysql 0.0 19 - - - - - - - 2427 - mysql 0.0 19 - - - - - - - 2428 - mysql 0.0 19 - - - - - - - 2429 - mysql 0.0 19 - - - - - - - 2430 - mysql 0.0 19 - - - - - - - 2431 - mysql 0.0 19 - - - - - - - 2432 - mysql 0.0 19 - - - - - - - 2433 - mysql 0.0 19 - - - - - - - 2434 -

?

?
先获得 mysqld 的基础PID 2412,
?
然后查看其线程的信息:ps -mp 2412-o THREAD,pmem,rss,vsz,tid,pid ( -p 指定进程PID, -o 指定输出格式,参见man ps)
?
第一列就是关于线程CPU的信息。另外我们也可以查出是占有的CPU很高的线程的tid。
?
关于ps我们一般使用 ps -elf , 如果想查看线程,可以 ps -elLf,其中的L表示 Leight weight process轻量级进程。
?
3.5 mpstat(multi processor stat) 命令查看多核CPU中每个CPU核心的信息
?
[root@localhost ~]# mpstat
Linux 2.6.32-504.el6.i686 (localhost.localdomain) ? ? ? 09/30/2015 ? ? ?_i686_ ?(1 CPU)
?
04:11:50 PM ?CPU ? ?%usr ? %nice ? ?%sys %iowait ? ?%irq ? %soft ?%steal ?%guest ? %idle
04:11:50 PM ?all ? ?0.26 ? ?0.02 ? ?4.30 ? ?0.27 ? ?0.26 ? ?0.15 ? ?0.00 ? ?0.00 ? 94.74
这里因为 虚拟机中的单核CPU,所以只显示all,没有显示其它核心的CPU使用情况。
?
4. CPU 相关调优
?
1)使用上面介绍的工具:top, vmstat, iostat, ps -mp xxx -o, mpstat 等,可以确认是否存在 CPU 瓶颈。然后确认 user time, system time, wait time, context switch......那种占用比例高,确认是哪个进程占用CPU高。如果能确认是 mysqld 的相关进程,那么就可以从 mysql 上入手进行调优。比如使用mysql的命令 show processlist ;查看是哪个sql导致的,找到sql之后,进行优化或者重写等等,或者将其放到slave上去运行。
?
2)如果是 非必须的进程占用CPU,那么可以杀掉,然后使用cron让其在非高峰期去执行;或者使用 renice 命令降低其优先级;
?
[root@localhost ~]# renice -n -10 -p 2041
2041: old priority 10, new priority -10
将进程 2041 的优先级设置为 -10.
?
3)可以跟踪进程,查找原因:strace -aef -p spid -o file
?
[root@localhost ~]# strace -aef -p 2041 -o mysql.txt
Process 2041 attached - interrupt to quit
^CProcess 2041 detached
[root@localhost ~]# ll mysql.txt
-rw-r--r-- 1 root root 10091 Sep 30 16:44 mysql.txt
[root@localhost ~]# head mysql.txt
read(0, "\33", 1) = 1
read(0, "[", 1) = 1
read(0, "A", 1) = 1
write(1, "select version();", 17) = 17
read(0, "\n", 1) = 1
write(1, "\n", 1) = 1
ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT TERM CONT TSTP WINCH], [], 8) = 0
rt_sigaction(SIGINT, {0x8053ac0, [INT], SA_RESTART}, NULL, 8) = 0
rt_sigaction(SIGTSTP, {SIG_DFL, [], 0}, NULL, 8) = 0

?

4)换更好的CPU。
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MySQL 调优基础(四) Linux 磁盘IO 下一篇卸载MySQL5.0

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: