温馨提示×

jellyfin在centos上如何进行性能测试

小樊
48
2026-01-04 02:38:26
栏目: 智能运维

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-drivernvidia-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
  • 转码与并发能力
    • 工具一:使用 jellybench_py 进行并行 ffmpeg 转码基准测试(会占用大量资源,建议在空闲时段运行)
      • 要求:Python ≥ 3.11.2poetry;克隆仓库后 poetry install 进入虚拟环境运行
      • 说明:默认连接 hwa.jellyfin.org 下载测试片段与上传结果(可手动确认不上传),测试可能持续数小时
    • 工具二:使用 ab/wrk 模拟多用户并发访问 Web/API,验证并发会话建立、吞吐与响应时延(适合直链/轻转码场景)
  • 网络与播放体验
    • 多客户端(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 报错、超时、花屏、音画不同步,结合 journalctlAPI 状态定位问题。

五、一键化测试脚本示例

  • 说明:以下脚本用于“轻量级并发访问”测试与资源采集,便于快速得到并发能力与系统负载的关联数据;并行转码基准请使用 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/磁盘/网络 在测试期间的变化。

0