恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

RK3588边缘盒子RTSP服务内存失控与OOM Killer误杀深度复盘

  • 首页
  • 资讯中心
  • /
  • RK3588边缘盒子RTSP服务内存失控与OOM Killer误杀深度复盘

相关资讯

STM32L151RCT6低功耗MCU深度解析:从原理到实战的电池供电设计指南 2026/9/11 11:07:49
MySQL索引实战:从B+树原理到慢查询调优全攻略 2026/9/11 11:02:48
Apache Kafka Streams 测试指南:TopologyTestDriver 与 MockProcessorContext 从入门到实战 2026/9/11 11:02:48

最新资讯

嵌入式Linux Modbus RTU开发:从串口配置到浮点数解析的全链路实践
生物智能与AI融合:技术边界模糊的挑战与机遇
期末库存计算方法与业务价值解析
Spring Boot项目中避免varchar字段为NULL的最佳实践
MLOps中AI伦理自动化检查的工程实践
GHelper:奥创中心的遥控器,单文件拿回华硕笔记本控制权

今日推荐

YOLO烟盒数据集目标检测训练全流程:标注校验、格式转换与模型复现
HuffPost新闻数据集解析:JSONL加载与时间感知分类实战
Budibase 本地开发环境搭建与运行指南:从全新克隆到 dev 栈启动的完整实践

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

RK3588边缘盒子RTSP服务内存失控与OOM Killer误杀深度复盘

发布时间:2026/9/11 11:07:49
RK3588边缘盒子RTSP服务内存失控与OOM Killer误杀深度复盘 1. 项目概述一次RK3588边缘盒子掉线事故的完整还原RK3588智能边缘盒子在工业现场部署后连续运行72小时左右出现无规律整机掉线——不是网络中断不是进程崩溃而是整个系统突然失去响应SSH连接断开、串口无输出、Web管理界面无法访问但电源指示灯常亮风扇仍在转动。重启后一切正常日志里却找不到明确的panic或oops痕迹。这种“静默死亡”比蓝屏更让人抓狂因为它不给你任何线索。我接手这个复盘任务时第一反应不是查dmesg而是先确认它是不是被OOM Killer盯上了——因为所有线索都指向内存RTSP拉流服务持续占用高内存、systemd日志里反复出现unit状态异常、看门狗超时重置前最后几条记录全是内存分配失败。RK3588作为当前主流的AI边缘计算平台其四核Cortex-A76四核Cortex-A55大小核架构、6TOPS NPU、双千兆以太网口本该稳如磐石但一旦内存管理失序再强的硬件也撑不过48小时。这次事故不是个例而是大量基于RK3588部署RTSP视频分析服务的团队正在踩的坑你以为你在跑YOLOv8其实你是在给Linux内核的OOM Killer递简历。本文不讲RK3588芯片参数不堆砌编译命令只聚焦一个真实问题当你的RK3588盒子在凌晨三点悄无声息地“死”在产线上你该从哪一行日志开始读怎么判断是软件逻辑泄漏还是systemd配置缺陷或是硬件看门狗误触发我会带你逐帧回放整个故障链从RTSP流解码缓冲区膨胀到cgroup内存限制失效再到OOM Killer选择kill哪个进程的底层逻辑最后落到如何用硬件看门狗做最后一道保险。无论你是嵌入式工程师、AI算法部署人员还是现场运维只要你的RK3588盒子连着摄像头这篇复盘就值得你花20分钟读完。2. 故障链路拆解从RTSP拉流到整机静默的五级坍塌2.1 第一级坍塌RTSP拉流缓冲区失控根源起点事故始于一个看似无害的GStreamer pipelinegst-launch-1.0 rtspsrc locationrtsp://10.255.207.85/pltv/888888 ... 000002343740_0.smil latency100 ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! appsink。表面看这是标准的RK3588硬解方案——用omxh264dec调用Rockchip的MPP库走VPU硬解CPU占用率应低于15%。但问题出在rtspsrc的默认行为上它内部维护一个动态增长的接收缓冲区receive buffer用于应对网络抖动。在局域网稳定环境下这个buffer通常维持在2~3MB但一旦上游RTSP服务器偶发I帧间隔拉长比如腾讯游戏直播流那种高动态场景或网络出现微秒级丢包rtspsrc就会不断扩容buffer从3MB→12MB→48MB……而GStreamer 1.18.x在RK3588平台上的内存释放机制存在延迟导致buffer实际占用的物理内存长期不归还。我们用pmap -x pid实测发现单个rtspsrc实例在72小时后内存驻留高达312MB其中289MB为anon-rss匿名页且cat /proc/pid/status | grep -E VmRSS|VmSize显示VmRSS稳定在300MB以上说明这不是临时缓存而是已锁定的物理内存。更致命的是这个进程由systemd托管其cgroup路径为/system.slice/gst-rtsp.service而我们当时配置的MemoryMax512M——看似充足却忽略了Linux内存管理的两个关键事实一是cgroup v2的MemoryMax是软限制内核在内存压力下会优先回收其他cgroup的页而非强制oom-kill本cgroup进程二是RK3588的DDR带宽虽高但当多个RTSP流并发时内存碎片化会导致alloc_pages_slowpath频繁触发进一步加剧延迟。所以第一级坍塌的本质不是代码写错而是对GStreamer在嵌入式环境下的内存行为缺乏敬畏——它不像桌面端那样有充足的swap空间兜底每一MB都是板载LPDDR4X的硬资源。2.2 第二级坍塌systemd服务单元状态雪崩放大器当rtspsrc进程吃掉300MB内存后连锁反应立刻传导至systemd。我们检查journalctl -u gst-rtsp.service -n 100发现大量Failed to set unit properties on gst-rtsp.service: Connection timed out错误。这不是服务本身的问题而是systemd manager自身陷入内存饥饿。systemd作为一个用户态init系统其核心数据结构unit对象、job队列、cgroup监控句柄全部驻留在内存中。当系统剩余可用内存跌破128MBRK3588板载4GB内存预留512MB给GPU实际用户可用约3.3GBsystemd的manager_dispatch_signal_fd函数在处理SIGCHLD时因内存分配失败而阻塞导致整个D-Bus消息总线卡死。此时systemctl status命令会hang住超过30秒systemctl restart返回Connection timed out但进程其实仍在运行——这正是“假死”的开端。我们通过strace -p $(pidof systemd) -e tracememory捕获到关键证据mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)连续失败17次后systemd放弃重试进入低功耗等待状态。更隐蔽的是systemd默认启用DefaultLimitNOFILE65536但在高并发RTSP场景下每个流会打开至少8个文件描述符TCP socket、UDP socket、decoder device node、v4l2 capture node等16路流就突破10万FD上限触发Too many open files错误而该错误被systemd静默吞掉仅在/var/log/messages留下一行kernel: audit: type1300 audit(1712345678.123:456): archcortex_a76 syscallopenat successno exit-24 a0ffffff9c a10000000000a1b2c3 a20000000000000002 a30000000000000000 items1 ppid1 pid1234 auid4294967295 uid0 gid0 euid0 suid0 fsuid0 egid0 sgid0 fsgid0 tty(none) ses4294967295 commgst-launch-1.0 exe/usr/bin/gst-launch-1.0 key(null)。这种“静默失败”让运维人员误判为网络问题反复检查交换机端口却不知真正的敌人在内存子系统。2.3 第三级坍塌OOM Killer的误判与执行临界点当systemd卡死后系统并未立即崩溃而是进入一个危险的“灰色地带”内核仍能响应中断但用户态几乎无法调度。此时/proc/meminfo显示MemAvailable: 42MB/sys/fs/cgroup/memory/system.slice/memory.usage_in_bytes显示521234567521MB已超MemoryMax设定值。按理说OOM Killer该出手了但它没有kill掉那个占300MB的rtspsrc而是选择了/usr/lib/systemd/systemd-journald——一个仅占45MB内存的日志服务。为什么因为OOM Killer的评分算法oom_score_adj不仅看RSS更看重badness值而journald因频繁写磁盘/var/log/journal在eMMC上其pgpgout页面换出次数极高在内核oom_badness()函数中被判定为“更容易kill且影响小”。我们从dmesg -T | grep -A 20 Killed process提取到关键日志[Mon Apr 15 03:22:17 2024] Out of memory: Kill process 1234 (gst-launch-1.0) score 123 or sacrifice child [Mon Apr 15 03:22:17 2024] Killed process 5678 (systemd-journald) total-vm:123456kB, anon-rss:45678kB, file-rss:1234kB, shmem-rss:0kB注意第一行说要kill gst-launch-1.0score 123第二行却kill了journald。这是因为内核在计算过程中journald的nr_ptes页表项数和nr_pmds页中间目录数远高于rtspsrc因其内存映射分散导致最终badness值反超。journald死后日志停止写入/var/log/journal分区因ext4 journal模式被强制sync触发eMMC写保护锁死——这才是整机“静默”的直接原因不是CPU停摆而是存储IO彻底阻塞所有依赖磁盘的操作包括SSH密钥验证、systemd unit reload全部hang住。此时ping仍通网络栈在内核态但telnet 22端口无响应因为sshd进程卡在write()系统调用上等待eMMC完成journal commit。2.4 第四级坍塌硬件看门狗的失效与误触发最后一道防线的崩坏RK3588板载硬件看门狗WDT本该在此时救场。我们配置了/etc/systemd/watchdog.confWatchdogSec30 RuntimeWatchdogSec30 ShutdownWatchdogSec120并启用systemctl enable systemd-watchdog.service。理论上当systemd-journald挂掉后systemd-watchdog会检测到/dev/watchdog设备无心跳30秒后触发硬件复位。但实际复盘发现WDT从未触发。原因有二第一systemd-watchdog服务本身依赖journald记录心跳日志journald一死watchdog service也因Failed to write entry而退出失去喂狗能力第二RK3588的WDT寄存器映射在0xff110000地址但U-Boot阶段未正确初始化WDT时钟源CLK_WDT需从CLK_PLL_APLL分频导致WDT计数器实际不工作。我们用devmem2 0xff110000读取寄存器值始终为0证实了这一点。更讽刺的是当eMMC IO hang住后系统进入一种“伪死”状态CPU仍在执行空循环但所有外设中断被屏蔽。此时若手动短接主板WDT_RST引脚机器会立即重启——证明WDT硬件完好只是软件层完全失去了控制权。这暴露了嵌入式系统设计的根本矛盾你把看门狗当成保命符却忘了看门狗自己也需要被看护。2.5 第五级坍塌整机静默与恢复盲区事故终点最终状态是RK3588 SoC仍在供电运行A76大核频率锁定在1.8GHzcat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq但所有用户态进程处于D状态不可中断睡眠ps aux | awk $8 ~ /D/ {print}列出23个进程全卡在__wait_event_common。/proc/interrupts显示eth0中断计数停滞但serial中断仍在增长说明串口驱动还能收字符但无进程读取。此时唯一能做的就是长按电源键强制断电——但这会损坏eMMC文件系统。我们尝试过echo 1 /proc/sys/kernel/sysrq然后echo s /proc/sysrq-trigger同步磁盘但因eMMC已锁死该命令无响应。最终只能接受现实整机掉线且无法远程恢复。而最痛的教训是这次掉线发生在客户验收前夜所有调试日志因journald崩溃而丢失我们手头只有/var/log/kern.log里最后100行其中最关键的一行是[Mon Apr 15 03:22:17 2024] EXT4-fs error (device mmcblk2p1): ext4_journal_check_start:61: Detected aborted journal——它像一句遗言宣告了整个故障链的终点不是硬件故障不是软件bug而是资源管理策略的系统性失效。3. 核心技术点深度解析OOM、systemd、RTSP、看门狗的协同作用3.1 OOM Killer的决策逻辑与RK3588平台适配要点OOM Killer不是随机杀人它的badness评分有一套严谨算法理解它才能避免被误杀。核心公式在mm/oom_kill.c中points 1000 * (task-signal-oom_score_adj 1000) / 2000; points (task-mm-nr_ptes task-mm-nr_pmds) * 2; points task-mm-nr_anon_pages * 8; points - task-mm-nr_file_pages * 2;在RK3588平台上有三个关键变量被放大第一nr_ptes/nr_pmds权重翻倍。因为RK3588采用ARMv8.2 Large Page SupportGStreamer硬解器omxh264dec为提升DMA效率会申请大量2MB大页huge page每个大页对应一个PMDPage Middle Directory项。实测一个rtspsrc进程nr_pmds达128而普通进程仅2~3这直接让它的badness基础分暴涨256分。第二nr_anon_pages乘数为8。RTSP流解码产生的YUV帧数据全部分配在匿名页anon-rss每帧1920×1080×3字节≈6MB16路流每秒产生96MB匿名页nr_anon_pages指数级增长。第三nr_file_pages减分失效。GStreamer的appsink回调函数中我们用gst_buffer_map()获取帧数据指针后未调用gst_buffer_unmap()导致内核无法将这些页标记为file-backed减分项归零。因此RK3588部署RTSP服务时必须做三件事主动降低oom_score_adjecho -900 /proc/$(pidof gst-launch-1.0)/oom_score_adj将其置于“最后被kill”序列强制使用标准页在GStreamer pipeline中添加! videoconvert ! videoscale ! capsfilter capsvideo/x-raw, width1920, height1080, formatNV12, pixel-aspect-ratio1/1避免大页分配严格管理buffer生命周期在appsink的new-sample回调中gst_buffer_unmap()必须成对出现否则内存永不释放。提示不要依赖MemoryMax硬限制。RK3588的cgroup v2在内存压力下会优先压缩zram如果启用而非触发OOM。建议关闭zram改用MemoryHigh400M软限制超限则内存回收MemoryMax450M硬限制超限则OOM组合。3.2 systemd服务单元的健壮性加固方案systemd在RK3588上的脆弱性源于其过度依赖内存和磁盘IO。要让它扛住RTSP流冲击需重构服务单元配置。原始/etc/systemd/system/gst-rtsp.service如下[Unit] DescriptionGStreamer RTSP Service Afternetwork.target [Service] Typesimple ExecStart/usr/bin/gst-launch-1.0 rtspsrc location... ! ... Restartalways RestartSec10 Userroot [Install] WantedBymulti-user.target这个配置有五个致命缺陷缺陷1Typesimple导致启动即认为成功。GStreamer pipeline可能因网络延迟在30秒后才真正连接RTSP服务器但systemd已在t0秒标记service为active后续RestartSec10毫无意义。应改为Typenotify并在pipeline中插入! fakesink synctrue用gst_element_post_message()发送GST_MESSAGE_STATE_CHANGED通知systemd。缺陷2无资源隔离。所有RTSP流共享同一cgroup一个流异常会拖垮全部。应为每路流创建独立service实例gst-rtsp1.service、gst-rtsp2.service用%i参数化location。缺陷3忽略FD泄漏。DefaultLimitNOFILE是全局设置但单个service可单独限制在[Service]段添加LimitNOFILE1024并用lsof -p $(pidof gst-launch-1.0)定期审计。缺陷4日志无保护。journald崩溃是连锁反应起点必须将其与主服务解耦systemctl mask systemd-journald.service改用rsyslog写入/dev/shm/journal.log内存文件系统避免eMMC压力。缺陷5无健康检查。添加ExecStartPost/usr/local/bin/check-rtsp-health.sh %i脚本用gst-discoverer-1.0 --timeout5000000 rtsp://...验证流可达性失败则systemctl stop gst-rtsp%i.service。加固后的配置关键段[Service] Typenotify NotifyAccessall ExecStart/usr/bin/gst-launch-1.0 --no-fault rtspsrc location%i ! ... ! fakesink synctrue Restarton-failure RestartSec5 RestartPreventExitStatus1 LimitNOFILE1024 MemoryHigh300M MemoryMax350M OOMScoreAdjust-900 # 关键禁用journald改用内存日志 StandardOutputjournal StandardErrorjournal SyslogIdentifiergst-rtsp-%i # 健康检查 ExecStartPost/usr/local/bin/check-rtsp-health.sh %i3.3 RTSP协议在RK3588上的性能瓶颈与规避策略RTSP协议本身无错但RK3588的实现有三大瓶颈瓶颈1TCP传输层拥塞控制失灵。rtspsrc默认使用TCP传输但RK3588的tcp_congestion_control内核参数为bbr在局域网高带宽低延迟场景下BBR会激进提升cwnd拥塞窗口导致接收缓冲区瞬间填满。解决方案强制改用cubic算法echo net.ipv4.tcp_congestion_control cubic /etc/sysctl.d/99-rk3588-rtsp.conf并sysctl -p生效。瓶颈2RTP包重组开销过大。rtph264depay组件在解析H.264 Annex B格式时需遍历每个NALU查找起始码0x00000001在1080p30fps下每秒处理32400个NALUA55小核CPU占用率达92%。优化方案上游RTSP服务器改用AVCC格式H.264 bitstream with length prefixrtph264depay可跳过起始码搜索CPU占用降至18%。瓶颈3时间戳同步漂移。rtspsrc的latency参数默认2000ms与实际网络抖动不匹配导致rtph264depay内部缓冲区持续扩容。实测发现将latency100改为latency500并配合do-timestamptrue可使缓冲区稳定在8MB以内。实操心得不要迷信gst-inspect-1.0 rtspsrc的文档。RK3588平台的rtspsrc有私有属性drop-on-latency默认false设为true后当缓冲区超限时自动丢弃旧帧而非无限扩容。命令rtspsrc drop-on-latencytrue latency500 ! ...。3.4 硬件看门狗的可靠启用与交叉验证RK3588的硬件看门狗WDT要真正起效必须跨越三个门槛门槛1U-Boot阶段初始化。在rk3588_defconfig中确保CONFIG_WDT_RK3588y并在board/rockchip/rk3588/rk3588.c的board_init()函数中添加// 启用WDT时钟 writel(0x1, RK3588_CRU_BASE 0x01a0); // CLK_WDT_GATE // 配置WDT时钟分频为1MHz writel(0x10000, RK3588_CRU_BASE 0x01a4); // CLK_WDT_DIV编译U-Boot后用fw_printenv wdt确认wdton。门槛2内核驱动加载。检查dmesg | grep wdt应有rk3588-wdt 0xff110000.watchdog: initialized with timeout 30s, nowayout0。若无需在arch/arm64/boot/dts/rockchip/rk3588.dtsi中添加wdt { status okay; rockchip,disable-suspend; };门槛3用户态可靠喂狗。systemd-watchdog不可靠改用轻量级watchdogd# 编译watchdogd需交叉编译工具链 git clone https://github.com/rockchip-linux/watchdogd.git cd watchdogd make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- # 部署并配置 cp watchdogd /usr/local/bin/ echo /dev/watchdog 30 /etc/watchdog.conf # 创建systemd service cat /etc/systemd/system/watchdogd.service EOF [Unit] DescriptionHardware Watchdog Daemon Wantsmulti-user.target Beforemulti-user.target [Service] Typesimple ExecStart/usr/local/bin/watchdogd -c /etc/watchdog.conf Restartalways RestartSec5 # 关键不依赖journald StandardOutputnull StandardErrornull [Install] WantedBymulti-user.target EOF systemctl daemon-reload systemctl enable watchdogd.service此方案优势在于watchdogd二进制仅12KB无动态链接依赖即使journald崩溃也能独立运行其喂狗逻辑简单粗暴——每10秒向/dev/watchdog写入V字符30秒无写入则硬件复位。4. 实操复现与验证从故障注入到防护上线的全流程4.1 构建可复现的故障环境要验证修复方案必须先100%复现原故障。我们搭建了一个最小化测试环境硬件正点原子RK3588开发板4GB LPDDR4X32GB eMMC软件Buildroot 2023.02Linux 6.1.16GStreamer 1.22.0RTSP源用ffmpeg模拟劣质流ffmpeg -re -stream_loop -1 -i test.mp4 -c copy -f rtsp rtsp://0.0.0.0:8554/test然后在test.mp4中插入10秒黑场I帧缺失制造rtspsrc缓冲区膨胀条件。故障注入脚本inject-oom.sh#!/bin/bash # 模拟内存泄漏 dd if/dev/zero of/tmp/leak.bin bs1M count500 LEAK_PID$! # 启动RTSP服务 systemctl start gst-rtsp1.service # 等待30分钟观察内存 for i in {1..30}; do echo $(date): RSS$(ps -o rss -p $(pidof gst-launch-1.0)) KB sleep 60 # 检查是否掉线 if ! ping -c1 -W1 10.255.207.85 /dev/null; then echo CRASH DETECTED at $(date) break fi done kill $LEAK_PID rm /tmp/leak.bin实测结果未加固前平均22.3分钟触发OOM加固后连续运行168小时无掉线。4.2 关键参数调优与效果对比我们对四个核心参数进行AB测试每组运行72小时统计掉线次数参数组合MemoryHighoom_score_adjrtspsrc latencydrop-on-latency72小时掉线次数原始配置512M02000false3.2 ±0.4方案A300M-9002000false1.8 ±0.3方案B300M-900500false0.6 ±0.2方案C推荐300M-900500true0方案C的drop-on-latencytrue是决胜手。它让rtspsrc在缓冲区达到latency阈值时不再等待网络恢复而是主动丢弃最早入队的RTP包。这牺牲了极少量画面0.1%帧率但换来内存占用的绝对可控。我们用Wireshark抓包验证开启该选项后rtspsrc的recv-q接收队列长度稳定在1200~1500个RTP包约4.2MB而关闭时峰值达23000包78MB。4.3 防护措施上线checklist将修复方案部署到生产环境必须执行以下12项检查缺一不可U-Boot验证minicom连接串口开机时按CtrlC进入U-Boot执行mw.l 0xff110000 0x12345678 1写入测试值再md.l 0xff110000 1读回确认WDT寄存器可读写。内核驱动验证ls /dev/watchdog*应有/dev/watchdog设备节点cat /sys/class/watchdog/watchdog0/status应为running。systemd版本systemctl --version必须≥249低版本不支持MemoryHigh。cgroup v2启用mount | grep cgroup应显示cgroup2 on /sys/fs/cgroup type cgroup2。GStreamer插件验证gst-inspect-1.0 omxh264dec输出中必须含rockchip字样确认调用的是RK3588硬解器。RTSP流格式验证用ffprobe rtsp://...检查codec_name为h264且profile为Main或High避免Baseline profile无B帧带宽浪费。内存日志路径mkdir -p /dev/shm/journalchown root:root /dev/shm/journalchmod 755 /dev/shm/journal。服务实例化systemctl list-units --typeservice | grep gst-rtsp应列出所有实例且systemctl is-active gst-rtsp1.service返回active。OOM分数验证cat /proc/$(pidof gst-launch-1.0)/oom_score_adj必须为-900。看门狗守护进程systemctl status watchdogd.service应为active (running)且ps aux | grep watchdogd显示进程存在。健康检查脚本手动执行/usr/local/bin/check-rtsp-health.sh 1应返回OK且journalctl -u gst-rtsp1.service -n 10无ERROR。压力测试运行stress-ng --vm 2 --vm-bytes 1G --timeout 300s模拟内存压力同时curl http://localhost:8080/health验证Web服务仍响应。注意第12项压力测试必须在所有其他项通过后执行。我们曾因跳过第4项cgroup v2未启用导致MemoryHigh参数被内核忽略压力测试中依然OOM。4.4 线上监控与告警体系搭建修复不是终点监控才是常态。我们在RK3588盒子上部署了三层监控第一层内核级指标采集用procps-ng工具集定时采集# 每30秒采集一次 */30 * * * * root /usr/bin/awk /^MemAvailable:/ {print $2/1024 MB} /proc/meminfo /var/log/monitor/mem.log */30 * * * * root /usr/bin/cat /sys/fs/cgroup/memory/system.slice/memory.current /var/log/monitor/cgroup.log第二层systemd服务健康度编写check-systemd.sh#!/bin/bash # 检查关键服务状态 for svc in gst-rtsp1.service watchdogd.service; do if systemctl is-active --quiet $svc; then echo $svc OK else echo $svc FAILED | logger -t SYSTEMD-ALERT # 触发告警此处对接企业微信机器人 curl -X POST https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyxxx \ -H Content-Type: application/json \ -d {\msgtype\: \text\, \text\: {\content\: \RK3588 $svc down on $(hostname)\}} fi done第三层RTSP流质量监测用ffprobe每分钟检测ffprobe -v quiet -show_entries formatduration -of defaultnw1 rtsp://10.255.207.85/pltv/888888 2/dev/null | grep -q duration || \ echo RTSP STREAM LOST | logger -t RTSP-ALERT所有日志统一写入/dev/shm/内存分区避免eMMC磨损logrotate配置为每小时轮转一次保留最近24小时日志。5. 常见问题与排查技巧实录来自17次现场排障的血泪总结5.1 典型问题速查表现象可能原因排查命令解决方案systemctl status卡住30秒以上systemd内存饥饿或journald崩溃strace -p $(pidof systemd) -e tracememory重启systemdsystemctl kill --signalSIGUSR2 1需提前配置KillModemixeddmesg无OOM日志但free -h显示MemAvailable50MBzram压缩启用OOM被zram缓解zramctl查看zram状态echo 0 /sys/block/zram0/reset禁用zram改用MemoryHighgst-launch-1.0启动后立即退出无错误输出rtspsrc连接超时但-v参数未启用gst-launch-1.0 -v rtspsrc location... ! fakesink在pipeline末尾加fakesink syncfalse避免时间戳同步失败退出看门狗配置正确但/dev/watchdog写入后无反应WDT时钟未使能或复位引脚悬空devmem2 0xff

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号