Стал падать Flashphoner (процесс запущен, трансляции не идут)

inpost

Member
Здравствуйте.
Обновили Debian до:
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.5 (stretch)
Release: 9.5
Codename: stretch

После этого раз в сутки отключается Flashphoner.

Логи отправил на почту.

Java Version:
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-1~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

Конфиг:
Code:
#Config
# ip                                - External IP-address of server where Flashphoner installed (xxx.xxx.xxx.xxx)
# ip_local                          - Local IP-address of server where Flashphoner installed (xxx.xxx.xxx.xxx)
# port_from                         - Begin of range of ports for SIP signaling (integer)
# port_to                           - End of range of ports for SIP signaling (integer)
# media_port_from                   - Begin of range of ports for media-traffic (integer)
# media_port_to                     - End of range of ports for media-traffic (integer)
# waiting_answer                    - How many time will Flashphoner client wait for answer from other side (seconds, integer)
# serial_number                     - Flashponer license. You can get it here - http://flashphoner.com/license
# user_agent                        - SIP User Agent header, example: Flashphoner/1.0 [Default: Flashphoner/1.0]
# balance_header                    - SIP header name for balance info [Default: balance]
# cost_header                       - SIP header name for cost info [Default: cost]
# video_enabled                     - Enabling of video support (true/false)
# domain                            - Domain address of voip server (xxx.xxx.xxx.xxx)
# outbound_proxy                    - Outbound proxy (xxx.xxx.xxx.xxx)
# outbound_port                     - Port for outbound proxy
# dtmf                              - Dual-Tone Multi-Frequency. Values: rfc2833, info
# log_level                         - Level of logging (1-10)
# enable_context_logs               - Context logs with login,port and sip call id
# rtp_activity_detecting            - Hangup, if incomming audio stream is empty few seconds. Format:(true/false),seconds. Example:true,5
# force_h264_to_sorenson            - Transcoding incoming stream from H264 to Sorenson Park
# force_h264_to_h264                - Transcoding incoming stream from H264 to H264 (frame without slices)
# h264_max_nalu_size                - Max NALU size for H264
# codecs                            - List of supported codecs, ordered by priority. Example: alaw, ulaw, g729, speex16, h263
# codecs_exclude_sip                - List of codecs that should be excluded in sip call
# codecs_exclude_streaming          - List of codecs that should be excluded in streaming
# codecs_exclude_sip_rtmp           - List of codecs that should be excluded in sip as rtmp
# sip_msg_listener                  - Class, defined by developer. The class must implement interface ISipMessageListener. Example: com.flashphoner.sdk.sip.ChangeCallIdListener
# priority_outside_codecs           - Priority of outside codecs
# remove_ssrc_attr                  - Remove ssrc attribute from local sdp
# max_callid_length                 - Max call id length (min 4; max 32)
# use_tcp_for_long_sip_messages     - Use TCP transport for messages with big size
# enable_candidate_harvester        - Enable stun candidate hasvester
# save_client_logs                  - Save client logs after disconnect
# enable_extended_logging           - Save user logs in individual folder, true is default value
# record                            - Folder for record audio from calls. If empty then recording will be disabled
# record_filename_template          - Template for file name of record. Default: {id}-{date}
# preserve_non_mixed_recorded_files - Preserve non mixed recorded files. Default: false
# recording_by_user                 - Recording media by user side. Default: false

ip                     =192.99.67.31
ip_local               =192.99.67.31
port_from              =30000
port_to                =31000
media_port_from        =31001
media_port_to          =32000
waiting_answer         =60
user_agent             =Flashphoner/1.0
balance_header         =balance
cost_header            =cost
video_enabled          =true
domain                 =
outbound_proxy         =
outbound_port          =
log_level              =5
suppress_audio         =true
enable_context_logs    =false
rtp_activity_detecting =true,60
sip_msg_listener       =com.flashphoner.sdk.sip.ChangeCallIdListener
call_record_listener   =com.flashphoner.server.client.DefaultCallRecordListener
dtmf                     =rfc2833
auto_login_url         =/usr/local/FlashphonerWebCallServer/conf/account.xml
get_callee_url         =/usr/local/FlashphonerWebCallServer/conf/callee.xml
codecs                   =opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,h264,vp8,flv,mpv
codecs_exclude_sip       =mpeg4-generic,flv,mpv
codecs_exclude_streaming =flv,telephone-event
codecs                   =opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,vp8,h264,flv,mpv
on_record_hook_script  =on_record_hook.sh
rtmp_transponder_stream_name_prefix =rtmp_
webrtc_cc_min_bitrate = 500000
webrtc_cc_max_bitrate = 15000000
 
Last edited:

Max

Administrator
Staff member
Добрый день.
Мы изучаем присланные логи.
Уточните, пожалуйста, версию WCS, которую Вы используете.
Воспроизводится ли проблема с последней версией WCS с этой страницы?
Воспроизводится ли проблема, если откатить Debian на версию, с которой все работало?
Воспроизводится ли проблема с Oracle JDK той же версии (1.8u181)?
 

Max

Administrator
Staff member
Судя по присланным логам, Вы используете встроенный бэкенд WCS для обработки запросов к бэкенд-серверу (REST hooks). Также, судя по присланным логам, проблема возникает из-за того, что под большой нагрузкой бэкенд не успевает обрабатывать запросы на установку соединения и публикацию потока. В таком случае, попробуйте полностью отключить отправку запросов на бэкенд настройкой
Code:
disable_rest_requests=true
в файле WCS_HOME/conf/flashphoner.properties и перезапустить сервер.
 

inpost

Member
Дело в том, что сейчас REST Hooks используются.
Падение происходит так: за секунду до падения идёт в логах: connect() to unix:/var/run/php-fpm.socket failed (11: Resource temporarily unavailable)
Я работаю над увеличением мощностей сервера. Но мне кажется, что если 1 запрос (одна камера) не может включиться по причине недоступности коннекта по REST Hooks, весь Flashphoner не должен же падать? Он как бы не совсем падает, ведь процессы все запущены, просто ошибка на Java всё останавливает и новые потоки не включаются, а старые нельзя посмотреть.

Думаю, было бы неплохо, если бы одна камера не может отправить rest hook, просто её выбивать и всё, чтобы остальные продолжали работать корректно и новые тоже!
 

Max

Administrator
Staff member
Пожалуйста, обновитесь до версии 5.1.3592 или новее с этой страницы. Начиная с данной версии, добавлена настройка максимального времени ожидания ответа от бэкенд-сервера, по умолчанию 15 секунд
Code:
rest_request_timeout=15
Установите этот параметр в меньшую величину, например, 5 секунд
Code:
rest_request_timeout=5
В этом случае, если бэкенд не отвечает в течение 5 секунд, REST клиент WCS возвращает ошибку, и соединение с публикующей стороной будет разорвано. При этом пул потоков не будет забиваться REST-клиентами, стоящими в ожидании, что, в свою очередь, снизит вероятность deadlock'ов, которые у Вас и наблюдаются, судя по симптомам.
Если данная мера не поможет, предоставьте SSH доступ к Вашему серверу на support@flashphoner.com, наши специалисты посмотрят, что происходит.
 

Max

Administrator
Staff member
Добрый день.
Мы выяснили, что в Вашем случае уменьшение таймаута на ответ от бэкенд-сервера, скорее всего, не сильно поможет. Мы выпустили версию 5.1.3600, в которой увеличили количество потоков в пуле REST-клиентов до 200 и добавили возможность его регулировки при помощи настройки
Code:
rest_max_connections=200
Пожалуйста, обновитесь до данной версии и проверьте, воспроизводится ли проблема.
 

inpost

Member
Здравствуйте. Спасибо.
Сейчас мы отключили REST-hooks на сервере, чуть-чуть кода переписали на новый лад, чтобы пользоваться flashphoner без хуков. Поэтому сейчас проверить hooks не можем. Зато замечу, что с отключенными hooks не падал ни разу ещё!
 

inpost

Member
Здравствуйте. Проблемы вновь появились, происходят с интервалом в 1-2 недели. В конфиге прописано:
disable_rest_requests=true

Так же весь лог переполнен сообщениями
08:00:02,230 ERROR MuxEncoder - FScheduling-pool-37-thread-2 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException
08:00:02,230 ERROR MuxEncoder - FScheduling-pool-37-thread-1 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException
08:00:02,230 ERROR MuxEncoder - FScheduling-pool-37-thread-3 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException
08:00:02,230 ERROR MuxEncoder - FScheduling-pool-37-thread-4 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException
08:00:02,230 ERROR MuxEncoder - FScheduling-pool-37-thread-2 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException
08:00:02,242 ERROR MuxEncoder - FScheduling-pool-37-thread-3 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException
08:00:02,261 ERROR MuxEncoder - FScheduling-pool-37-thread-2 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException
08:00:02,276 ERROR MuxEncoder - FScheduling-pool-37-thread-5 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException

Где-то в начале:
08:00:01,353 INFO RestApiRouter - HTTPS-pool-4-thread-297 Use controller class com.flashphoner.rest.server.rest_v2.RestStreamController with path /rest-api/stream/find
08:00:01,353 INFO RestApiRouter - HTTPS-pool-4-thread-298 Use controller class com.flashphoner.rest.server.rest_v2.RestStreamController with path /rest-api/stream/find
08:00:01,353 INFO RestStreamController - HTTPS-pool-4-thread-297 handleRequest /rest-api/stream/find params:{status=PUBLISHING}
08:00:01,353 INFO RestStreamController - HTTPS-pool-4-thread-298 handleRequest /rest-api/stream/find params:{status=PUBLISHING}
08:00:01,361 INFO RtpVideoConfig - pool-17-thread-64 Codec not found; pt - 119; current pt - 112
08:00:01,371 ERROR MuxEncoder - FScheduling-pool-37-thread-3 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException
08:00:01,391 ERROR MuxEncoder - FScheduling-pool-37-thread-2 Failed to encode compound RTCP packet to send.
java.lang.ArrayIndexOutOfBoundsException
08:00:01,421 INFO RestApiRouter - HTTPS-pool-4-thread-292 Use controller class com.flashphoner.rest.server.rest_v2.RestStreamController with path /rest-api/stream/snapshot
08:00:01,421 INFO RestStreamController - HTTPS-pool-4-thread-292 handleRequest /rest-api/stream/snapshot params:{streamName=g-39837}


===========================
Конфиг сейчас:
ip = СКРЫТО
ip_local = СКРЫТО

#webrtc ports range
media_port_from =31001
media_port_to =32000

codecs =opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,h264,vp8,flv,mpv
codecs_exclude_sip =mpeg4-generic,flv,mpv
codecs_exclude_streaming =flv,telephone-event
codecs_exclude_sip_rtmp =opus,g729,g722,mpeg4-generic,vp8,mpv

#websocket ports
ws.port =8080
wss.port =8443
webrtc_cc_min_bitrate = 500000
webrtc_cc_max_bitrate = 15000000
suppress_audio =true
disable_rest_requests=true
enable_extended_logging=false
 

Max

Administrator
Staff member
Ошибка "Failed to encode compound RTCP packet to send." была устранена в сборке 5.2.31
Попробуйте обновиться до последней сборки: 5.2.56
https://docs.flashphoner.com/display/WCS52RU/Release+notes
Рекумендуется также расширить диапазон портов
Например
Code:
media_port_from =31001
media_port_to =42000
возможно по портам идёт утечка.
 

inpost

Member
Сегодня опять та же ошибка. Процесс запущен, но новые трансляции не шлются. Только перезагрузка помогает!
Может подскажете как подобное можно определять для настройки рестарта сервера в автоматическом режиме?
Я на почту вам в саппорт отправил логи
 

inpost

Member
Уточню ещё 1 момент. Я скинул 2 архива. Сокращенный - это был снимок во время падения, то есть ровно тогда, когда сервер был запущен, но трансляции не подключались. А второй, расширенный, уже после рестарта через 30-60 минут. Если нужен расширенный во время падения, то тогда придется подождать следующее падение.
 

Max

Administrator
Staff member
Добрый день.
В одном из архивов есть только логи JVM Garbage Collector, они показывают, что GC отрабатывает каждые две секунды. Уточните, пожалуйста, сколько у Вас оперативной памяти на сервере, и сколько памяти выделено под Java Heap (настройки -Xmx, -Xms в файле wcs-core.properties)? Рекомендуется выделять под Java Heap не менее 1/2 объема памяти сервера.
 

inpost

Member
Сервер общий под сайт на nginx + php. MySQL лежит отдельно. На сервере 256gb, выделено 1gb, получается:
### JVM OPTIONS ###
-Xmx1024M
#-Xcheck:jni

Подняли до 32gb. Рестартанём. Скажите, ещё логи повторно надо будет выслать или ждать следующего падения, если случится?
 

Max

Administrator
Staff member
Добрый день.
Настройки по умолчанию (1 Gb Java Heap) предназначены скорее для тестирования сервера в минимальной конфигурации, но не для эксплуатации. 32 Gb должно хватить. Логи высылайте, если в дальнейшем проблема воспроизведется. Состав отчета об ошибке приведен здесь.
 
Top