Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1.x] Websocket and admin on HTTP doesn't respond #3062

Closed
SakibFarhad opened this issue Sep 12, 2022 · 10 comments
Closed

[1.x] Websocket and admin on HTTP doesn't respond #3062

SakibFarhad opened this issue Sep 12, 2022 · 10 comments
Labels

Comments

@SakibFarhad
Copy link

SakibFarhad commented Sep 12, 2022

What version of Janus is this happening on?
v1.0.3 "commit-hash": "95bfcf35969894dd3361b6f2d65fd6a453139b11"
OS: Redhat 7.5

"crypto": "OpenSSL 1.0.2k-fips  26 Jan 2017",
"glib2": "2.56.1",
"jansson": "2.13.1",
"libcurl": "7.29.0",
"libnice": "0.1.18.1",
"libsrtp": "libsrtp2 2.2.0" 
"libwebsocket": "v3.2-stable"
"libmicrohttpd": "0.9.71"
"paho-mqtt": "1.3.10"
"libopus": "1.3.1"
"libogg": "1.3.4"

Have you tested a more recent version of Janus too?
No, This was latest version when we deployed to production

Was this working before?
Didn't face it before.

Description
Recently very frequently we are facing this issue, Websocket and admin HTTP API stops responding but the janus-gw keeps running.
It is happening randomly.
I will provide 2 logs, one with the issue and one without the issue.

Log With Issue
log
[WSS]
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] 49 ((null))
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] 20 (LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION)
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] WebSocket connection opened from 127.0.0.1
[Mon Sep 12 12:46:29 2022] Checking if 127.0.0.1 is allowed to contact janus interface
[Mon Sep 12 12:46:29 2022] Yep
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] WebSocket connection accepted
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0]   -- Ready to be used!
[Mon Sep 12 12:46:29 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445205784171847070 us
[Mon Sep 12 12:46:29 2022] Event label transports, name Transports
[Mon Sep 12 12:46:29 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/mevents/transports
[Mon Sep 12 12:46:29 2022] About to send message to /janus/mevents/transports
[Mon Sep 12 12:46:29 2022] Converted message to JSON for /janus/mevents/transports
[Mon Sep 12 12:46:29 2022] MQTT EVH message sent to topic /janus/mevents/transports on tcp://<MASKED>. Result 0
[Mon Sep 12 12:46:29 2022] Done with message to JSON for /janus/mevents/transports
[Mon Sep 12 12:46:29 2022] Debug: Thread done publishing MQTT Publish event on /janus/mevents/transports
[Mon Sep 12 12:46:29 2022] MQTT EVH client has successfully published to MQTT base topic: /janus/mevents
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] Got 45 bytes:
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] First fragment: 45 bytes, 0 remaining
[Mon Sep 12 12:46:29 2022] {"janus":"create","transaction":"tgdvjt3e9i"}
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] Done, parsing message: 45 bytes
[Mon Sep 12 12:46:29 2022] Got a Janus API request from janus.transport.websockets (0x7f541c0905e0)
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] 38 ((null))
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] 78 ((null))
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] WS connection down, closing
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] Destroying WebSocket client
[Mon Sep 12 12:46:35 2022] A janus.transport.websockets transport instance has gone away (0x7f541c0905e0)
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0]   -- closed
[Mon Sep 12 12:46:35 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445205784171847085 us
[Mon Sep 12 12:46:35 2022] Event label transports, name Transports
[Mon Sep 12 12:46:35 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/mevents/transports
[Mon Sep 12 12:46:35 2022] About to send message to /janus/mevents/transports
[Mon Sep 12 12:46:35 2022] Converted message to JSON for /janus/mevents/transports
[Mon Sep 12 12:46:35 2022] MQTT EVH message sent to topic /janus/mevents/transports on tcp://<MASKED>. Result 0
[Mon Sep 12 12:46:35 2022] Done with message to JSON for /janus/mevents/transports
[Mon Sep 12 12:46:35 2022] Debug: Thread done publishing MQTT Publish event on /janus/mevents/transports
[Mon Sep 12 12:46:35 2022] MQTT EVH client has successfully published to MQTT base topic: /janus/mevents
[Mon Sep 12 12:47:05 2022] [WSS-0x7f541c151de0] 49 ((null))

[admin]
[Mon Sep 12 11:19:21 2022] New connection on admin/monitor: 127.0.0.1
[Mon Sep 12 11:19:21 2022] Got an admin/monitor HTTP POST request on /...
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_admin_handler:1766]  ... Just parsing headers for now...
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_headers:1997] Connection: keep-alive
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_headers:1997] Host: <MASKED>
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_headers:1997] X-Forwarded-For: <MASKED>
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_headers:1997] X-Forwarded-Proto: https
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_headers:1997] Content-Length: 365
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_headers:1997] User-Agent: python-requests/2.22.0
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_headers:1997] Accept-Encoding: gzip, deflate
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_headers:1997] Accept: */*
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_headers:1997] Content-Type: application/json
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_admin_handler:1797] Processing HTTP POST request on /...
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_admin_handler:1861]  ... parsing request...
[Mon Sep 12 11:19:21 2022] Processing POST data (application/json) (365 bytes)...
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_admin_handler:1886]   -- Data we have now (365 bytes)
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_admin_handler:1797] Processing HTTP POST request on /...
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_admin_handler:1861]  ... parsing request...
[Mon Sep 12 11:19:21 2022] Processing POST data (application/json) (0 bytes)...
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_admin_handler:1891] Done getting payload, we can answer
[Mon Sep 12 11:19:21 2022] {"janus": "message_plugin", "transaction": "081cb27c11424c858cd0d0d35e6a9e9f", "admin_secret": "janusapi1234", "plugin": "janus.plugin.audiobridge", "request": {"request"
: "create", "audiolevel_event": true, "audiolevel_ext": true, "audio_active_packets": 50, "audio_level_average": 50, "bitrate": 256000, "is_private": false, "permanent": true, "publishers": 200}}
[Mon Sep 12 11:19:21 2022] [transports/janus_http.c:janus_http_request_timeout_create:260] [0x7f54280bc100] create (10)
[Mon Sep 12 11:19:21 2022] Forwarding admin request to the core (0x7f54280b7e10)
[Mon Sep 12 11:19:21 2022] Got an admin API request from janus.transport.http (0x7f5428054a90)
[Mon Sep 12 11:19:21 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445205784171847120 us
[Mon Sep 12 11:19:21 2022] Event label transports, name Transports
[Mon Sep 12 11:19:21 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/mevents/transports
[Mon Sep 12 11:19:21 2022] About to send message to /janus/mevents/transports
[Mon Sep 12 11:19:21 2022] Converted message to JSON for /janus/mevents/transports
[Mon Sep 12 11:19:21 2022] MQTT EVH message sent to topic /janus/mevents/transports on tcp://<MASKED>. Result 0
[Mon Sep 12 11:19:21 2022] Done with message to JSON for /janus/mevents/transports
[Mon Sep 12 11:19:21 2022] Debug: Thread done publishing MQTT Publish event on /janus/mevents/transports
[Mon Sep 12 11:19:21 2022] MQTT EVH client has successfully published to MQTT base topic: /janus/mevents
[Mon Sep 12 11:19:26 2022] [transports/janus_http.c:janus_http_request_timeout_dispatch:229] [0x7f5428013e50] dispatch
[Mon Sep 12 11:19:26 2022] [transports/janus_http.c:janus_http_request_timeout_finalize:239] [0x7f5428013e50] finalize
[Mon Sep 12 11:19:26 2022] [transports/janus_http.c:janus_http_request_completed:2021] Request completed, freeing data
[Mon Sep 12 11:19:31 2022] [transports/janus_http.c:janus_http_request_timeout_dispatch:229] [0x7f54280bc100] dispatch
[Mon Sep 12 11:19:31 2022] [transports/janus_http.c:janus_http_request_timeout_finalize:239] [0x7f54280bc100] finalize
[Mon Sep 12 11:19:31 2022] [transports/janus_http.c:janus_http_request_completed:2021] Request completed, freeing data
Log Without Issue
log
[WSS]
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] 49 ((null))
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] 20 (LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION)
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] WebSocket connection opened from 127.0.0.1
[Mon Sep 12 10:47:36 2022] Checking if 127.0.0.1 is allowed to contact janus interface
[Mon Sep 12 10:47:36 2022] Yep
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] WebSocket connection accepted
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350]   -- Ready to be used!
[Mon Sep 12 10:47:36 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445101152219137693 us
[Mon Sep 12 10:47:36 2022] Event label transports, name Transports
[Mon Sep 12 10:47:36 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/events/transports
[Mon Sep 12 10:47:36 2022] About to send message to /janus/events/transports
[Mon Sep 12 10:47:36 2022] Converted message to JSON for /janus/events/transports
[Mon Sep 12 10:47:36 2022] MQTT EVH message sent to topic /janus/events/transports on tcp://<MASKED>. Result 0
[Mon Sep 12 10:47:36 2022] Done with message to JSON for /janus/events/transports
[Mon Sep 12 10:47:36 2022] Debug: Thread done publishing MQTT Publish event on /janus/events/transports
[Mon Sep 12 10:47:36 2022] MQTT EVH client has successfully published to MQTT base topic: /janus/events
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] Got 45 bytes:
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] First fragment: 45 bytes, 0 remaining
[Mon Sep 12 10:47:36 2022] {"janus":"create","transaction":"2fxatzi7nf"}
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] Done, parsing message: 45 bytes
[Mon Sep 12 10:47:36 2022] Got a Janus API request from janus.transport.websockets (0x7ff828003120)
[Mon Sep 12 10:47:36 2022] Creating new session: 859697652628831; 0x7ff81c009fa0
[Mon Sep 12 10:47:36 2022] Sending Janus API response to janus.transport.websockets (0x7ff828003120)
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] Sending WebSocket message (104 bytes)...
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] Re-allocating to 120 bytes (was 0, response is 104 bytes)
[Mon Sep 12 10:47:36 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445101152219137698 us
[Mon Sep 12 10:47:36 2022] Event label sessions, name Sessions
[Mon Sep 12 10:47:36 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/events/sessions
[Mon Sep 12 10:47:36 2022] About to send message to /janus/events/sessions
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350]   -- First=1, Last=1, Requested=104 bytes, Sent=104 bytes, Missing=0 bytes
[Mon Sep 12 10:47:36 2022] Converted message to JSON for /janus/events/sessions
[Mon Sep 12 10:47:36 2022] MQTT EVH message sent to topic /janus/events/sessions on tcp://<MASKED>. Result 0
[Mon Sep 12 10:47:36 2022] Done with message to JSON for /janus/events/sessions
[Mon Sep 12 10:47:36 2022] Debug: Thread done publishing MQTT Publish event on /janus/events/sessions
[Mon Sep 12 10:47:36 2022] MQTT EVH client has successfully published to MQTT base topic: /janus/events
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] Got 108 bytes:
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] First fragment: 108 bytes, 0 remaining
[Mon Sep 12 10:47:36 2022] {"janus":"attach","plugin":"janus.plugin.videoroom","transaction":"7w9se4nryj","session_id":859697652628831}
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] Done, parsing message: 108 bytes
[Mon Sep 12 10:47:36 2022] Got a Janus API request from janus.transport.websockets (0x7ff828003120)
[Mon Sep 12 10:47:36 2022] Creating new handle in session 859697652628831: 4044072798486462; 0x7ff81c009fa0 0x7ff81c0068f0
[Mon Sep 12 10:47:36 2022] [4044072798486462] Handle thread started; 0x7ff81c0068f0
[Mon Sep 12 10:47:36 2022] [ice.c:janus_ice_handle_thread:1280] [4044072798486462] Looping...
[Mon Sep 12 10:47:36 2022] Sending Janus API response to janus.transport.websockets (0x7ff828003120)
[Mon Sep 12 10:47:36 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445101152219137702 us
[Mon Sep 12 10:47:36 2022] Event label handles, name Handles
[Mon Sep 12 10:47:36 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/events/handles
[Mon Sep 12 10:47:36 2022] About to send message to /janus/events/handles
[Mon Sep 12 10:47:36 2022] Converted message to JSON for /janus/events/handles
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] Sending WebSocket message (139 bytes)...
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] Re-allocating to 155 bytes (was 120, response is 139 bytes)
[Mon Sep 12 10:47:36 2022] MQTT EVH message sent to topic /janus/events/handles on tcp://<MASKED>. Result 0
[Mon Sep 12 10:47:36 2022] Done with message to JSON for /janus/events/handles
[Mon Sep 12 10:47:36 2022] Debug: Thread done publishing MQTT Publish event on /janus/events/handles
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350]   -- First=1, Last=1, Requested=139 bytes, Sent=139 bytes, Missing=0 bytes
[Mon Sep 12 10:47:37 2022] MQTT EVH client has successfully published to MQTT base topic: /janus/events
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350] Got 240 bytes:
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350] First fragment: 240 bytes, 0 remaining
[Mon Sep 12 10:47:37 2022] {"janus":"message","transaction":"gt51wpdp75","body":{"request":"join","room":1050578953976034,"ptype":"publisher","display":"{\"display\":\"Sakib\",\"audio\":true,\"video\":true}"},"handle_id":4044072798486462,"session_id":859697652628831}
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350] Done, parsing message: 240 bytes
[Mon Sep 12 10:47:37 2022] Got a Janus API request from janus.transport.websockets (0x7ff828003120)
[Mon Sep 12 10:47:37 2022] Transport task pool, serving request
[Mon Sep 12 10:47:37 2022] [4044072798486462] There's a message for JANUS VideoRoom plugin
[Mon Sep 12 10:47:37 2022] Creating plugin result...
[Mon Sep 12 10:47:37 2022] Sending Janus API response to janus.transport.websockets (0x7ff828003120)
[Mon Sep 12 10:47:37 2022] Configuring new participant
[Mon Sep 12 10:47:37 2022] Destroying plugin result...
[Mon Sep 12 10:47:37 2022] Configuring new publisher
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350] Sending WebSocket message (87 bytes)...
[Mon Sep 12 10:47:37 2022]   -- Participant ID: 6859012676659152
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350]   -- First=1, Last=1, Requested=87 bytes, Sent=87 bytes, Missing=0 bytes
[Mon Sep 12 10:47:37 2022] Preparing JSON event as a reply
[Mon Sep 12 10:47:37 2022] [4044072798486462] Sending event to transport...
[Mon Sep 12 10:47:37 2022] Sending event to janus.transport.websockets (0x7ff828003120)
[Mon Sep 12 10:47:37 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445101152219137683 us
[Mon Sep 12 10:47:37 2022] Event label plugins, name Plugins
[Mon Sep 12 10:47:37 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/events/plugins
[Mon Sep 12 10:47:37 2022] About to send message to /janus/events/plugins
[Mon Sep 12 10:47:37 2022]   >> 0 (Success)
[Mon Sep 12 10:47:37 2022] Converted message to JSON for /janus/events/plugins
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350] Sending WebSocket message (420 bytes)...
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350] Re-allocating to 436 bytes (was 155, response is 420 bytes)
[Mon Sep 12 10:47:37 2022] MQTT EVH message sent to topic /janus/events/plugins on tcp://<MASKED>. Result 0
[Mon Sep 12 10:47:37 2022] Done with message to JSON for /janus/events/plugins
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350]   -- First=1, Last=1, Requested=420 bytes, Sent=420 bytes, Missing=0 bytes
[Mon Sep 12 10:47:37 2022] Debug: Thread done publishing MQTT Publish event on /janus/events/plugins
[Mon Sep 12 10:47:37 2022] MQTT EVH client has successfully published to MQTT base topic: /janus/events
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350] Got 2353 bytes:
[Mon Sep 12 10:47:37 2022] [WSS-0x7ff828003350] First fragment: 2353 bytes, 0 remaining


[admin]
[Mon Sep 12 10:41:52 2022] New connection on admin/monitor: 127.0.01
[Mon Sep 12 10:41:52 2022] Got an admin/monitor HTTP POST request on /admin...
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_admin_handler:1766]  ... Just parsing headers for now...
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] Host: <MASKED>
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] User-Agent: python-requests/2.22.0
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] Accept-Encoding: gzip, deflate
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] Accept: */*
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] Content-Length: 365
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] Content-Type: application/json
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] WL-Proxy-SSL: true
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] X-Forwarded-Proto: https
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] X-Forwarded-For: <MASKED>
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_headers:1997] Connection: close
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_admin_handler:1797] Processing HTTP POST request on /admin...
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_admin_handler:1861]  ... parsing request...
[Mon Sep 12 10:41:52 2022] Session: admin
[Mon Sep 12 10:41:52 2022] Processing POST data (application/json) (365 bytes)...
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_admin_handler:1886]   -- Data we have now (365 bytes)
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_admin_handler:1797] Processing HTTP POST request on /admin...
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_admin_handler:1861]  ... parsing request...
[Mon Sep 12 10:41:52 2022] Session: admin
[Mon Sep 12 10:41:52 2022] Processing POST data (application/json) (0 bytes)...
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_admin_handler:1891] Done getting payload, we can answer
[Mon Sep 12 10:41:52 2022] {"janus": "message_plugin", "transaction": "17496aaeed1844c1962f2c67b695ad19", "admin_secret": "janusapi1234", "plugin": "janus.plugin.audiobridge", "request": {"request": "create", "audiolevel_event": true, "audiolevel_ext": true, "audio_active_packets": 50, "audio_level_average": 50, "bitrate": 256000, "is_private": false, "permanent": true, "publishers": 200}}
[Mon Sep 12 10:41:52 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445101152219137695 us
[Mon Sep 12 10:41:52 2022] Event label transports, name Transports
[Mon Sep 12 10:41:52 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/events/transports
[Mon Sep 12 10:41:52 2022] About to send message to /janus/events/transports
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_request_timeout_create:260] [0x7ff8180010f0] create (10)
[Mon Sep 12 10:41:52 2022] Converted message to JSON for /janus/events/transports
[Mon Sep 12 10:41:52 2022] Forwarding admin request to the core (0x7ff818001620)
[Mon Sep 12 10:41:52 2022] Got an admin API request from janus.transport.http (0x7ff8180016b0)
[Mon Sep 12 10:41:52 2022] MQTT EVH message sent to topic /janus/events/transports on tcp://<MASKED>. Result 0
[Mon Sep 12 10:41:52 2022] Done with message to JSON for /janus/events/transports
[Mon Sep 12 10:41:52 2022] Debug: Thread done publishing MQTT Publish event on /janus/events/transports
[Mon Sep 12 10:41:52 2022] Transport task pool, serving request
[Mon Sep 12 10:41:52 2022] Creating a new AudioBridge room
[Mon Sep 12 10:41:52 2022] Sampling rate for mixing: 16000
[Mon Sep 12 10:41:52 2022] Created AudioBridge: 6179093013670060 (Room 6179093013670060, public, secret: no secret, pin: no pin)
[Mon Sep 12 10:41:52 2022] Saving room 6179093013670060 permanently in config file
[Mon Sep 12 10:41:52 2022] Audio bridge thread starting...
[Mon Sep 12 10:41:52 2022] Thread is for mixing room 6179093013670060 (Room 6179093013670060) at rate 16000...
[Mon Sep 12 10:41:52 2022] Sending admin API response to janus.transport.http (0x7ff8180016b0)
[Mon Sep 12 10:41:52 2022] Got a admin API response to send (0x7ff8180016b0)
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_request_timeout_finalize:239] [0x7ff8180010f0] finalize
[Mon Sep 12 10:41:52 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445101152219137697 us
[Mon Sep 12 10:41:52 2022] Event label plugins, name Plugins
[Mon Sep 12 10:41:52 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/events/plugins
[Mon Sep 12 10:41:52 2022] About to send message to /janus/events/plugins
[Mon Sep 12 10:41:52 2022] Converted message to JSON for /janus/events/plugins
[Mon Sep 12 10:41:52 2022] [transports/janus_http.c:janus_http_request_completed:2021] Request completed, freeing data
[Mon Sep 12 10:41:52 2022] MQTT EVH message sent to topic /janus/events/plugins on tcp://<MASKED>. Result 0
[Mon Sep 12 10:41:52 2022] Done with message to JSON for /janus/events/plugins
[Mon Sep 12 10:41:52 2022] Debug: Thread done publishing MQTT Publish event on /janus/events/plugins
[Mon Sep 12 10:41:52 2022] MQTT EVH client has successfully published to MQTT base topic: /janus/events
[Mon Sep 12 10:41:52 2022] MQTT EVH client has successfully published to MQTT base topic: /janus/events
[Mon Sep 12 10:41:53 2022] New connection on admin/monitor: 127.0.0.1
[Mon Sep 12 10:41:53 2022] Got an admin/monitor HTTP POST request on /admin...
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_admin_handler:1766]  ... Just parsing headers for now...
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] Host: <MASKED>
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] User-Agent: python-requests/2.22.0
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] Accept-Encoding: gzip, deflate
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] Accept: */*
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] Content-Length: 284
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] Content-Type: application/json
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] WL-Proxy-SSL: true
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] X-Forwarded-Proto: https
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] X-Forwarded-For: <MASKED>
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_headers:1997] Connection: close
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_admin_handler:1797] Processing HTTP POST request on /admin...
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_admin_handler:1861]  ... parsing request...
[Mon Sep 12 10:41:53 2022] Session: admin
[Mon Sep 12 10:41:53 2022] Processing POST data (application/json) (284 bytes)...
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_admin_handler:1886]   -- Data we have now (284 bytes)
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_admin_handler:1797] Processing HTTP POST request on /admin...
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_admin_handler:1861]  ... parsing request...
[Mon Sep 12 10:41:53 2022] Session: admin
[Mon Sep 12 10:41:53 2022] Processing POST data (application/json) (0 bytes)...
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_admin_handler:1891] Done getting payload, we can answer
[Mon Sep 12 10:41:53 2022] {"janus": "message_plugin", "transaction": "d8912885539b43898aa8e356eee022b2", "admin_secret": "janusapi1234", "plugin": "janus.plugin.videoroom", "request": {"request": "create", "audiolevel_event": true, "bitrate": 256000, "is_private": false, "permanent": true, "publishers": 200}}
[Mon Sep 12 10:41:53 2022] [transports/janus_http.c:janus_http_request_timeout_create:260] [0x7ff818000ae0] create (10)
[Mon Sep 12 10:41:53 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1198] Handled event after 18445101152219137722 us
[Mon Sep 12 10:41:53 2022] Forwarding admin request to the core (0x7ff818001620)
[Mon Sep 12 10:41:53 2022] Event label transports, name Transports
[Mon Sep 12 10:41:53 2022] Got an admin API request from janus.transport.http (0x7ff8180016b0)
[Mon Sep 12 10:41:53 2022] [events/janus_mqttevh.c:janus_mqttevh_handler:1217] Debug: MQTT Publish event on /janus/events/transports
[Mon Sep 12 10:41:53 2022] About to send message to /janus/events/transports
[Mon Sep 12 10:41:53 2022] Converted message to JSON for /janus/events/transports
[Mon Sep 12 10:41:53 2022] Transport task pool, serving request
[Mon Sep 12 10:41:53 2022] MQTT EVH message sent to topic /janus/events/transports on tcp://<MASKED>. Result 0
[Mon Sep 12 10:41:53 2022] Done with message to JSON for /janus/events/transports
[Mon Sep 12 10:41:53 2022] Debug: Thread done publishing MQTT Publish event on /janus/events/transports
[Mon Sep 12 10:41:53 2022] Creating a new VideoRoom room
[Mon Sep 12 10:41:53 2022] [WARN] Invalid audio_active_packets value provided, using default: 100
[Mon Sep 12 10:41:53 2022] [WARN] Invalid audio_level_average value provided, using default: 25
[Mon Sep 12 10:41:53 2022] Created VideoRoom: 6265162063191380 (Room 6265162063191380, public, opus/vp8 codecs, secret: no secret, pin: no pin, pvtid: optional)
[Mon Sep 12 10:41:53 2022] Saving room 6265162063191380 permanently in config file
@SakibFarhad SakibFarhad added the multistream Related to Janus 1.x label Sep 12, 2022
@lminiero
Copy link
Member

As explained in the guidelines, please DON'T paste huge logs inline. I edited your post so that they're collapsed using Github's markdown instead.

@atoppi
Copy link
Member

atoppi commented Sep 14, 2022

I think the two issues are not correlated.

  • Admin HTTP requests are timing out
[Mon Sep 12 11:19:31 2022] [transports/janus_http.c:janus_http_request_timeout_dispatch:229] [0x7f54280bc100] dispatch

That seems to suggest a missing response from the core/plugin (in this case the request was a create audiobridge).
Have you customized the plugin?

  • The WSS connection is being torn down
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] 38 ((null))
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] 78 ((null))
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] WS connection down, closing
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] Destroying WebSocket client
[Mon Sep 12 12:46:35 2022] A janus.transport.websockets transport instance has gone away (0x7f541c0905e0)
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0]   -- closed

According to libwebsockets internal docs about the reason 38, that is a close from the peer

	LWS_CALLBACK_WS_PEER_INITIATED_CLOSE			= 38,
	/**< The peer has sent an unsolicited Close WS packet

So you need to double-check the code on the other side of the connection here.

@SakibFarhad
Copy link
Author

Hello,

  1. When ever the issue takes place both Admin HTTP API and Websocket becomes unresponsive. We did not change any code. We control the rooms from the admin API, this why you can see a create request.
  2. From client side we do not disconnect from WSS server, Client keeps on waiting for WSS response. By other side did you mean client side connection?

The problem is, if you check for wss log for both with issue and without issue you will see that when Janus is working fine it logs following lines:

Mon Sep 12 10:47:36 2022] {"janus":"create","transaction":"2fxatzi7nf"}
[Mon Sep 12 10:47:36 2022] [WSS-0x7ff828003350] Done, parsing message: 45 bytes
[Mon Sep 12 10:47:36 2022] Got a Janus API request from janus.transport.websockets (0x7ff828003120)
[Mon Sep 12 10:47:36 2022] Creating new session: 859697652628831; 0x7ff81c009fa0
[Mon Sep 12 10:47:36 2022] Sending Janus API response to janus.transport.websockets (0x7ff828003120)

But when Janus is stuck. It gets the request which it is logged but no response.

@atoppi
Copy link
Member

atoppi commented Sep 15, 2022

[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] Got 45 bytes:
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] First fragment: 45 bytes, 0 remaining
[Mon Sep 12 12:46:29 2022] {"janus":"create","transaction":"tgdvjt3e9i"}
[Mon Sep 12 12:46:29 2022] [WSS-0x7f541c151de0] Done, parsing message: 45 bytes
[Mon Sep 12 12:46:29 2022] Got a Janus API request from janus.transport.websockets (0x7f541c0905e0)
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] 38 ((null))
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] 78 ((null))
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] WS connection down, closing
[Mon Sep 12 12:46:35 2022] [WSS-0x7f541c151de0] Destroying WebSocket client

Maybe your client is detecting a ping-pong timeout and is closing the connection after 5-6 seconds.

However I can tell from the logs that janus received a create session request but never replied, so that means that probably something is locked in the core.

Wait until the issue shows up again and provide the output of

gdb -p $(pidof janus) --batch -ex "set set print pretty on" -ex "set pagination off" -ex "thread apply all bt full"

that should dump the status of all the threads.

@SakibFarhad
Copy link
Author

SakibFarhad commented Sep 18, 2022

Will get back to you with the log, as soon as we get face the issue again.

@SakibFarhad
Copy link
Author

Hello, here is the output for

gdb -p $(pidof janus) --batch -ex "set print pretty on" -ex "set pagination off" -ex "thread apply all bt full"

jgw_gdb.log

@atoppi
Copy link
Member

atoppi commented Sep 20, 2022

I can spot several threads blocked, waiting for a mutex:

  • One thread waiting for sessions_mutex while creating an audiobridge handle.
Thread 475 (Thread 0x7f54621fc700 (LWP 7952)):
#0  0x00007f546e6001c9 in syscall () at /lib64/libc.so.6
#1  0x00007f547023cf42 in g_mutex_lock_slowpath () at /lib64/libglib-2.0.so.0
#2  0x00007f542462347d in janus_audiobridge_create_session (handle=0x7f545001ffd0, error=<optimized out>) at plugins/janus_audiobridge.c:2822
        session = 0x7f5450048370
        error = <optimized out>
        handle = 0x7f545001ffd0
#3  0x00000000004398a8 in janus_ice_handle_attach_plugin

  • Multiple threads waiting for sessions_mutex while performing a hangup media.
Thread 18 (Thread 0x7f50b550c700 (LWP 1782)):
#0  0x00007f546e6001c9 in syscall () at /lib64/libc.so.6
#1  0x00007f547023cf42 in g_mutex_lock_slowpath () at /lib64/libglib-2.0.so.0
#2  0x00007f542462dec3 in janus_audiobridge_hangup_media (handle=0x7f5450049150) at plugins/janus_audiobridge.c:5964
        __FUNCTION__ = "janus_audiobridge_hangup_media"
#3  0x000000000044615b in janus_ice_outgoing_traffic_handle (handle=0x7f545006a7d0, pkt=0x6b14a0 <janus_ice_hangup_peerconnection>) at ice.c:4399
        plugin = 0x7f5424869600 <janus_audiobridge_plugin>
        session = <optimized out>
        pc = 0x7f53b0029220
        medium = 0x0
        __FUNCTION__ = "janus_ice_outgoing_traffic_handle"
        age = <optimized out>

  • One thread waiting for rooms_mutex while handling a "create" room request, coming from the Admin API transport
Thread 10 (Thread 0x7f50a78f6700 (LWP 5323)):
#0  0x00007f546e6001c9 in syscall () at /lib64/libc.so.6
#1  0x00007f547023cf42 in g_mutex_lock_slowpath () at /lib64/libglib-2.0.so.0
#2  0x00007f542463583b in janus_audiobridge_process_synchronous_request (session=session@entry=0x0, message=message@entry=0x7f5428024750) at plugins/janus_audiobridge.c:3124
        room_id_num = "0\000\067\063\063\064\070\062\061\071\066\065\071\060\062", '\000' <repeats 14 times>
        sampling = 0x0
        audio_level_average = 0x7f542804e0f0
        default_prebuffering = 0x0
        default_expectedloss = 0x0
        allowrtp = 0x0
        error = 0x631f1400
        pin = 0x0
        recdir = 0x0
        desc = 0x0
        permanent = 0x7f5470220130 <the_true.5298>
        room_id_allocated = <optimized out>
        secret = 0x0
        is_private = 0x7f5470220120 <the_false.5302>
        audiolevel_ext = 0x7f5470220130 <the_true.5298>
        groups = 0x0
        record = 0x0
        recfile = 0x0
        room_id_str = <optimized out>
        spatial = 0x0
        audiolevel_event = 0x7f5470220130 <the_true.5298>
        description = <optimized out>
        tname = "mixer 107334821"
        allowed = 0x0
        audio_active_packets = 0x7f54280247a0
        default_bitrate = 0x0
        mjrs = 0x0
        mjrsdir = 0x0
        save = <optimized out>
        room_id = 0
        room = <optimized out>
        audiobridge = <optimized out>
        request = <optimized out>
        request_text = <optimized out>
        error_code = 0
        error_cause = '\000' <repeats 240 times>...
        root = 0x7f5428024750
        response = 0x0
        __FUNCTION__ = "janus_audiobridge_process_synchronous_request"
#3  0x00007f5424651ee0 in janus_audiobridge_handle_admin_message (message=0x7f5428024750) at plugins/janus_audiobridge.c:5502

  • Multiple threads waiting for sessions_mutex while handling a request coming from the Janus API transport.
Thread 4 (Thread 0x7f50992df700 (LWP 5432)):
#0  0x00007f546e6001c9 in syscall () at /lib64/libc.so.6
#1  0x00007f547023cf42 in g_mutex_lock_slowpath () at /lib64/libglib-2.0.so.0
#2  0x00007f5424651103 in janus_audiobridge_handle_message (handle=0x7f54500103d0, transaction=0x7f53ec08d910 "lhf6p90cmq", message=0x7f541c03f540, jsep=0x0) at plugins/janus_audiobridge.c:5397
        error_code = 0
        error_cause = "\307\037\001\004T\177\000\000\370\027\001\004T\177\000\000\307\037\001\004T\177", '\000' <repeats 42 times>, "\240όn\000\000\000\000\000\350-\231P\177\000\000\000\000G\002", '\000' <repeats 20 times>, "f\346-\231P\177\000\000\006", '\000' <repeats 24 times>, "\232\316Ba\tȃ\377\377\377\377\061\067\000\000\000n\003\324S\177\000\000\274e\001\360S\177\000\000\244\300%pT\177\000\000\000\000\000\000\000\000\000\000\320\003\001PT\177\000\000\060\354-\231P\177\000\000\320\003"...
        root = 0x7f541c03f540
        response = 0x0
        session = 0x7f5424651de0 <janus_audiobridge_handle_message>
        request = <optimized out>
        request_text = <optimized out>
#3  0x0000000000453fb0 in janus_process_incoming_request (request=<optimized out>) at janus.c:1730
        plugin_t = 0x7f5424869600 <janus_audiobridge_plugin>
        body = 0x7f541c03f540
        jsep = <optimized out>
        jsep_type = 0x0
        jsep_sdp = <optimized out>
        body_jsep = 0x0
        jsep_sdp_stripped = 0x0
        renegotiation = 0
        result = <optimized out>
        ret = <optimized out>
        __FUNCTION__ = "janus_process_incoming_request"
        error_code = 0
        error_cause = '\000' <repeats 99 times>
        root = <optimized out>
        session_id = 7308759212697649
        handle_id = <optimized out>
        s = <optimized out>
        h = <optimized out>
        session = <optimized out>
        handle = <optimized out>
        transaction = <optimized out>
        transaction_text = 0x7f541c034460 "lhf6p90cmq"
        message = <optimized out>
        message_text = <optimized out>
#4  0x0000000000458805 in janus_transport_task (data=0x7f541c021480, user_data=<optimized out>) at janus.c:3433

Indeed it looks like a deadlock.
We must only consider single thread groups (Thread 475 and Thread 10), but I can not spot a clear deadlocking path considering those ones.

I guess we should enable mutex debug to gather more data.
Please start janus with --debug-locks and prepare for a VERY VERBOSE output.

@SakibFarhad
Copy link
Author

SakibFarhad commented Sep 21, 2022

Hello,
We faced the issue again today. here is the janus-gw log file with --debug-locks on.
EDIT: off-topic, we were facing issue with libnice yesterday. now it is updated to '0.19.0'. Just for FYI
janus.log.20220921.zip

@atoppi
Copy link
Member

atoppi commented Sep 21, 2022

Thanks for the logs.
The commit cc40816 should solve the issue, please test and confirm that everything works as expected.

As a side note, the deadlock was triggered by the reception of G.711 packets with unexpected size, as confirmed by your logs:

[Wed Sep 21 05:40:04 2022] [WARN][G.711] Wrong packet size (expected 160, got 1400), skipping audio packet
[Wed Sep 21 05:40:04 2022] [WARN][G.711] Wrong packet size (expected 160, got 520), skipping audio packet

The audiobridge plugin will drop incoming g711 packets when their length is not 160.

@atoppi atoppi added please-test and removed WIP labels Sep 22, 2022
mwalbeck pushed a commit to mwalbeck/docker-janus-gateway that referenced this issue Oct 4, 2022
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [meetecho/janus-gateway](https://github.com/meetecho/janus-gateway) | minor | `v1.0.4` -> `v1.1.0` |

---

### Release Notes

<details>
<summary>meetecho/janus-gateway</summary>

### [`v1.1.0`](https://github.com/meetecho/janus-gateway/blob/HEAD/CHANGELOG.md#v110---2022-10-03)

[Compare Source](meetecho/janus-gateway@v1.0.4...v1.1.0)

-   Added versioning to .so files \[[PR-3075](meetecho/janus-gateway#3075)]
-   Allow plugins to specify msid in SDPs \[[PR-2998](meetecho/janus-gateway#2998)]
-   Fixed broken RTCP timestamp on 32bit architectures \[[Issue-3045](meetecho/janus-gateway#3045)]
-   Fixed problems compiling against recent versions of libwebsockets \[[Issue-3039](meetecho/janus-gateway#3039)]
-   Updated deprecated DTLS functions to OpenSSL v3.0 [PR-3048](meetecho/janus-gateway#3048)]
-   Switched to SHA256 for signing self signed DTLS certificates (thanks [@&#8203;tgabi333](https://github.com/tgabi333)!) \[[PR-3069](meetecho/janus-gateway#3069)]
-   Started using strnlen to optimize performance of some strlen calls (thanks [@&#8203;tmatth](https://github.com/tmatth)!) \[[PR-3059](meetecho/janus-gateway#3059)]
-   Added checks to avoid RTX payload type collisions \[[PR-3080](meetecho/janus-gateway#3080)]
-   Added new APIs for cascading VideoRoom publishers \[[PR-3014](meetecho/janus-gateway#3014)]
-   Fixed deadlock when using legacy switch in VideoRoom \[[Issue-3066](meetecho/janus-gateway#3066)]
-   Fixed disabled property not being advertized to subscribers when VideoRoom publishers removed tracks
-   Fixed occasional deadlock when using G.711 in the AudioBridge \[[Issue-3062](meetecho/janus-gateway#3062)]
-   Added new way of capturing devices/tracks in janus.js \[[PR-3003](meetecho/janus-gateway#3003)]
-   Removed call to .stop() for remote tracks in demos \[[PR-3056](meetecho/janus-gateway#3056)]
-   Fixed missing message/info/transfer buttons in SIP demo page
-   Fixed postprocessing compilation issue on older FFmpeg versions \[[PR-3064](meetecho/janus-gateway#3064)]
-   Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4yMTMuMCIsInVwZGF0ZWRJblZlciI6IjMyLjIxMy4wIn0=-->

Reviewed-on: https://git.walbeck.it/walbeck-it/docker-janus-gateway/pulls/91
Co-authored-by: renovate-bot <[email protected]>
Co-committed-by: renovate-bot <[email protected]>
@lminiero
Copy link
Member

lminiero commented Oct 6, 2022

We'll assume this is fixed, due to lack of feedback. Closing.

@lminiero lminiero closed this as completed Oct 6, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants