Я запускаю этот код ниже в консоли браузера, чтобы проверить, уязвим ли я для 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 ядра ЦП справятся с этим? Любая помощь приветствуется.
Добавить ИНДЕКС (заголовок, тип)
(в любом порядке). Это будет лучше, чем использование index_merge.
Понизьте long_query_time
до 0,1 или, возможно, 0. Атака DOS (или взлом пароля) приведет к множеству быстрых запросов. Затем используйте pt-query-digest
, чтобы подвести итоги sloglog.