Информация о нагрузке и ресурсах WCS-сервера доступна на порту 8081 по URL
http://test.flashphoner.com:8081/?action=stat |
где test.flashphoner.com - это адрес WCS-сервера.
Она включает данные о публикуемых и воспроизводимых потоках, SIP-звонках и характеристиках сервера.
connections_stats | Соединения с WCS-сервером |
---|---|
connections | Общее количество соединений |
connections_rtmfp | Количество RTMFP-соединений (Flash) |
connections_websocket | Количество WebSocket-соединений |
port_stats | Порты, слушаемые WCS-сервером |
ports_media_free | Количество свободных медиапортов |
ports_media_busy | Количество занятых медиапортов |
ports_media_quarantine | Количество медиапортов в карантине |
ports_wcs_agents_free | Количество свободных портов, используемых в CDN |
ports_wcs_agents_busy | Количество занятых портов, используемых в CDN |
ports_wcs_agents_quarantine | Количество портов, используемых в CDN, находящихся в карантине |
streams_stats | Сессии аудио и видеопотоков на WCS-сервере |
streams_rtsp_in | Количество активных RTSP-сессий, раздающих трафик |
streams_rtsp_out | Количество активных RTSP-сессий, забирающих трафик |
streams_websocket_out | Количество активных потоков, воспроизводимых через WebSocket |
streams_rtmp_out | Количество активных RTMP-потоков |
streams_webrtc_in | Количество активных потоков, публикуемых через WebRTC |
streams_webrtc_out | Количество активных потоков, воспроизводимых через WebRTC |
streams_rtmfp_in | Количество активных потоков, публикуемых через RTMFP |
streams_rtmfp_out | Количество активных потоков, воспроизводимых через RTMFP |
streams_viewers | Количество активных клиентов, воспроизводящих опубликованные потоки |
streams_synchronization | Синхронизация в опубликованных потоках |
native_resources | Информация о потребляемых ресурсах |
native_resources | Информация о кодировании/декодировании медиапотока |
core_stats | Параметры системы (полученные с использованием методов Java) и параметры WCS-сервера |
core_threads | Количество активных потоков server-процесса WCS |
core_java_threads | Текущее количество живых потоков |
core_java_threads_blocked | Текущее количество заблокированных потоков |
core_java_committedMemory | Количество гарантированно доступной виртуальной памяти, в байтах |
core_java_freePhysicalMemorySize | Количество свободной физической памяти, в байтах |
core_java_arch | Aрхитектура операционной системы |
core_java_availableProcessors | Количество процессоров доступных виртуальной машине Java |
core_java_freeSwapSpaceSize | Количество свободного swap-пространства, в байтах |
core_java_maxFileDescriptorCount | Максимальное количество файл-дескрипторов |
core_java_open_file_descriptors | Количество файл-дескрипторов, открытых в виртуальной машине Java |
core_java_cpu_usage | "Недавнее использование процессора" для процесса виртуальной машины Java |
core_java_totalPhysicalMemorySize | Количество физической памяти, в байтах |
core_java_totalSwapSpaceSize | Количество swap-пространства, в байтах |
core_java_uptime | Сколько времени прошло от запуска виртуальной машины Java, в миллисекундах |
core_heap_memory_used | Использование памяти в куче |
core_rss_memory | Использование памяти |
core_open_file_descriptors | Количество открытых файл-дескрипторов |
core_cpu_usage | Процент времени, затраченного на работу процессов |
core_gc | Информация о "сборке мусора" |
core_gc_manager | Информация о "сборке мусора" в административном модуле |
core_heap_memory_used | Используемая память в куче |
core_java_version | Версия Java |
core_java_nio_memory_buffer_count | Количество используемых TCP NIO буферов |
core_java_nio_memory_used | Объем памяти, используемой под TCP NIO буферы |
core_java_nio_memory_capacity | Объем памяти, выделенной под TCP NIO буферы |
call_stats | SIP-звонки на WCS-сервере |
sip_calls | Количество SIP-звонков |
sip_calls_established | Количество активных SIP-звонков |
sip_calls_in | Количество входящих SIP-звонков |
sip_calls_out | Количество исходящих SIP-звонков |
sip_calls_per_second (cps) | Количество SIP-звонков в секунду |
sip_stats | SIP-клиенты |
sip_registered | Количество клиентов в состоянии REGISTERED |
recording_stats | Запись аудио и видеофайлов |
recording_sessions | Количество активных сессий записи |
recording_threads | Количество процессорных потоков для записи |
recording_thread_min_writers | Минимальное количество записей на один процессорный поток |
recording_thread_max_writers | Максимальное количество записей на один процессорный поток |
recording_thread_average_writers | Среднее количество записей на один процессорный поток |
recording_writers_list | Список активных записей |
recording_writers_with_max_queue | Список записей с максимальным размером очереди данных |
recording_writers_with_min_queue | Список записей с минимальным размером очереди данных |
recording_min_writers_queue | Минимальный размер очереди данных на запись |
recording_average_writers_queue | Средний размер очереди данных на запись |
recording_max_writers_queue | Максимальный размер очереди данных на запись |
system_stats | Параметры системы |
system_java_cpu_usage | "Недавнее использование процессора" для всей системы (получено с использованием методов Java) |
system_java_load_average | Средняя нагрузка системы за последнюю минуту (получено с использованием методов Java) |
system_uptime | Сколько времени прошло от запуска Linux-сервера |
system_memory_total | Доступная к использованию RAM-память, в килобайтах |
system_memory_free | Количество физической RAM-памяти, не используемой системой, в килобайтах |
system_cpu_usage | Процент времени, затраченного на работу процессов ядра |
network_stats | Статистика сетевого трафика |
global_bandwidth_in | Пропускная способность канала для входящих соединений |
global_bandwidth_out | Пропускная способность канала для исходящих соединений |
version_stats | Информация о версии WCS |
wcs_version | Текущая версия WCS-сервера |
wcs_client_version | Текущая версия Web SDK |
gc_stats | Информация о последнем цикле сборки мусора |
gc_last_pause_ms | Пауза в работе JVM, в миллисекундах |
gc_last_duration_ms | Общая длительность цикла сборки мусора, в миллисекундах |
gc_last_heap_before_mb | Объем кучи в мегабайтах, до сборки мусора |
gc_last_heap_after_mb | Объем кучи в мегабайтах, после сборки мусора |
errors_info | Информация об ошибках (собирается на основании перехваченных исключений Java) |
java.io.IOException | Количество ошибок ввода-вывода |
java.lang.ArrayIndexOutOfBoundsException | Количество выходов за пределы массива |
java.lang.IllegalArgumentException | Количество ошибок в аргументах функций |
com.flashphoner.server.license.activation.A.C | Количество ошибок при активации лицензии |
java.lang.NullPointerException | Количество попыток перехода по нулевому указателю |
java.lang.OutOfMemoryError | Количество ошибок выделения памяти (требуется перезапуск сервера) |
degraded_streams_stats | Информация о деградации потоков |
degraded_streams | Количество деградировавших потоков |
degraded_streams_percent | Процент деградации от общего числа потоков на сервере |
transcoding_stats | Информация о транскодировании потоков |
transcoding_video_decoding_resolutions | Список декодируемых разрешений в виде "разрешение/количество потоков" |
transcoding_video_decoding_average_time | Среднее время декодирования по разрешениям в виде "разрешение/время в мс" |
transcoding_video_decoding_max_time | Максимальное время декодирования по разрешениям в виде "разрешение/время в мс" |
transcoding_video_decoding_average_queue_size | Средний размер очереди декодирования по разрешениям в виде "разрешение/размер очереди" |
transcoding_video_decoding_max_queue_size | Максимальный размер очереди декодирования по разрешениям в виде "разрешение/размер очереди" |
transcoding_video_encoding_resolutions | Список кодируемых разрешений в виде "разрешение/количество потоков" |
transcoding_video_encoding_average_time | Среднее время кодирования по разрешениям в виде "разрешение/время в мс" |
transcoding_video_encoding_max_time | Максимальное время кодирования по разрешениям в виде "разрешение/время в мс" |
transcoding_video_encoding_average_queue_size | Средний размер очереди кодирования по разрешениям в виде "разрешение/размер очереди" |
transcoding_video_encoding_max_queue_size | Максимальный размер очереди кодирования по разрешениям в виде "разрешение/размер очереди" |
transcoding_video_decoding_load | Интегральный показатель нагрузки декодирования |
transcoding_video_encoding_load | Интегральный показатель нагрузки кодирования |
buffer_output_stats | Информация о выравнивающем буфере (только в JSON формате) |
cdn_stats | Информация о CDN |
cdn_version | Версия CDN, поддерживаемая данным сервером |
cdn_role | Роль сервера в CDN |
cdn_group | Группа, в которую входит сервер |
custom_stats | Статистика, собираемая при помощи внешнего скрипта |
Каждый параметр может быть запрошен отдельно, например
http://test.flashphoner.com:8081/?action=stat¶ms=native_resources |
Статистику используемых ресурсов и информацию о нагрузке WCS-сервера, объединенную по группам, можно запросить по имени группы (доступны connections_stats, streams_stats, port_stats, call_stats, degraded_streams_stats, system_stats, core_stats)
http://test.flashphoner.com:8081/?action=stat&groups=call_stats |
В запрос можно включить несколько наименований групп
http://test.flashphoner.com:8081/?action=stat&groups=call_stats,connections_stats |
Параметры системы могут быть исключены из полной выборки при помощи настройки в файле flashphoner.properties
parse_system_stats=false |
В этом случае параметры системы предоставляются только по запросу.
По умолчанию, статистика выводится в plain text
-----Connection Stats----- connections=1 connections_rtmfp=0 connections_websocket=1 -----Port Stats----- ports_media_free=495 ports_media_busy=4 ports_media_quarantine=0 -----Stream Stats----- streams_webrtc_in=1 streams_webrtc_out=1 streams_websocket_out=0 streams_rtmfp_in=0 streams_rtmfp_out=0 streams_rtmp_in=0 streams_rtmp_out=0 streams_viewers=test/1 streams_rtsp_in=0 streams_rtsp_out=0 streams_rtmp_client_out=0 streams_play_rate=0 streams_stop_rate=0 -----Native Resources----- native_resources=140537376620832,NENC:H264/FFMPEG,1859;140537236444800,FFDecoderNative:H264/FFMPEG,39404417 native_resources.audio_codecs=0 native_resources.audio_resamplers=0 native_resources.video_transcoders=0 native_resources.video_decoders=1 native_resources.video_encoders=1 native_resources.writers=0 -----Core Stats----- core_java_threads=71 core_java_committedMemory=3127017472 core_java_freePhysicalMemorySize=69820416 core_java_arch=amd64 core_java_availableProcessors=2 core_java_freeSwapSpaceSize=1044369408 core_java_maxFileDescriptorCount=20000 core_java_open_file_descriptors=206 core_java_cpu_usage=39.88 core_java_totalPhysicalMemorySize=1927303168 core_java_totalSwapSpaceSize=1073737728 core_java_uptime=102191 -----Call Stats----- sip_processed_calls=0 sip_calls_state=established/0;trying/0;ringing/0;ring/0;ring_media/0;hold/0;busy/0;finish/0;session_progress/0;pending/0;failed/0 sip_calls=0 sip_calls_established=0 sip_calls_in=0 sip_calls_out=0 sip_calls_per_second=0.00 -----Sip Stats----- sip_registered=0 -----Recording Stats----- recording_sessions=0 -----System Stats----- system_java_cpu_usage=75.00 system_java_load_average=0.87 -----Network Stats (Mbit/s)----- global_bandwidth_in=0.000 global_bandwidth_out=0.000 -----Version info----- wcs_version=5.2.416-32aab7dc90527bfe2ffb4711090fe75c6613a2bb wcs_client_version=0.5.28.2753-9ba78705727d3ee9d75c1c10f488d21cd00a601c -----Errors info----- -----Degraded streams----- degraded_streams= degraded_streams_percent=0 |
Начиная со сборки 5.2.416, поддерживаются также форматы JSON и Prometheus. Для вывода статистики в формате JSON необходимо указать формат в URI запроса
curl -s 'http://localhost:8081/?action=stat&format=json' |
{ "connections_stats": { "connections": "1", "connections_rtmfp": "0", "connections_websocket": "1" }, "port_stats": { "ports_media_free": "495", "ports_media_busy": "4", "ports_media_quarantine": "0" }, "streams_stats": { "streams_webrtc_in": "1", "streams_webrtc_out": "1", "streams_websocket_out": "0", "streams_rtmfp_in": "0", "streams_rtmfp_out": "0", "streams_rtmp_in": "0", "streams_rtmp_out": "0", "streams_viewers": [ "test/1" ], "streams_rtsp_in": "0", "streams_rtsp_out": "0", "streams_rtmp_client_out": "0", "streams_play_rate": "0", "streams_stop_rate": "0" }, "native_resources": { "native_resources": [ "140537376620832,NENC:H264/FFMPEG,9819", "140537236444800,FFDecoderNative:H264/FFMPEG,209561611" ], "native_resources.audio_codecs": "0", "native_resources.audio_resamplers": "0", "native_resources.video_transcoders": "0", "native_resources.video_decoders": "1", "native_resources.video_encoders": "1", "native_resources.writers": "0" }, "core_stats": { "core_java_threads": "67", "core_java_committedMemory": "3127017472", "core_java_freePhysicalMemorySize": "73224192", "core_java_arch": "amd64", "core_java_availableProcessors": "2", "core_java_freeSwapSpaceSize": "1044107264", "core_java_maxFileDescriptorCount": "20000", "core_java_open_file_descriptors": "188", "core_java_cpu_usage": "37.19", "core_java_totalPhysicalMemorySize": "1927303168", "core_java_totalSwapSpaceSize": "1073737728", "core_java_uptime": "358833" }, "call_stats": { "sip_processed_calls": "0", "sip_calls_state": [ "established/0", "trying/0", "ringing/0", "ring/0", "ring_media/0", "hold/0", "busy/0", "finish/0", "session_progress/0", "pending/0", "failed/0" ], "sip_calls": "0", "sip_calls_established": "0", "sip_calls_in": "0", "sip_calls_out": "0", "sip_calls_per_second": "0.00" }, "sip_stats": { "sip_registered": "0" }, "recording_stats": { "recording_sessions": "0" }, "system_stats": { "system_java_cpu_usage": "50.00", "system_java_load_average": "0.73" }, "network_stats": { "global_bandwidth_in": "0.000", "global_bandwidth_out": "0.000" }, "version_stats": { "wcs_version": "5.2.416-32aab7dc90527bfe2ffb4711090fe75c6613a2bb", "wcs_client_version": "0.5.28.2753-9ba78705727d3ee9d75c1c10f488d21cd00a601c" }, "errors_info": {}, "degraded_streams_stats": { "degraded_streams": [], "degraded_streams_percent": "0" } } |
Для вывода статистики в формате Prometheus необходимо указать формат в URI запроса
curl -s 'http://localhost:8081/?action=stat&format=prometheus' |
connections_stats{param="connections"} 1 connections_stats{param="connections_rtmfp"} 0 connections_stats{param="connections_websocket"} 1 port_stats{param="ports_media_free"} 495 port_stats{param="ports_media_busy"} 4 port_stats{param="ports_media_quarantine"} 0 streams_stats{param="streams_webrtc_in"} 1 streams_stats{param="streams_webrtc_out"} 1 streams_stats{param="streams_websocket_out"} 0 streams_stats{param="streams_rtmfp_in"} 0 streams_stats{param="streams_rtmfp_out"} 0 streams_stats{param="streams_rtmp_in"} 0 streams_stats{param="streams_rtmp_out"} 0 streams_stats{param="streams_viewers",name="test"} 1 streams_stats{param="streams_rtsp_in"} 0 streams_stats{param="streams_rtsp_out"} 0 streams_stats{param="streams_rtmp_client_out"} 0 streams_stats{param="streams_play_rate"} 0 streams_stats{param="streams_stop_rate"} 0 native_resources{param="native_resources",id="140537376620832",name="NENC:H264/FFMPEG"} 11129 native_resources{param="native_resources",id="140537236444800",name="FFDecoderNative:H264/FFMPEG"} 239113192 native_resources{param="native_resources.audio_codecs"} 0 native_resources{param="native_resources.audio_resamplers"} 0 native_resources{param="native_resources.video_transcoders"} 0 native_resources{param="native_resources.video_decoders"} 1 native_resources{param="native_resources.video_encoders"} 1 native_resources{param="native_resources.writers"} 0 core_stats{param="core_java_threads"} 63 core_stats{param="core_java_committedMemory"} 3127017472 core_stats{param="core_java_freePhysicalMemorySize"} 67538944 core_stats{core_java_arch="amd64"} 1 core_stats{param="core_java_availableProcessors"} 2 core_stats{param="core_java_freeSwapSpaceSize"} 1043853312 core_stats{param="core_java_maxFileDescriptorCount"} 20000 core_stats{param="core_java_open_file_descriptors"} 188 core_stats{param="core_java_cpu_usage"} 37.02 core_stats{param="core_java_totalPhysicalMemorySize"} 1927303168 core_stats{param="core_java_totalSwapSpaceSize"} 1073737728 core_stats{param="core_java_uptime"} 401113 call_stats{param="sip_processed_calls"} 0 call_stats{param="sip_calls_state",name="established"} 0 call_stats{param="sip_calls_state",name="trying"} 0 call_stats{param="sip_calls_state",name="ringing"} 0 call_stats{param="sip_calls_state",name="ring"} 0 call_stats{param="sip_calls_state",name="ring_media"} 0 call_stats{param="sip_calls_state",name="hold"} 0 call_stats{param="sip_calls_state",name="busy"} 0 call_stats{param="sip_calls_state",name="finish"} 0 call_stats{param="sip_calls_state",name="session_progress"} 0 call_stats{param="sip_calls_state",name="pending"} 0 call_stats{param="sip_calls_state",name="failed"} 0 call_stats{param="sip_calls"} 0 call_stats{param="sip_calls_established"} 0 call_stats{param="sip_calls_in"} 0 call_stats{param="sip_calls_out"} 0 call_stats{param="sip_calls_per_second"} 0.00 sip_stats{param="sip_registered"} 0 recording_stats{param="recording_sessions"} 0 system_stats{param="system_java_cpu_usage"} 66.67 system_stats{param="system_java_load_average"} 0.84 network_stats{param="global_bandwidth_in"} 0.000 network_stats{param="global_bandwidth_out"} 0.000 version_stats{wcs_version="5.2.416-32aab7dc90527bfe2ffb4711090fe75c6613a2bb"} 1 version_stats{wcs_client_version="0.5.28.2753-9ba78705727d3ee9d75c1c10f488d21cd00a601c"} 1 degraded_streams_stats{param="degraded_streams"} 0 degraded_streams_stats{param="degraded_streams_percent"} 0 |
В сборке 5.2.443 добавлена возможность вывода краткой и подробной статистики транскодирования потоков. Краткая статистика группируется по разрешениям и доступна во всех форматах, например:
-----Transcoding info----- transcoding_video_decoding_resolutions=640x360/1 transcoding_video_decoding_average_time=640x360/2.0 transcoding_video_decoding_max_time=640x360/2 transcoding_video_decoding_average_queue_size=640x360/0.0 transcoding_video_decoding_max_queue_size=640x360/0 transcoding_video_encoding_resolutions=426x240/1;640x360/1;852x480/1 transcoding_video_encoding_average_time=426x240/2.0;640x360/2.0;852x480/6.0 transcoding_video_encoding_max_time=426x240/2;640x360/2;852x480/6 transcoding_video_encoding_average_queue_size=426x240/0.0;640x360/0.0;852x480/0.0 transcoding_video_encoding_max_queue_size=426x240/0;640x360/0;852x480/0 |
Здесь отображаются:
Подробная статистика выводится только в формате JSON, например
curl -s 'http://localhost:8081/?action=stat&format=json&groups=transcoding_stats' | jq |
и группируется по опубликованным потокам
"transcoding_video_full_info": { "test1": { "codec": "H264", "queueSize": 0, "distributors": [ { "codec": "H264", "queueSize": 0, "resolution": "426x240", "averageProcessingTime": 3 }, { "codec": "H264", "queueSize": 0, "resolution": "640x360", "averageProcessingTime": 5 }, { "codec": "H264", "queueSize": 0, "resolution": "852x480", "averageProcessingTime": 10 } ], "resolution": "640x360", "averageProcessingTime": 3 } } |
Здесь:
В сборке 5.2.570 в статистику транскодирования добавлены интегральные показатели нагрузки декодирования и кодирования
-----Transcoding info----- ... transcoding_video_decoding_load=22118400 ... transcoding_video_encoding_load=7983360 |
Нагрузка декодирования рассчитывается следующим образом
transcoding_video_decoding_load = ∑ width * height * fps |
Здесь
Нагрузка кодирования рассчитывается следующим образом
transcoding_video_encoding_load = ∑ width * height * fps |
Здесь
В сборке 5.2.471 добавлен вывод информации о CDN, в которой участвует данный сервер
curl -s 'http://localhost:8081/?action=stat&groups=cdn_stats' |
-----CDN info----- cdn_version=2.3 cdn_role=ORIGIN cdn_group= |
Здесь:
cdn_version - версия CDN, поддерживаемая данным сервером
cdn_role - роль сервера в CDN
cdn_group - группа, к которой принадлежит сервер, либо пустая строка, если сервер не введен ни в одну группу
В сборке 5.2.508 в статистику потоков добавлен вывод информации о синхронизации аудио и видео в опубликованных потоках:
-----Stream Stats----- streams_synchronization=stream1/90,stream2/-11 |
Значение метрик вычисляется как разность между текущими значениями аудио и видео синхронизации
var metric = lastAudioSync - lastVideoSync; |
Таким образом, положительное значение метрики показывает, что аудио в данный момент обгоняет видео, а отрицательное - что аудио отстает от видео.
Изменения данной метрики в небольших пределах являются нормой. Если метрика для потока остается высоким и постоянным по знаку, это может означать проблемы с данным потоком.
Hачиная со сборки 5.2.518, поддерживается вывод метрик публикуемых потоков в формате Prometehus по запросу
curl -s 'http://localhost:8081/?action=stat&format=prometheus&groups=publish_streams' |
Запрос возвращает набор метрик для каждого потока, опубликованного в данный момент на сервере, например
publish_streams{param="AUDIO_SYNC",name="test"} 3834464913756 publish_streams{param="AUDIO_CODEC",name="test"} 111 publish_streams{param="AUDIO_RATE",name="test"} 19192 publish_streams{param="AUDIO_LOST",name="test"} 0 publish_streams{param="VIDEO_SYNC",name="test"} 3834464913764 publish_streams{param="VIDEO_K_FRAMES",name="test"} 6 publish_streams{param="VIDEO_NACK",name="test"} 0 publish_streams{param="VIDEO_LOST",name="test"} 0 publish_streams{param="VIDEO_CODEC",name="test"} 119 publish_streams{param="VIDEO_B_FRAMES",name="test"} 0 publish_streams{param="VIDEO_PLI",name="test"} 0 publish_streams{param="VIDEO_RATE",name="test"} 377952 publish_streams{param="VIDEO_WIDTH",name="test"} 640 publish_streams{param="VIDEO_GOP_SIZE",name="test"} 60 publish_streams{param="VIDEO_HEIGHT",name="test"} 360 publish_streams{param="VIDEO_FPS",name="test"} 27 publish_streams{param="VIDEO_P_FRAMES",name="test"} 342 |
Если на сервере нет публикаций, то запрос вернет пустую страницу
В сборке 5.2.543 добавлена возможность вывода информации об использовании выравнивающих буферов на выходе транскодеров. Информация доступна только в формате JSON
curl -s 'http://localhost:8081/?action=stat&format=json&groups=buffer_stats' |
и группируется по транскодируемым потока и подписчикам на эти потоки
{ "buffer_stats": { "buffer_output_info": { "test": { "buffer_output_video_average": "0.0", "subscribers": { "25b94cd0-5eaf-11ea-a9b7-abda8d208547": { "overflows": 0, "buffer_output_audio": 4, "buffer_output_video": 0 }, ... }, "buffer_output_audio_average": "4.0" } } } } |
Здесь
В сборке 5.2.579 добавлена возможность сбора статистики, недоступной из JVM, при помощи вызова внешнего скрипта.
Имя скрипта указывается настройкой
custom_stats_script=/path/to/custom_stats.sh |
По умолчанию, если указано только имя скрипта без пути, он должен располагаться в каталоге /usr/local/FlashphonerWebCallServer/bin
Скрипт должен возвращать параметры в виде
key1=value1 key2=value2 ... |
Пример скрипта, который возвращает версию Java и последнюю строку из лога сборщика мусора
#!/bin/bash ver=$(java -version 2>&1 | grep "version" | cut -d" " -f 3 | sed 's/\"//g') echo "java_ver=$ver" gc_log=$( ls -t /usr/local/FlashphonerWebCallServer/logs/gc-core* | head -1) echo "gc=$(tail -n1 $gc_log)" exit 0 |
Этот скрипт добавит на страницу статистики
-----Custom info----- java_ver=1.8.0_222 gc=2020-04-23T15:20:56.138+0700: 1546.835: [GC (Allocation Failure) 2020-04-23T15:20:56.138+0700: 1546.835: [ParNew: 8978K->325K(9216K), 0.0103299 secs] 26379K->18056K(36172K), 0.0104582 secs] [Times: user |
Параметры, возвращаемые скриптом, доступны во всех форматах статистики. В формате Prometheus ключ и значение преобразуются в метку:
custom_stats{java_ver="1.8.0_222"} 1 custom_stats{gc="2020-04-23T15:11:11.235+0700: 961.933: [GC (Allocation Failure) 2020-04-23T15:11:11.235+0700: 961.933: [ParNew: 9216K->793K(9216K), 0.0042971 secs] 26617K->18195K(36172K), 0.0044029 secs] [Times: user"} 1 |
1. Не допускается использование длительных операций и задержек в этом скрипте, поскольку это вызовет задержку выдачи страницы статистики.
2. Не допускается наличие кавычек в именах и значениям параметров, для совместимости с Prometheus. Например, значения
java_ver=openjdk version "1.8.0_222" |
использовать нельзя, а
java_ver=1.8.0_222 |
можно
В сборке 5.2.769 добавлена возможность получения информации о количестве определенных ошибок (исключений) Java VM при помощи запроса
http://localhost:8081/?action=stat¶ms=wcs_errors,<exception class name> |
Например, для того, чтобы своевременно контролировать нехватку физической памяти, необходимо периодически запрашивать
http://localhost:8081/?action=stat¶ms=wcs_errors,java.lang.OutOfMemoryError |
Если полученный ответ содержит указанное исключение, и количество ошибок больше либо равно единицы
-----Errors info----- java.lang.OutOfMemoryError=4 |
необходимо выводить клиентов и перезапускать сервер.
В сборке 5.2.897 добавлена возможность получения статистики сборщика мусора (garbage collector)
http://localhost:8081/?action=stat&groups=gc_stats |
В статистику входят следующие параметры последнего цикла сборки мусора на момент запроса:
-----Gc info----- gc_last_pause_ms=62 gc_last_duration_ms=62 gc_last_heap_before_mb=315 gc_last_heap_after_mb=78 |
Здесь:
Информация выбирается из соответствующих параметров Java MX Beans.
Для ZGC статистика выбирается из лога сборщика мусора, поскольку информация в Java MX Beans может возвращаться некорректно. Поэтому при использовании ZGC в настройках необходимо указать
zgc_log_parser_enable=true |
Также необходимо задать формат меток времени в логах. По умолчанию, используется полный формат с датой
zgc_log_time_format=yyyy-MM-dd'T'HH:mm:ss.SSSZ |
Если в лог выводятся только секунды от начала работы JVM, формат задается как
zgc_log_time_format=ss.SSS |
При необходимости, можно задать шаблон для поиска файлов лога. По умолчанию, предполагается, что имя файла содержит дату и время
zgc_log_parser_path=logs/gc-core-[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}.log |
В сборке 5.2.992 добавлена возможность вывода статистики записи видео на диск, включая запись HLS сегментов. В статистику входят следующие параметры
-----Recording Stats----- recording_sessions=10 recording_threads=4 recording_thread_min_writers=2 recording_thread_max_writers=3 recording_thread_average_writers=3 recording_writers_list=17cb0c08/1;cb7e90f5/1;d06bbc41/1;8eba2219/1;104f63c4/1;3da56751/1;474e59e9/1;1088894d/1;b95459b9/1;b6a57401/1 recording_writers_with_max_queue=17cb0c08/2;104f63c4/3;474e59e9/2;b95459b9/1 recording_writers_with_min_queue=d06bbc41/0;8eba2219/2;474e59e9/2;b95459b9/1 recording_min_writers_queue=0 recording_average_writers_queue=2 recording_max_writers_queue=3 |
Здесь отображаются:
Например, если размеры очередей начинают устойчиво расти, и при этом загрузка процессора мала (до 25%)Ю это может говорить о том, что данные не успевают сброситься на диск. Если же загрузка процессора при росте очередей велика, это означает. что не хватает мощности процессора для транскодинга звука или видео при записи.
Подробная статистика записи выводится в формате JSON
http://localhost:8081/?action=stat&format=json&groups=recording_stats |
{ "recording_stats": { "recording_sessions": "10", "recording_threads": "4", "recording_thread_min_writers": "2", "recording_thread_max_writers": "3", "recording_thread_average_writers": "3", "recording_writers_list": [ "17cb0c08", "cb7e90f5", "d06bbc41", "8eba2219", "104f63c4", "3da56751", "474e59e9", "1088894d", "b95459b9", "b6a57401" ], ... "recording_full_info": [ { "threadId": 97, "writersCount": 3, "writersInfo": [ { "queueSize": 3, "streams": [ "17cb0c08" ] }, { "queueSize": 0, "streams": [ "cb7e90f5" ] }, { "queueSize": 2, "streams": [ "d06bbc41" ] } ] }, ... ] } } |
Здесь: