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

У меня есть два индекса, один для заголовка столбца и другой для типа . Я использовал 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 ядра ЦП справятся с этим? Любая помощь приветствуется.

0
задан 11 September 2019 в 20:01
1 ответ

Добавить ИНДЕКС (заголовок, тип) (в любом порядке). Это будет лучше, чем использование index_merge.

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

3
ответ дан 4 December 2019 в 12:14

Теги

Похожие вопросы