При выполнении некоторых тестов с flask-socketio (в uwsgi с gevent) мы заметили, что при добавлении большего количества клиентов использование процессора в процессе socketio быстро достигает 85%. Странно то, что, кажется, не имеет значения, находятся ли клиенты в активном общении или просто все бездельничают.
Я использовал pyflame для анализа происходящего, и кажется, что более 50% времени тратитсяв server.py:_service_task, большинство из которых находится в sleep (), а другая часть в check_ping_timeout. Мне удалось найти несколько сообщений stackoverflow, описывающих то же поведение для циклов ожидания в режиме ожидания, но в описанном решении было ввести sleep (), что _service_task уже делает.
Это произошло со 150 клиентами на ec2 t3маленький экземплярСтранно то, что этого не происходит с 50 клиентами. (аналогичное поведение на более крупных типах экземпляров с около 300 клиентами)
Это нормально? Моя главная проблема заключается в том, что трудно определить, перегружен ли сервер.