daurnimator / lua-http

HTTP Library for Lua. Supports HTTP(S) 1.0, 1.1 and 2.0; client and server.
https://daurnimator.github.io/lua-http/
MIT License
778 stars 80 forks source link

Freeswitch: Lua performance bottleneck after importing http.request #201

Open Ajinkya009 opened 2 years ago

Ajinkya009 commented 2 years ago

We use Freeswitch stack with 4000 channels to send IVR calls. The logic is written in Lua. We need to send a POST request whenever a call gets picked up. For this purpose we are using lua-http package. Both the functionalities, i.e. outbound calling and sending POST request are implemented in same Lua file. When we import lua-http package (require "http.request"), we observe high CPU utilization (more than 95%). This also affects outbound calls. We have also observed that, whenever number of threads importing the library cross 1500, system starts slowing down. One possible solution is to restrict number of threads but that would reduce number of outbound calls. Is there anything else we can do to remove this bottleneck?

System configuration: Operating system: Debian, 4 core CPU, 16G RAM

daurnimator commented 2 years ago

That's really odd.... Do you have a way for me to replicate? preferably outside of the context of freeswitch?

Ajinkya009 commented 2 years ago

@daurnimator Thank you for responding. I've attached two scripts which will help you in reproducing the issue. lua_script: local request = require "http.request"

Bash:

!/bin/sh

set -m # Enable Job Control for i in seq 3000; do # start 3000 jobs in parallel lua5.3 ~/Documents/scripts/lua_script.lua & done

daurnimator commented 2 years ago

That script doesn't fail for me.

Ajinkya009 commented 2 years ago

@daurnimator Could you please check CPU utilization. I've attached a screenshot of CPU utilization on my machine. Please note we observed this with just 200 threads. 200_threads_with_http_request .

Ajinkya009 commented 2 years ago

@daurnimator Did you check this further?