記一次mysql導致服務器CPU突然暴漲的問題
9月30號20點,感覺網站后臺怎么越來越慢,打開阿里云看了服務器CPU竟然在幾天內,一直是99%~100%,
今天一天就覺得網站訪問慢,還想著優化讀取數據,原來CPU早就干爆了。
想想有人攻擊的話也不至于一直這樣,putty上top一下,果然是mysql占滿了CPU,大致查找策略如下
1、通過ps命令查找mysql進程ID
ps aux |grep mysqld
假設找到的pid為1796
2、使用top查找高CPU利用率的線程ID
top -Hp 1796
記錄高CPU利用率的線程ID,例如:12345
3、找到線程對應的sql語句
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = (SELECT THREAD_ID FROM performance_schema.threads a WHERE THREAD_OS_ID = 12345);
我自己還是查了一下performance_schema.threads,找到THREAD_OS_ID的值和 top -Hp xxxx 對應

在THREADS中查看PROCESSLIST_INFO的內容,有某條sql的記錄,這條sql就是耗費CPU的sql,
發現這個sql中where業務表某個字段,這個業務表也就是6萬多條數據,于是將這個字段設置為索引,眼睜睜的看到占用CPU從300%跌倒20%左右。
因為一件蠢的事情CPU占用,總算的有了找問題的思路

浙公網安備 33010602011771號