Валится в лог AbstractWCSClient - VideoDistributor-PROXY-

Max

Administrator
Staff member
Добрый день. У вас на сервере есть две настройки, которые могут спровоцировать утечку памяти или переполнение открытых файловых дескрипторов:
1. keep_alive.algorithm=NONE
2. enable_extended_logging=true

Эти две настройки могли вызвать остановку сервера, связанную с утечкой памяти.
Ниже рекомендации по настройкам для продакшена.
Рекомендуемые настройки:
server.properties
#Включаем кипаливы чтобы избежать утечки памяти
Code:
keep_alive.algorithm=INTERNAL
#Оставляем кипаливы только для websocket и rtmfp. Не добавляем в список rtmp, иначе будет отваливаться ffmpeg
Code:
keep_alive.enabled=websocket,rtmfp
flashphoner.properties
#Выставляем приоритет для кодека H.264, т.к. большинство входящих стримов идет с Flash H.264 и это поможет избежать транскодинга и снизить использование CPU.
Code:
codecs  =opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,h264,vp8,flv,mpv
#Включаем мониторинг стримов, чтобы иметь возможность мониторить стримы через Dashboard / Monitoring / Streams
Code:
stats=true
#Эту настройку нужно использовать только для дебага и отключать в продакшене. Пишет много логов. При нерабочих keep alives может вызывать утечку памяти.
Code:
enable_extended_logging=false
wcs-manager.properties
#Если позволяет память, увеличиваем heap для процесса wcs manager
Code:
-Xms512M -Xmx2048M
wcs-core.properties
#Включаем поддержку мониторинга с помощью Visual VM
https://flashphoner.com/docs/wcs5/w...html?monitoring-connection_from_visual_vm.htm
Code:
-Djava.rmi.server.hostname=xx.95.103.xx
Относительно проблемы со стримами. Явных проблем обнаружить не удалось. Какие-то стримы играют, какие-то закрываются.
Если пользователя "выбросило" или неожиданно остановился стрим, нужно дать пользователю возможность отправить оценку качества, например "Все отлично" или "Нет видео" или "Выбросило из чата" и зафиксировать IP адрес этого пользователя. Тогда будет понятно, что пользователь явно указал на проблему и у нас будет его IP и время обращения для поиска по логам. Без этого трудно сказать, сам пользователь закрыл браузер или произошел какой-то сбой.

Пример мониторинга стрима.
Чтобы выяснить, что стрим жив, можно проверить его таймкоды. В нормальном состоянии линии синяя и оранжевая (аудио и видео таймстампы) идут монотонно в верх под углом около 45%.
Dashboard / Monitoring / Streams
monitoring-stream-timecode.png


Хотелось бы понимания - почему
Скорее всего из-за утечки или переполнения файловых дескрипторов.
Подробнее описано выше.
 

Chaggy

New Member
а не могли бы посмотреть почему вчера и сегодня упал сервис? Мы его пока специально не подымали.
Изменения можно смело вносить и перезапускать
 

Chaggy

New Member
вчера после падения были ошибки:
09:01:52,106 WARN SqlExceptionHelper - RMI TCP Connection(2045)-93.95.103.104 SQL Error: 90098, SQLState: 90098
09:01:56,279 ERROR SqlExceptionHelper - RMI TCP Connection(2045)-93.95.103.104 The database has been closed [90098-184]
09:02:42,262 WARN SqlExceptionHelper - RMI TCP Connection(2044)-93.95.103.104 SQL Error: 90098, SQLState: 90098
09:02:53,977 ERROR SqlExceptionHelper - RMI TCP Connection(2044)-93.95.103.104 The database has been closed [90098-184]
 

Max

Administrator
Staff member
Это похоже на утечку памяти. Мы у себя попробуем ее отловить.
У вас можно ее подавить, добавив heap-памяти менеджеру и убрав с ядра.
Например так:
wcs-core.properties
-Xmx12000M -Xms4096M
wcs-manager.properties
-Xmx8000M -Xms4096M

Сейчас сервер перезапрущен с этими настройками.
Если снова произойдет выход, пожалуйста сообщите.
Попробуем воспроизвести у себя на нагрузочных тестах.
 

Max

Administrator
Staff member
Нашли краш на транскодинге, сделали патч, обновили сервер до 2370.
Попробуем воспроизвести у себя на нагрузочных тестах.
На синтетических тестах похожую проблему воспроизвести не удалось. Продолжаем наблюдение за вашим сервером.
 

Max

Administrator
Staff member
Просьба дать трафик на сервер. Сейчас там пусто.
 

Ivan

Member
Включили часть трафика. Сейчас 3-и трансляции онлайн
 

Max

Administrator
Staff member
Выполнили перезагрузку сервера, разберем логи и сообщим вам.
 

Chaggy

New Member
опять аналогичное, посмотрите пожалуйста.
мы сервер перезагрузили
 

Max

Administrator
Staff member
Идет разбор логов. Для работы с базой необходимо будет остановить сервер.
 

Ivan

Member
Вопрос по веб менеджеру:
допустим у нас 1 человек вещает 2-а потока - поток1 и поток2 в 2-ух вкладках браузера.

Ситуация 1 - вещающий закрывает всь браузер целиком.
Ситуация 2 - вещающий закрыл вкладку с поток1.
Какие запросы должны отправиться на наш Веб сервер при этой ситуации.
Отправятся ли какие-то запросы в которых есть информация о имени потоков?
 

Max

Administrator
Staff member
Ситуация 1 - вещающий закрывает всь браузер целиком.
В этом случае отправятся 4 REST запроса в такой последовательности:
Code:
1. [вкладка 1] WCS отправляет StreamStatusEvent FAILED с причиной "Stopped by session disconnect"
2. [вкладка 1] WCS отправляет ConnectionStatusEvent DISCONNECTED
3. [вкладка 2] WCS отправляет StreamStatusEvent FAILED с причиной "Stopped by session disconnect"
4. [вкладка 2] WCS отправляет ConnectionStatusEvent DISCONNECTED
В запросах 1 и 3 будет имя потока.
Пример со сборкой 2440:
Code:
13:23:46,123 INFO  agerRemoteRmiService - RMI TCP Connection(23)-192.168.88.59 SEND REST OBJECT ==>
URL:http://localhost:9091/EchoApp/StreamStatusEvent
OBJECT:
{
  "nodeId" : "ET3IqW3xNOdbMzy8xarh4LwBCz7JetSz@192.168.88.59",
  "appKey" : "defaultApp",
  "sessionId" : "/192.168.88.254:56191/192.168.88.59:8443",
  "mediaSessionId" : "4afd1b10-93d8-11e7-8ab8-632138043b72",
  "name" : "36d5",
  "published" : true,
  "hasVideo" : true,
  "hasAudio" : true,
  "status" : "FAILED",
  "audioCodec" : "opus",
  "videoCodec" : "H264",
  "info" : "Stopped by session disconnect",
  "record" : false,
  "width" : 320,
  "height" : 240,
  "bitrate" : 0,
  "quality" : 0,
  "createDate" : 1504768889805,
  "mediaProvider" : "WebRTC",
  "history" : false,
  "publishing" : false,
  "playing" : false
}
13:23:46,149 INFO  agerRemoteRmiService - RMI TCP Connection(23)-192.168.88.59 RECEIVED REST OBJECT <==
URL:http://localhost:9091/EchoApp/StreamStatusEvent
OBJECT:
{
  "nodeId" : "ET3IqW3xNOdbMzy8xarh4LwBCz7JetSz@192.168.88.59",
  "appKey" : "defaultApp",
  "sessionId" : "/192.168.88.254:56191/192.168.88.59:8443",
  "mediaSessionId" : "4afd1b10-93d8-11e7-8ab8-632138043b72",
  "name" : "36d5",
  "published" : true,
  "hasVideo" : true,
  "hasAudio" : true,
  "status" : "FAILED",
  "audioCodec" : "opus",
  "videoCodec" : "H264",
  "info" : "Stopped by session disconnect",
  "record" : false,
  "width" : 320,
  "height" : 240,
  "bitrate" : 0,
  "quality" : 0,
  "createDate" : 1504768889805,
  "mediaProvider" : "WebRTC",
  "history" : false,
  "publishing" : false,
  "playing" : false
}
13:23:46,192 INFO  agerRemoteRmiService - RMI TCP Connection(23)-192.168.88.59 SEND REST OBJECT ==>
URL:http://localhost:9091/EchoApp/ConnectionStatusEvent
OBJECT:
{
  "nodeId" : "ET3IqW3xNOdbMzy8xarh4LwBCz7JetSz@192.168.88.59",
  "appKey" : "defaultApp",
  "sessionId" : "/192.168.88.254:56191/192.168.88.59:8443",
  "status" : "DISCONNECTED"
}
13:23:46,195 INFO  agerRemoteRmiService - RMI TCP Connection(70)-192.168.88.59 SEND REST OBJECT ==>
URL:http://localhost:9091/EchoApp/StreamStatusEvent
OBJECT:
{
  "nodeId" : "ET3IqW3xNOdbMzy8xarh4LwBCz7JetSz@192.168.88.59",
  "appKey" : "defaultApp",
  "sessionId" : "/192.168.88.254:56193/192.168.88.59:8443",
  "mediaSessionId" : "49e346a0-93d8-11e7-9c1f-9d1240eff6de",
  "name" : "4d7a",
  "published" : true,
  "hasVideo" : true,
  "hasAudio" : true,
  "status" : "FAILED",
  "audioCodec" : "opus",
  "videoCodec" : "H264",
  "info" : "Stopped by session disconnect",
  "record" : false,
  "width" : 320,
  "height" : 240,
  "bitrate" : 0,
  "quality" : 0,
  "createDate" : 1504768888050,
  "mediaProvider" : "WebRTC",
  "history" : false,
  "publishing" : false,
  "playing" : false
}
13:23:46,222 INFO  agerRemoteRmiService - RMI TCP Connection(23)-192.168.88.59 RECEIVED REST OBJECT <==
URL:http://localhost:9091/EchoApp/ConnectionStatusEvent
OBJECT:
{
  "nodeId" : "ET3IqW3xNOdbMzy8xarh4LwBCz7JetSz@192.168.88.59",
  "appKey" : "defaultApp",
  "sessionId" : "/192.168.88.254:56191/192.168.88.59:8443",
  "status" : "DISCONNECTED"
}
13:23:46,240 INFO  agerRemoteRmiService - RMI TCP Connection(70)-192.168.88.59 RECEIVED REST OBJECT <==
URL:http://localhost:9091/EchoApp/StreamStatusEvent
OBJECT:
{
  "nodeId" : "ET3IqW3xNOdbMzy8xarh4LwBCz7JetSz@192.168.88.59",
  "appKey" : "defaultApp",
  "sessionId" : "/192.168.88.254:56193/192.168.88.59:8443",
  "mediaSessionId" : "49e346a0-93d8-11e7-9c1f-9d1240eff6de",
  "name" : "4d7a",
  "published" : true,
  "hasVideo" : true,
  "hasAudio" : true,
  "status" : "FAILED",
  "audioCodec" : "opus",
  "videoCodec" : "H264",
  "info" : "Stopped by session disconnect",
  "record" : false,
  "width" : 320,
  "height" : 240,
  "bitrate" : 0,
  "quality" : 0,
  "createDate" : 1504768888050,
  "mediaProvider" : "WebRTC",
  "history" : false,
  "publishing" : false,
  "playing" : false
}
13:23:46,280 INFO  agerRemoteRmiService - RMI TCP Connection(70)-192.168.88.59 SEND REST OBJECT ==>
URL:http://localhost:9091/EchoApp/ConnectionStatusEvent
OBJECT:
{
  "nodeId" : "ET3IqW3xNOdbMzy8xarh4LwBCz7JetSz@192.168.88.59",
  "appKey" : "defaultApp",
  "sessionId" : "/192.168.88.254:56193/192.168.88.59:8443",
  "status" : "DISCONNECTED"
}
13:23:46,297 INFO  agerRemoteRmiService - RMI TCP Connection(70)-192.168.88.59 RECEIVED REST OBJECT <==
URL:http://localhost:9091/EchoApp/ConnectionStatusEvent
OBJECT:
{
  "nodeId" : "ET3IqW3xNOdbMzy8xarh4LwBCz7JetSz@192.168.88.59",
  "appKey" : "defaultApp",
  "sessionId" : "/192.168.88.254:56193/192.168.88.59:8443",
  "status" : "DISCONNECTED"
}
Ситуация 2 - вещающий закрыл вкладку с поток1.
Тогда на REST отправятся только те запросы, которые относятся к "вкладке 1", т.е. запросы 1 и 2, показанные выше.

Все вышеописанное справедливо в том случае, если
1) В браузере отраыты две вкладки.
2) Из первой вкладки публикуется "поток 1", из второй вкладки публикуется "поток 2".
 
Top