有时我的服务器 (centos 4) 上的负载会跳升到 15 或更高。我需要找出是什么进程导致了服务器负载这么高。有没有脚本可以帮我处理这个问题?我认为这是由 mysql 引起的,所以即使发现 sql 查询也会有很大帮助。
答案1
服务器负载过高通常由磁盘 I/O 引起。有几种方法可以确定哪个进程正在等待磁盘 I/O:
iotop
top -b -i -n 10
atop
并按D
htop
->F2
添加 2 列IO_RBYTES
,IO_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。