如何检测进程(和MySQL查询),使服务器负载较高?

不时加载我的服务器(centos 4)跳到15或更多。 我需要发现哪个进程导致这个高负载的服务器。 那有什么脚本可以处理这个吗? 我认为它是由mysql造成的,所以即使发现sql查询也会有很大的帮助。

通常由磁盘I / O引起的高服务器负载。 有一些方法可以确定哪个进程正在等待磁盘I / O:

  • iotop
  • top -b -i -n 10
  • atop ,然后按D
  • htop – > F2添加2列IO_RBYTESIO_WBYTES ,然后F6进行sorting

你应该特别注意D状态的过程(不间断睡眠):

 watch "ps -eo pid,user,state,command | awk '\$3 == /D/ { print \$0 }'" 
 SHOW FULL PROCESSLIST\G 

寻找一个运行时间长的东西。

然后EXPLAIN看看是否正在进行全表扫描,生成临时表等

否则,你可以使用像免费版本的Jet( http://www.jetprofiler.com/

加勒特

如果mysql是高负载的原因,那么Mysql支持一个slow_query_log参数,一旦启用,它会将任何特别慢的查询logging到文件;
http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html

慢速查询日志由执行超过long_query_time秒的SQL语句组成,并且至less需要检查min_examined_row_limit行。 long_query_time的最小值和默认值分别为0和10。