Mysql
mysqld 使用過多的 CPU
我在瀏覽器控制台中執行以下程式碼,以測試我是否容易受到 DoS 攻擊,我意識到
mysqld
當我執行程式碼時,它使用了大約 90% 的 CPU 和 9.3 的 RAM 大約 5 秒,而伺服器沒有響應直到它完成請求。最初的 nginx 使用 50% 的 CPU,也mysqld
這樣做,2 秒後mysqld
開始使用 90% 的 CPU。我想知道它是否正常,或者是否有問題,我的意思是,看起來有問題。
var i; for(i = 0; i < 50; i++){ $.ajax({url:'https://example.com'}) }
top
執行 js 時命令的結果:top - 10:05:51 up 3 days, 16:40, 0 users, load average: 0.25, 0.07, 0.02 Tasks: 35 total, 1 running, 34 sleeping, 0 stopped, 0 zombie %Cpu(s): 94.7 us, 5.0 sy, 0.0 ni, 0.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 2097152 total, 635476 free, 640476 used, 821200 buff/cache KiB Swap: 2097152 total, 2067536 free, 29616 used. 1320984 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 10515 mysql 20 0 696732 197796 9132 S 93.0 9.4 4:15.96 mysqld 7339 nobody 20 0 259664 38300 4100 S 1.7 1.8 0:21.65 nginx 15184 myusername 20 0 367452 9232 6052 S 0.7 0.4 0:00.10 php-fpm 15185 myusername 20 0 367452 9244 6052 S 0.7 0.4 0:00.10 php-fpm 15186 myusername 20 0 364188 5676 4004 S 0.7 0.3 0:00.08 php-fpm 15187 myusername 20 0 364188 5676 4004 S 0.7 0.3 0:00.08 php-fpm 15188 myusername 20 0 364188 5676 4004 S 0.7 0.3 0:00.08 php-fpm 15189 myusername 20 0 364188 5680 4008 S 0.7 0.3 0:00.08 php-fpm 402 root 20 0 117760 2464 940 S 0.3 0.1 0:51.09 supervisord 15182 myusername 20 0 367452 9332 6124 S 0.3 0.4 0:00.11 php-fpm 15183 myusername 20 0 364188 5684 4008 S 0.3 0.3 0:00.08 php-fpm 1 root 20 0 178412 3080 2100 S 0.0 0.1 0:14.00 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd/2867 3 root 20 0 0 0 0 S 0.0 0.0 0:00.05 khelper/2867 64 root 20 0 47272 6636 6504 S 0.0 0.3 0:03.09 systemd-journal 66 root 20 0 42768 952 948 S 0.0 0.0 0:00.00 systemd-udevd
我不知道它是否有幫助,但我
php-fpm.conf
在這裡:https ://pastebin.com/raw/iyNR55Ek我啟用了 slow_query_log(1 秒),並且沒有慢查詢。這是執行的查詢:
SELECT title, slug FROM table_name WHERE slug = ? AND type = ? LIMIT 1, 30
這是來自
EXPLAIN
:id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra 1 | SIMPLE | table_name | index_merge | slug,type | slug,type | 63,36 | NULL | 760 | Using intersect(slug,type); Using where
我有兩個索引,一個用於列
slug
,另一個用於type
. 我OPTMIZE
在我的桌子上用過,但沒有變化。注意:我在文件中沒有任何自定義配置
my.cnf
。它是空白的。這是我的伺服器配置:
CPU: 1 core RAM: 2 GB SSD: 15GB Nginx: 1.16 PHP-FPM 7.3.8 Centos 7
也許我的伺服器配置很低(對於我在 js 中所做的請求量)?我在 google pagespeed 上的得分為 97/100,我唯一的問題是 TTFB(約為 750 毫秒)。
如果問題出在我的伺服器配置上,那麼 2 個 CPU 核心可以處理嗎?歡迎任何幫助。
添加
INDEX(slug, type)
(以任意順序)。它會比使用“index_merge”更好。低於
long_query_time
0.1 或可能為 0。DOS 攻擊(或密碼破解)將是大量快速查詢。然後pt-query-digest
用來總結sloglog。