Performance testing and profiling ================================= Load testing ------------ The venueless source tree includes a small load testing tool that opens up many websocket connections to a venueless server, sends messages and measures response times. To use it, open up the folder and install the dependencies:: $ cd load-test $ npm install Then, you can use it like this:: $ npm start ws://localhost:8375/ws/world/sample/ To modify the load testing parameters, you can adjust the following command line options: ``--clients`` The number of clients to simulate that connect to the websocket. ``--rampup`` The wait time in milliseconds between the creation of two new clients. ``--msgs`` The total number of chat messages per second to emulate (once all clients are connected). Note that the regular development webserver started by our docker compose setup is a single-threaded, non-optimized setup. To run a more production-like setting, you can run the following commands:: $ docker-compose stop server $ docker-compose run -p 8375:8375 \ --entrypoint "gunicorn -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8375 -w 12 venueless.asgi:application" \ server Replace ``12`` with two times the number of CPU cores you have. Note: With these settings, the server will not automatically reload when you change the code. Profiling --------- To find out which part of the server code is eating your CPU, you can start a profiled server. To do so with our standard setup, execute the following commands:: $ docker-compose stop server $ docker-compose run -p 8375:8375 \ --entrypoint "python manage.py runserver_profiled 0.0.0.0:8375" \ server Then, apply your load, e.g. run the load testing tool from above or use venueless manually. Once you hit Ctrl+C, the console will show a list of all called functions and the time the CPU spent on them. The output is generated by `yappi`_, so please read there documentation for in-depth guidance what it means. You can also trigger statistical output without stopping the server by running the following command in a separate shell:: $ docker-compose kill -s SIGUSR1 server Note: With these settings, the server will not automatically reload when you change the code. .. _yappi: https://github.com/sumerc/yappi