如何检测导致服务器负载过高的进程(和 mysql 查询)?

如何检测导致服务器负载过高的进程(和 mysql 查询)?

有时我的服务器 (centos 4) 上的负载会跳升到 15 或更高。我需要找出是什么进程导致了服务器负载这么高。有没有脚本可以帮我处理这个问题?我认为这是由 mysql 引起的,所以即使发现 sql 查询也会有很大帮助。

答案1

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

  • iotop
  • top -b -i -n 10
  • atop并按D
  • htop->F2添加 2 列IO_RBYTESIO_WBYTES然后F6排序
  • ...

您应该特别注意D状态(不间断睡眠)中的进程:

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

答案2

SHOW FULL PROCESSLIST\G

寻找一些可以长时间运行的东西。

然后解释一下它是否正在进行全表扫描、生成临时表等。

否则,您可以使用免费版 Jet(http://www.jetprofiler.com/

加勒特

答案3

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

慢查询日志包含执行时间超过 long_query_time 秒且需要检查至少 min_examined_row_limit 行的 SQL 语句。long_query_time 的最小值和默认值分别为 0 和 10。

相关内容