Назад | Перейти на главную страницу

mysqld использует слишком много ЦП

Я запустил этот код в консоли браузера, чтобы проверить, уязвим ли я к DoS, и понял, что mysqld использует ~ 90% ЦП и 9,3 ОЗУ примерно на 5 секунд, когда я запускаю код, и сервер не отвечает, пока не завершит запросы. Первоначально nginx использует 50% ЦП, а также mysqld сделайте то же самое, через 2 секунды mysqld начать использовать 90% ЦП.

Я хочу знать, нормально ли это, или есть проблема, я имею в виду, похоже, что есть проблема.

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)? У меня оценка 97/100 на скорости страниц Google, единственная проблема, с которой я столкнулся, - это TTFB (который составляет ~ 750 мс).

Если проблема в конфигурации моего сервера, то с ней справятся 2 ядра ЦП? Любая помощь приветствуется.

Добавить INDEX(slug, type) (в любом порядке). Это будет лучше, чем использование index_merge.

Нижняя long_query_time до 0,1 или, возможно, 0. Атака DOS (или взлом пароля) приведет к множеству быстрых запросов. Затем используйте pt-query-digest подвести итог слоглогу.