jellyfin在centos上如何进行性能测试
导读:Jellyfin 在 CentOS 的性能测试方案 一、测试目标与场景设计 明确目标:评估服务器的并发转码能力、单路转码吞吐/时延、磁盘与网络瓶颈、以及**硬件加速(QSV/NVENC)**带来的收益。 场景覆盖: 直链播放(不转码)验...
Jellyfin 在 CentOS 的性能测试方案
一、测试目标与场景设计
- 明确目标:评估服务器的并发转码能力、单路转码吞吐/时延、磁盘与网络瓶颈、以及**硬件加速(QSV/NVENC)**带来的收益。
- 场景覆盖:
- 直链播放(不转码)验证网络与磁盘读能力。
- 单路转码(不同分辨率/码率/编码)验证编解码路径与CPU/GPU占用。
- 多路并发转码(逐步加压)找到系统饱和点与稳定性边界。
- 不同客户端与协议(HLS/DASH/DLNA)下的播放流畅度与首帧时延。
二、环境与工具准备
- 系统与监控
- 安装常用监控工具:sysstat(提供 iostat/sar)、htop(可选)、以及 Prometheus + Grafana(可选,做长期可视化)。
- 关键命令:top/htop、vmstat、iostat、sar、free 用于实时与历史性能数据采集。
- 硬件加速检查
- Intel QSV:在宿主机或容器内执行 vainfo 检查 iHD 驱动是否正常;Docker 需映射 /dev/dri 设备以启用 QSV。
- NVIDIA NVENC:安装 nvidia-driver 与 nvidia-container-toolkit,确保容器可访问 /dev/nvidia* 设备。
- 测试素材
- 准备多码率、多编码的片段(如 H.264/H.265/AV1,不同分辨率 480p/720p/1080p/4K),覆盖 HDR/SDR、不同色深与帧率(如 24/30/60fps)。
- 基线数据
- 记录空载时的 CPU 空闲率、磁盘 IOPS/吞吐、网络带宽 作为对比基线。
三、执行测试与采集数据
- 系统资源与 Jellyfin 运行态
- 资源监控:在测试窗口内持续采集 CPU、内存、I/O、网络,如:
- iostat -x 1(观察 %util、await、r/s、w/s)
- sar -u/-r/-n DEV 1(历史/实时 CPU、内存、网卡吞吐)
- top/htop 观察 jellyfin/ffmpeg 进程占用
- Jellyfin 服务与日志:
- systemctl status jellyfin、journalctl -u jellyfin.service 查看运行与错误日志
- 通过 API 获取服务器状态:curl http://:8096/api/server/status
- 资源监控:在测试窗口内持续采集 CPU、内存、I/O、网络,如:
- 转码与并发能力
- 工具一:使用 jellybench_py 进行并行 ffmpeg 转码基准测试(会占用大量资源,建议在空闲时段运行)
- 要求:Python ≥ 3.11.2、poetry;克隆仓库后 poetry install 进入虚拟环境运行
- 说明:默认连接 hwa.jellyfin.org 下载测试片段与上传结果(可手动确认不上传),测试可能持续数小时
- 工具二:使用 ab/wrk 模拟多用户并发访问 Web/API,验证并发会话建立、吞吐与响应时延(适合直链/轻转码场景)
- 工具一:使用 jellybench_py 进行并行 ffmpeg 转码基准测试(会占用大量资源,建议在空闲时段运行)
- 网络与播放体验
- 多客户端(Web/Android TV/Kodi/DLNA)播放不同清晰度与协议,记录首帧时间、卡顿次数、码率切换情况
- 若使用 Docker,确保端口映射完整:8096/8920/7359/1900(HTTP/HTTPS/自动发现/DLNA)。
四、结果判读与瓶颈定位
- 资源瓶颈识别
- CPU 持续接近 100%:软解/软件转码为主,考虑启用 QSV/NVENC 或降低并发
- 磁盘 %util ≈ 100% 且 await 高:存储成为瓶颈,考虑 SSD/NVMe、分层存储或降低并发/码率
- 网卡吞吐接近上限:网络带宽不足,考虑更高带宽或CDN/内网加速
- 内存与 swap 异常:检查缓存/转码临时目录是否占用过多内存或触发换页
- 硬件加速有效性
- Intel QSV:vainfo 显示 iHD 正常;Jellyfin 控制台选择 Quick Sync 并开启硬件解码/编码,对比开启前后 CPU 占用与并发路数
- NVIDIA NVENC:容器内可见 /dev/nvidia*,Jellyfin 选择 NVENC,对比 NVENC 会话数/功耗/温度 与稳定性
- 稳定性与错误
- 关注 ffmpeg 报错、超时、花屏、音画不同步,结合 journalctl 与 API 状态定位问题。
五、一键化测试脚本示例
- 说明:以下脚本用于“轻量级并发访问”测试与资源采集,便于快速得到并发能力与系统负载的关联数据;并行转码基准请使用 jellybench_py 单独运行。
- 用法:chmod +x bench_jellyfin.sh & & ./bench_jellyfin.sh < JELLYFIN_URL> < DURATION_SECONDS>
- 脚本内容:
#!/usr/bin/env bash
set -euo pipefail
URL="${
1:-http://127.0.0.1:8096}
"
DURATION="${
2:-60}
"
CONCURRENCY="${
3:-10}
"
LOG_DIR="jellyfin_bench_$(date +%F_%H%M%S)"
mkdir -p "$LOG_DIR"
echo "Starting Jellyfin benchmark for ${
DURATION}
s with concurrency ${
CONCURRENCY}
against ${
URL}
"
echo "Logs in: ${
LOG_DIR}
"
# 1) System baseline
sar -u 1 "$DURATION" >
"${
LOG_DIR}
/sar_cpu.log" &
sar -r 1 "$DURATION" >
"${
LOG_DIR}
/sar_mem.log" &
sar -n DEV 1 "$DURATION" >
"${
LOG_DIR}
/sar_net.log" &
iostat -x 1 "$DURATION" >
"${
LOG_DIR}
/iostat.log" &
# 2) Jellyfin service status snapshot
systemctl status jellyfin.service >
"${
LOG_DIR}
/jellyfin_status.log" 2>
&
1
journalctl -u jellyfin.service -S "$(date -d "1 minute ago" +%Y-%m-%d %H:%M:%S)" -U "$(date +%Y-%m-%d %H:%M:%S)" >
"${
LOG_DIR}
/jellyfin_journal.log"
# 3) API health
curl -s -o "${
LOG_DIR}
/api_status.json" "${
URL}
/api/server/status"
# 4) Concurrent access with ab (HTTP GET on root)
echo "Running ab for ${
DURATION}
s, concurrency ${
CONCURRENCY}
..."
ab -t "$DURATION" -c "$CONCURRENCY" -q "${
URL}
/" >
"${
LOG_DIR}
/ab.log" 2>
&
1
echo "Benchmark finished. Logs saved to ${
LOG_DIR}
"
- 提示:如需测试转码并发能力,请在确保驱动与权限正确的前提下,单独运行 jellybench_py 并观察 CPU/GPU/磁盘/网络 在测试期间的变化。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: jellyfin在centos上如何进行性能测试
本文地址: https://pptw.com/jishu/785628.html
