Flashphoner hangs up

edemin

New Member
Здравствуйте!
Подскажите один раз в 2 суток флешфонер падает и перестает отвечать, перестает отвечать админка его, перестает отвечать вебсокет. После рестарта службы все работает нормально. Есть ли какие-то рекомендуемые настройки машины, на которой работает флешфонер, в документации я таких не нашел.

Ошибка в логах следующая

Bash:
06:00:02,911 WARN  erSocketPipelineSink - HTTPS-BOSS-pool-3-thread-1 Failed to accept a connection.
java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
        at java.base/java.lang.Thread.start0(Native Method)
        at java.base/java.lang.Thread.start(Thread.java:803)
        at java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:937)
        at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1354)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.start(Unknown Source)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.register(Unknown Source)
        at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink$Boss.registerAcceptedChannel(Unknown Source)
        at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink$Boss.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
06:00:32,916 WARN  erSocketPipelineSink - HTTPS-BOSS-pool-3-thread-1 Failed to accept a connection.
java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
        at java.base/java.lang.Thread.start0(Native Method)
        at java.base/java.lang.Thread.start(Thread.java:803)
        at java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:937)
        at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1354)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.start(Unknown Source)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.register(Unknown Source)
        at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink$Boss.registerAcceptedChannel(Unknown Source)
        at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink$Boss.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
06:01:02,950 WARN  erSocketPipelineSink - HTTPS-BOSS-pool-3-thread-1 Failed to accept a connection.
java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
        at java.base/java.lang.Thread.start0(Native Method)
        at java.base/java.lang.Thread.start(Thread.java:803)
        at java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:937)
        at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1354)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.start(Unknown Source)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.register(Unknown Source)
        at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink$Boss.registerAcceptedChannel(Unknown Source)
        at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink$Boss.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
06:01:11,533 WARN       WSServerHandler - pool-23-thread-1 Close channel [id: 0x6c7b4760, /82.202.253.154:38200 => /10.129.0.16:8443] because: org.jboss.netty.handler.timeout.ReadTimeoutException 'null'
06:01:18,325 WARN  faultChannelPipeline - pool-23-thread-1 An exception was thrown by a user handler while handling an exception event ([id: 0x6c7b4760, /82.202.253.154:38200 :> /10.129.0.16:8443] EXCEPTION: org.jboss.netty.handler.timeout.ReadTimeoutException)
java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
        at java.base/java.lang.Thread.start0(Native Method)
        at java.base/java.lang.Thread.start(Thread.java:803)
        at java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:937)
        at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1354)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.start(Unknown Source)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.executeInIoThread(Unknown Source)
        at org.jboss.netty.channel.socket.nio.NioWorker.executeInIoThread(Unknown Source)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.executeInIoThread(Unknown Source)
        at org.jboss.netty.channel.socket.nio.NioWorker.executeInIoThread(Unknown Source)
        at org.jboss.netty.channel.socket.nio.AbstractNioChannelSink.execute(Unknown Source)

Лимиты для системы
Bash:
root@test:/usr/local/FlashphonerWebCallServer/logs/server_logs # ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 47925
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 190000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 190000
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Sysctl максимальное кол-во файлов

Bash:
root@test:/usr/local/FlashphonerWebCallServer/logs/server_logs # sysctl -a | grep file
fs.file-max = 5000000000
fs.file-nr = 7328       0       5000000000

Вот еще дополнительная информация 22037 это java процесс флешфонера


Code:
root@test:/usr/local/FlashphonerWebCallServer/logs/server_logs # ps aux | grep java
root     22037  232  6.3 6870976 779264 ?      Sl   06:10 294:35 java -Xmx4096M -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxre
mote=true -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=50999 -Dcom.sun.management
.jmxremote.host=localhost -Djava.rmi.server.hostname=localhost -XX:ErrorFile=/usr/local/FlashphonerWebCallServer/logs/error%p.log -Xlog:gc*:/usr/local/FlashphonerWebCallServer/logs/gc-core-2020-10-05_06-10.log:t
ime -XX:+ExplicitGCInvokesConcurrent -Dsun.rmi.dgc.client.gcInterval=36000000000 -Dsun.rmi.dgc.server.gcInterval=36000000000 -Dcom.flashphoner.fms.AppHome=/usr/local/FlashphonerWebCallServer -Djava.library.path=
/usr/local/FlashphonerWebCallServer/lib/so:/usr/local/FlashphonerWebCallServer/lib -DWCS_NON_ROOT=false -DsessionDebugEnabled=false -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" -cp /usr/local/FlashphonerWe
bCallServer/lib/* com.flashphoner.server.Server

root@test:/usr/local/FlashphonerWebCallServer/logs/server_logs # ps -eLf 22037 | wc -l
1118
root@test:/usr/local/FlashphonerWebCallServer/logs/server_logs # ps -eL -q 22037 | wc -l
563
root@test:/usr/local/FlashphonerWebCallServer/logs/server_logs # cat /proc/sys/kernel/threads-max
95851
root@test:/usr/local/FlashphonerWebCallServer/logs/server_logs # ulimit -a | grep -i processes
max user processes              (-u) 190000
root@test:/usr/local/FlashphonerWebCallServer/logs/server_logs # sysctl -a | grep kernel.pid_max
kernel.pid_max = 32768

Какие еще параметры стоит покрутить, чтоб флешфонер не падал раз в 2 суток? Спасибо!


С уважением,
Демин Евгений
 

Max

Administrator
Staff member
Добрый день.
Пожалуйста, выполните следующие пункты из этого списка:
3. Расширить диапазон медиапортов, проверить, что диапазон не пересекается с другими портами, используемыми в работе сервера
4. Проверить диапазон динамических портов Linux и при необходимости изменить его
11. Проверить объем памяти, выделенной под Java heap (рекомендуется не менее чем 1/2 физической памяти сервера
12. Обновить JDK до 12 или 14 и настроить сборщик мусора ZGC
 

edemin

New Member
Добрый день.
Пожалуйста, выполните следующие пункты из этого списка:
3. Расширить диапазон медиапортов, проверить, что диапазон не пересекается с другими портами, используемыми в работе сервера
4. Проверить диапазон динамических портов Linux и при необходимости изменить его
11. Проверить объем памяти, выделенной под Java heap (рекомендуется не менее чем 1/2 физической памяти сервера
12. Обновить JDK до 12 или 14 и настроить сборщик мусора ZGC
Спасибо! А что можете подсказать про пункт 2
2. Убедиться, что пароли пользователей admin и demo изменены на безопасные
Не нашли, где можно сменить пароль для пользователя demo, вот здесь раздел Вход в консоль и Изменение пароля нет информации как можно сменить пароль для пользователя demo
 

Max

Administrator
Staff member
Не нашли, где можно сменить пароль для пользователя demo, вот здесь раздел Вход в консоль и Изменение пароля нет информации как можно сменить пароль для пользователя demo
Web Call Server 5 - Руководство пользователя
Данное руководство пользователя устарело. Выше мы приводили ссылки на актуальную документацию. Описание интерфейса командной строки приведено здесь, команда для смены пароля пользователя описана здесь
Code:
passwd demo
Вы также можете отключить веб-интерфейс сервера полностью в настройках сервера
Code:
http_enable_paths=rest,action,shared,embed_player,empty
в этом случае менять пароли не обязательно
 

edemin

New Member
Данное руководство пользователя устарело. Выше мы приводили ссылки на актуальную документацию. Описание интерфейса командной строки приведено здесь, команда для смены пароля пользователя описана здесь
Code:
passwd demo
Вы также можете отключить веб-интерфейс сервера полностью в настройках сервера
Code:
http_enable_paths=rest,action,shared,embed_player,empty
в этом случае менять пароли не обязательно
Спасибо, а подскажите еще флешфонер слушает на всех интерфейсах 0.0.0.0, а чтобы закрыть например веб-сокет соединение basic auth авторизацией можно ли как-то флешфонер повесить на 127.0.0.1, чтобы потом через nginx проксировать на 127.0.0.1? Или может быть есть какие-то другие лучшие практики по безопасности для флешфонера?
 

Max

Administrator
Staff member
какие-то другие лучшие практики по безопасности для флешфонера?
Стандартные практики:

1. Закрыть все порты, кроме тех, что используются, на файрволе.

Например, публично используются:
wss 443 TCP
webrtc/rtp/rtcp [31000-32000] UDP TCP
Открываем.

Все остальные порты закрываем и делаем доступными только для management сети.

2. Над wss опционально надставляем Nginx, как дополнительный барьер.

Если сеть более сложная, можно повесить wss и webrtc порты на другие сетевые интерфейсы, используя настройки
wss.address, rtc_ip, rtc_ip_local все настройки
 
Top