В чём причина постепенного увеличения нагрузки на процессор?
Дано:
Сервер с процессором с 1 ядром, 1 гб оперативной памяти и примерно 30-40 тысяч http запросов в сутки. Так же имеется файл подкачки на 8 Гб.
Язык проекта - python 3.7. Веб-сервер - flask под gunicorn + nginx. База данных - MySQL server 8.
Проблема в том, что как только я перезапускаю flask веб-сервер, нагрузка на процессор находится на уровне 10-20%, но потом, в течение какого-то времени, поднимается до 100%. Это может происходить и несколько часов.
Я не могу понять по какой причине это может происходить. Может большое кол-во запросов постепенно создают какую-то очередь?
Во всех циклах while есть time.sleep.
В каких-то местах веб-сервер создаёт отдельные потоки через модуль threading. Может с ними какая-то беда? (раньше такого не было)
Ответы (1 шт):
Проблема была (и остаётся) в том, что по какой-то причине flask не закрывает некоторые соединения, из-за чего со временем threading.active_count() (общее кол-во открытых потоков) постепенно накапливается и эти открытые потоки никак не закрываются.
Скорее всего в одной из функции, которая обрабатывает запрос, открывается какое-то соединение и, после, не закрывается должным образом.
Не забывайте правильно закрывать все соединения, открытые файлы и тд!