Сбои Locust — как увеличить время ожидания

#python #flask #locust

#python #flask #locust

Вопрос:

Я создал веб-сервис, используя Flask поверх uWSGI. Тестирование Locust генерирует много сбоев, которые, возможно, связаны с тем, что ответы довольно большие. Как мне установить время ожидания для каждого ответа, прежде чем он завершится сбоем. Мои ошибки разнообразны, но это более крупные ответы, которые терпят неудачу.

 7   GET /api/read/maa?length=0  HTTPError('500 Server Error: INTERNAL SERVER ERROR for url: http://iecdalpptalpp01.astrazeneca.net:5000/api/read/maa?length=0')
73  GET /api/read/maa?length=0  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
7   GET /api/read/maa?length=1  HTTPError('500 Server Error: INTERNAL SERVER ERROR for url: http://iecdalpptalpp01.astrazeneca.net:5000/api/read/maa?length=1')
53  GET /api/read/maa?length=1  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
3   GET /api/read/maa?length=2  HTTPError('500 Server Error: INTERNAL SERVER ERROR for url: http://iecdalpptalpp01.astrazeneca.net:5000/api/read/maa?length=2')
36  GET /api/read/maa?length=2  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
1   GET /api/read/maa?length=3  HTTPError('500 Server Error: INTERNAL SERVER ERROR for url: http://iecdalpptalpp01.astrazeneca.net:5000/api/read/maa?length=3')
36  GET /api/read/maa?length=3  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
34  GET /api/read/maa?length=4  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
33  GET /api/read/maa?length=5  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
23  GET /api/read/maa?length=6  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
24  GET /api/read/maa?length=7  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
13  GET /api/read/maa?length=8  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
5   GET /api/read/maa?length=9  ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
24  GET /api/read/products/1093 ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
29  GET /api/read/products/search?search=lynparza   ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
1   GET /api/read/products/search?search=lynparza   HTTPError('500 Server Error: INTERNAL SERVER ERROR for url: http://iecdalpptalpp01.astrazeneca.net:5000/api/read/products/search?search=lynparza')
  

Мой locustfile выглядит следующим образом:

время импорта из locust import HttpUser, task, между

 class QuickstartUser(HttpUser):
    wait_time = between(1, 2)

    @task
    def index_page(self):
        self.client.get("/api/read/products/1093")
        self.client.get("/api/read/products/search?search=lynparza")

    @task(3)
    def view_item(self):
        for item_id in range(10):
            self.client.get(f"/api/read/maa?length={item_id}")
            time.sleep(0.5)

    # def on_start(self):
    #    self.client.post("/login", json={"username": "foo", "password": "bar"})
  

Комментарии:

1. просто чтобы уточнить: вы хотите, чтобы время ожидания locust истекло до того, как это сделает сервер, или вы хотите, чтобы сервер прекратил закрывать соединения?

2. Я хотел бы увеличить время ожидания для ответа в locust, но если я могу что-нибудь сделать, чтобы остановить сервер, закрывающий соединения, которые могут быть достаточно хорошими

3. Это сервер, который закрывает соединение, поэтому я не думаю, что locust может что-то с этим сделать. Может быть, проверьте конфигурацию вашего сервера?

4. любые подсказки, я на самом деле не серверный парень. Я использую uwsgi на RHEL 7. Я могу выполнять вызовы конечной точки вручную, просматривать браузер до конечной точки и не получать никаких проблем. Даже не используя nginx.

Ответ №1:

После долгой возни я увеличил количество открытых файлов в Linux и nginx, увеличил очередь сокетов со 100 до 1024 и использовал пул баз данных oracle с threaded=True при создании пула сеансов — и теперь я получаю разумные результаты.

 sysctl -w net.core.somaxconn=1024
  

https://www.cyberciti.biz/faq/linux-unix-nginx-too-many-open-files/