Suricata 性能问题排查实战指南:从系统负载到规则集的全链路分析
网络安全【免费下载链接】suricataSuricata is a network Intrusion Detection System, Intrusion Prevention System and Network Security Monitoring engine developed by the OISF and the Suricata community.项目地址https://gitcode.com/gh_mirrors/su/suricata点击查看免费下载Suricata 作为一款高性能网络入侵检测/防御IDS/IPS与网络安全监控引擎其性能表现受硬件、流量特征、配置与规则集等多重因素影响。本文以官方《Performance Analysis》文档为核心结合仓库源码与配置文件系统讲解性能问题的排查方法论从系统负载、日志统计、perf 剖析到流量特征与规则集分析帮助你在遇到丢包、CPU 打满或告警减少时能快速定位瓶颈并给出可落地的调优方案。读完后你将掌握一套完整的由外到内的性能诊断流程以及 htop、perf、tshark、ethtool 等工具在 Suricata 场景下的正确用法。排查思路总览从系统到引擎逐层剥离性能问题成因繁多官方文档给出的方法论是分两步走第一部分覆盖基础步骤并介绍实用工具第二部分深入解释原理与边界情况corner cases。整体排查顺序建议为系统负载用 htop 等工具观察 CPU、内存是否有瓶颈日志文件检查 stats.log 与 suricata.log 中的丢包、memcap 等指标Suricata 自身负载用 perf 剖析热点函数流量特征检查双向性、封装、大象流等规则集评估规则对检测与性能的影响。下面按此顺序逐层展开。一、系统负载先看硬件是否吃紧排查的第一步是观察系统整体负载。运行 htop 之类的 top 工具可以获得系统负载概览并判断流量分发是否存在瓶颈。如何从 htop 判断问题少量 CPU 核心长期 100%如果只有少数核心持续打满而其余核心空闲很可能与流量分发不均或**大象流elephant flow**有关。下图展示了典型场景——某个核心因一条大象流而达到 100% 峰值而其他核心相对空闲。所有核心都处于峰值负载说明系统整体处理能力跟不上流量负载或者系统本身配置不当。内存与交换swap时刻关注内存使用情况。如果实际内存占用过高导致系统开始 swap性能会急剧恶化swap 的随机磁盘 IO 远慢于内存访问。系统负载只能给出从哪里开始排查的初步指示更细化的定位需要结合下文的具体手段。二、日志文件stats.log 与 suricata.log 是第一手证据第二步是检查所有日志文件重点关注stats.log与suricata.log寻找明显的异常。capture.kernel_drops最直观的丢包指标最明显的指标是capture.kernel_drops。理想情况下该计数器根本不应出现但可接受的阈值是低于 capture.kernel_packets 的 1%——过高的丢包率会导致事件和告警数量减少部分流量根本没被分析到。从源码看该计数器由各抓包源模块注册并上报例如 src/source-af-packet.c 中通过StatsRegisterCounter(capture.kernel_packets...)与StatsRegisterCounter(capture.kernel_drops...)注册并在 src/source-af-packet.c 等处从内核统计kstats.tp_packets/kstats.tp_drops累加src/source-netmap.c 与 src/source-af-xdp.c 同样注册了这对计数器。这证实了该指标属于内核侧丢包统计而非 Suricata 用户态处理丢包。需要注意的是capture.kernel_packets与capture.kernel_drops的语义随抓包模式不同而不同详见 性能统计文档AF_PACKET 模式kernel_packets是正确送入用户态的包数kernel_drops是内核丢弃、未送入用户态的包数。PF_RING 模式kernel_packets是 pf_ring 看到的总包数kernel_drops是丢弃、未送入用户态的包数。stats.log 的构成与解读stats.log 按固定间隔输出统计记录默认每 8 秒一次——这与仓库默认配置 suricata.yaml.in 中stats.interval: 8完全一致。典型输出格式如下------------------------------------------------------------------- Counter | TM Name | Value ------------------------------------------------------------------- flow.memuse | FlowManagerThread | 6557568 decoder.pkts | RxPcapem21 | 450001754 decoder.bytes | RxPcapem21 | 409520714250 decoder.ipv4 | RxPcapem21 | 449584047 decoder.ipv6 | RxPcapem21 | 9212 tcp.sessions | Detect | 41184 tcp.syn | Detect | 85902 tcp.synack | Detect | 83385 tcp.rst | Detect | 84326 tcp.reassembly_gap | Detect | 789 detect.alert | Detect | 14721排查时的关键观察点SYN 与 SYN-ACK、RST 计数差异巨大如 SYN 远多于 SYN-ACK/RST说明大量流量是单向的见下文流量特征一节。tcp.reassembly_gapTCP 数据间隙计数统计流中缺失的数据包数量。理想值为 0。它不只受丢包影响坏校验和、流引擎内存耗尽memcap也会导致该值增长。memcap 相关字段若 stats 中出现 memcap 相关统计如tcp.ssn_memcap_drop、tcp.segment_memcap_drop、flow.emerg_mode_entered等说明对应模块触发了内存上限保护。此时可以适当提高配置中的 memcap 值但要注意这会增加内存占用修改前务必评估系统内存余量。别忘了系统日志除了 Suricata 自身的日志还应检查系统日志甚至运行一次dmesg也可能暴露潜在问题如驱动报错、OOM、中断异常等。三、Suricata 自身负载用 perf 定位热点函数除系统负载外Suricata 自身的负载是另一个关键指标。perf是定位性能问题的利器使用前请确保perf 已安装Suricata 已安装调试符号debug symbols否则输出将缺乏可读性。实时采样命令sudo perf top -p $(pidof suricata)如何解读 perf 输出如果看到特定函数调用以红色高亮出现在顶部说明这些就是瓶颈。下图是典型输出IPOnlyMatchPacket占据了约 22% 的采样周期FlowGetFlowFromHash、DetectRun、内核态的tpacket_rcv、i40e_napi_poll等紧随其后。以文档中提到的IPOnlyMatchPacket为例它在 src/detect-engine-iponly.c 中实现其核心逻辑是使用 IPv4/IPv6 的 Radix 树SCRadix4TreeFindBestMatch/SCRadix6TreeFindBestMatch对每个包的源/目的地址做仅 IP 匹配查找并在 src/detect.c 的主检测流程中被调用。该函数成为热点可能源于两种场景高丢包率大量只有 IP 层信息、无法建立完整流的包反复进入仅 IP 检测路径不完整流只有单向流量导致流无法建立完整状态包被降级到仅 IP 匹配。两种场景本质上都指向流量不完整因此解决方向应是修复流量问题而非单纯优化该函数。针对特定线程的剖析可以给 perf top 传-t TID线程 ID参数。此外有时热点函数会暗示某个协议解析器被大量使用——此时可以尝试调试该解析器的性能缺陷或者考虑过滤相关流量见下文 BPF 过滤。当向 Suricata 开发团队反馈性能问题时附上 perf 输出非常有用可以帮助他们快速缩小问题范围。整体而言应多尝试 Suricata 提供的各类配置选项重点参考 高性能配置文档。四、流量特征大多数高丢包率的真正根源在硬件足以应付流量但丢包率依然很高的情况下绝大多数问题出在特定流量特征上。文档将其分为基础检查与进阶排查两部分。基础检查检查流量是否双向如果流量基本是单向的说明你丢失了流的关键部分底部有 tshark 检查示例。另一个信号是 Suricata 统计中 SYN 与 SYN-ACK、RST 计数差异巨大。检查封装流量GRE、MPLS 等协议虽然被支持但可能引发性能问题尤其是多层封装叠加时。用 iftop 定位大象流长时间速率超过 1Gbit/s 的流会让某个 CPU 核心持续 100%推高丢包率。而这类流量往往不值得深挖多为大文件传输。使用 BPF 过滤器缩小范围例如用not port 443过滤掉可能有问题的 HTTPS 流量或用port 25只观察你怀疑有问题的 SMTP 流量。详见 忽略流量文档。VLAN 场景如果流只有单方向带有 VLAN 标签可以考虑关闭vlan.use-for-tracking。仓库默认配置 suricata.yaml.in 中该项默认为true其注释明确说明在流两侧未被相同 VLAN 标签标记的损坏的网络环境下可以忽略 VLAN id 参与流哈希以换取正确性/性能。进阶排查与边界情况VLAN QinQIEEE 802.1ad与 cluster_qm 的坑如果使用cluster_qm配合 Intel 驱动和 AF_PACKET 运行模式需要格外小心。虽然标准期望各层分别使用 ethertype 0x8100 与 0x88A8但多数实现只在每一层附加 0x8100。若外层 VLAN 标签相同而内层标签不同在cluster_qm模式下这些包仍会进入同一队列。该问题在 i40e 驱动 2.8.20 及之前版本、固件 7.00 及之前版本中已被观察到——如果你使用的更新版本已修复欢迎向 Suricata 官方支持渠道反馈。用 tshark 检查流量方向sudo tshark -i $INTERFACE -q -z conv,ip -a duration:10输出会显示 10 秒内的所有流。如果某个方向显示 0说明是单向流量例如看不到 ACK 包。由于 Suricata 基于流flow工作这会严重影响可见性应优先修复单向流量问题。如果实在无法解决可以启用stream 配置中的 async-oneside选项——从源码看该选项在 src/stream-tcp.c 中通过SCConfGetBool(stream.async-oneside, ...)读取默认关闭文档 suricata-yaml 配置说明 中解释当网络流量因路由不同而异步到达Suricata 只能看到其中一部分时开启该选项可让 Suricata 正常检查能看到的单向部分而不是被搞混。检查异常或不常见协议某些支持不佳的协议可能是性能问题源头可以尝试过滤后观察性能变化。例如文档给出的示例用 BPF 过滤器not ether proto 0x8903过滤 Cisco Fabric Pathethertype 0x8903因为其被怀疑是性能问题对应跟踪 issue #3637。大象流Elephant Flows的处置大象流/流量尖峰很难处理。大多数情况下它们是大文件传输或备份流量完整解码不现实。从网络安全监控的角度看往往只需记录该流的元数据metadata对流开始阶段做包检测packet inspection而无需检查整个流。如果按上述方法定位到了特定流可尝试过滤最简方案是 BPF 过滤器但它仍然会产生性能开销更优方案是在驱动或网卡层面过滤例如 eBPF/XDP仓库 ebpf/ 目录下有xdp_filter.c、bypass_filter.c等现成实现甚至在流量到达 Suricata 所在系统之前就过滤掉部分商用包交换机packet broker支持此类过滤业内称为Flow Shunting或Flow Slicing。五、规则集检测能力与性能的平衡规则集对检测能力和性能都有重要影响因此评估启用规则的影响同样必要。空规则集基线测试如果性能问题难以定位建议先用无规则模式运行 Suricata再结合第一部分介绍的工具重新分析。需要牢记即使不启用签名Suricata 仍然会做大部分解码和流量分析所以仍会看到相当可观的负载。如果无规则时负载依然很高、仍有丢包而硬件本应能承受当前流量那就应当深入排查是否存在特定流量问题见上文或者向 Suricata 社区报告该性能问题以便调查。使用事件规则定位流量问题Suricata 在 rules/ 目录下提供了若干针对特定流量事件的内置规则可用于测试并定位流量问题。文档推荐优先启用三组decoder-events.rules解码器事件覆盖各协议层解析异常stream-events.rules流引擎事件覆盖 TCP 流重组异常app-layer-events.rules应用层事件覆盖 HTTP、TLS、DNS 等应用协议异常。仓库中还有tls-events.rules、http-events.rules、dns-events.rules等按协议细分的事件规则可进一步深挖。规则级与包级剖析规则剖析rule profiling与包剖析packet profiling能帮助找到有问题的规则或流量模式。启用方式是在编译时加入--enable-profiling注意这会影响性能仅用于故障排查。规则剖析细节详见 规则剖析文档报告默认输出到日志目录下的rule_perf.log也可以只启用规则统计编译时加--enable-profiling-rules并通过 unix socket 转储报告报告字段含义Ticks该规则总消耗的 CPU 时钟周期、%单条签名占全部检查开销的份额、Checks检查次数、Matches匹配次数可能因 suppression/threshold 而未产生告警、Max Ticks单次最昂贵检查、Avg Ticks每次检查平均开销、Avg Match/Avg No Match匹配/未匹配时的平均开销。包剖析详见 包剖析文档用于了解每个包的处理耗时找出为何某些包处理得更快/更慢例如对 pcap 回放./configure --enable-profiling suricata -c /etc/suricata/suricata.yaml -r log.pcap.1304589204配置文件 suricata.yaml.in 中提供了完整的 profiling 设置段包括rules输出到rule_perf.log可用active字段或 unix socket 命令启用limit控制每个排序维度显示条数sort可选ticks/avgticks/checks/matches/maxticks、keywordskeyword_perf.log、prefilterprefilter_perf.log、rulegroupsrule_group_perf.log、packetspacket_stats.log及可选的 CSV 输出等。其中sample-rate允许只对每 N 个包采样一次须为 2 的幂用于降低剖析本身的开销。六、排查工具与命令速查场景工具/命令目的系统负载总览htop观察各核心负载、内存与 swap 使用内核丢包统计stats.log 中的capture.kernel_drops/capture.kernel_packets判断抓包层丢包率应 1%引擎热点函数sudo perf top -p $(pidof suricata)定位 CPU 热点可加-t TID按线程分析流量方向sudo tshark -i $INTERFACE -q -z conv,ip -a duration:10识别单向流量大象流定位iftop发现长时间 1Gbit/s 的流流量过滤suricata -i eth0 -v not host 1.2.3.4BPF 捕获过滤减少处理负载网卡/内核丢包ethtool -S iface查看 NIC 侧统计rx_missed_errors 等关于 BPF 捕获过滤补充几个要点详见 忽略流量文档捕获过滤器通过 pcap、af-packet、netmap、pf_ring 生效可写在命令行末尾suricata -i eno1 -c suricata.yaml tcp or udp也可写入文件后用-F加载echo not host 1.2.3.4 capture-filter.bpf还可在各抓包模块的配置段中按接口设置被过滤掉的流量不会被检测、记录或输出在 IPS 模式af-packet / netmap下BPF 还会影响转发行为未被捕获的包也不会被转发到对端网卡等效于直接丢弃。与之对比pass 规则规则动作使用pass而非alert/drop只跳过检测而仍会生成 EVE 等日志suppress 规则只能抑制告警且效率不高因为抑制判断发生在规则匹配之后。七、总结与延伸阅读完整的性能排查应按系统负载 → 日志统计 → 引擎热点 → 流量特征 → 规则集的链路逐层推进。高丢包率capture.kernel_drops 1%往往不是引擎本身的问题而是流量不完整、封装过深、大象流或规则集过重所致。若硬件足够而问题依旧请优先怀疑流量侧并使用--enable-profiling构建的剖析数据rule_perf.log / packet_stats.log辅助定位最后再将完整的 perf 输出与统计资料提交给开发团队。本文涉及的相关文档与源码均可在本仓库继续深入研读高性能配置NIC/ethtool/CPU affinity性能统计与丢包检测忽略/过滤流量与 bypass规则剖析 与 包剖析调优考量ring-size/block-size 等源码参考仅 IP 匹配实现、AF_PACKET 抓包与内核丢包统计、流引擎 async-oneside 解析配置参考suricata.yaml.in 中的 stats / vlan / profiling 段赞分享网络安全【免费下载链接】suricataSuricata is a network Intrusion Detection System, Intrusion Prevention System and Network Security Monitoring engine developed by the OISF and the Suricata community.项目地址https://gitcode.com/gh_mirrors/su/suricata点击查看免费下载相关推荐对话系统全链路监控从日志分析到性能优化实战指南对话系统全链路监控从日志分析到性能优化实战指南 FastChat 是一个开源的大型语言模型训练、服务和评估平台提供了全面的对话系统监控解决方案帮助开发者实人工智能大模型模型推理服务模型评测微调本地部署从CRD到监控指标Prometheus Operator全链路问题排查指南从CRD到监控指标Prometheus Operator全链路问题排查指南 Prometheus Operator作为Kubernetes环境下监控系统的核心云原生可观测性CANN PTO-ISA 错误码排查实战指南从编译、链接到运行时与性能的全链路排错手册CANN PTO ISA 错误码排查实战指南从编译、链接到运行时与性能的全链路排错手册 PTOParallel Tile Operation是昇腾 CAN算子库人工智能CANN上一篇优化Hermes Agent的存储IO性能SSD缓存与RAID配置全指南下一篇PyOneDark打造现代化深色Qt GUI界面的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MCU晶振电路设计:无源晶振匹配电容计算与PCB布局实战

MCU晶振电路设计:无源晶振匹配电容计算与PCB布局实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 2:03:21 阅读更多 →
NetAlertX 开发容器(Devcontainer)完整指南:从零搭建到源码级维护

NetAlertX 开发容器(Devcontainer)完整指南:从零搭建到源码级维护

后端网络运维数据可视化 【免费下载链接】NetAlertX Centralized network visibility and continuous asset discovery. Monitor devices, detect change, and stay aware across distributed networks. 项目地址: https://gitcode.com/gh_mirrors/ne/NetAlertX 点击…

2026/10/9 2:03:21 阅读更多 →
低功耗高压电机控制参考设计:辅助电源、栅极驱动与MCU低功耗实战

低功耗高压电机控制参考设计:辅助电源、栅极驱动与MCU低功耗实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 2:02:21 阅读更多 →

最新新闻

4G显存也能流畅跑大模型:llama.cpp与GGUF量化实战指南

4G显存也能流畅跑大模型:llama.cpp与GGUF量化实战指南

如果你的电脑还在用 4GB 显存的显卡,比如 GTX 1650、RTX 3050 Laptop 或者 AMD 那边的 RX 6500 XT,想跑本地大模型,第一反应可能是到处找精简版、量化版,或者干脆放弃转用云 API。但今天我直接说结论:4G 显存完全能跑&…

2026/10/9 4:03:31 阅读更多 →
JavaScript作业避坑指南:函数、精度、Canvas与OC交互全解析

JavaScript作业避坑指南:函数、精度、Canvas与OC交互全解析

又到交JavaScript作业的季节了。我这些年帮学弟学妹和网上的朋友看过少说几百份作业代码,最深的感受是:大部分人不是不会写,而是压根没搞清楚题目到底想考什么。这篇东西是冲着"JavaScript作业"这几个字来的——不管你是卡在函数定…

2026/10/9 4:03:31 阅读更多 →
Django+Flask搭建机器人工厂管理系统:设备数据采集与生产管理实践

Django+Flask搭建机器人工厂管理系统:设备数据采集与生产管理实践

1. 项目背景与整体设计思路接这个项目之前,客户那边的生产车间里已经有十六台焊接机器人和四台搬运机器人,专门做汽车挡泥板的生产。挡泥板这东西听着不起眼,却是汽车底盘防护的关键件,产线上的机器人每天三班倒,大概要…

2026/10/9 4:03:31 阅读更多 →
字符编码与交叉变量初始化:线上乱码的原理与排查实战

字符编码与交叉变量初始化:线上乱码的原理与排查实战

1. 交叉变量初始化到底在解决什么问题前两天帮一个同事排查线上服务偶尔中文乱码的问题,代码跑了三四年没动过,部署方式也没变,结果新环境一上线,日志里的中文标题全部变成了一堆问号和乱码。查到最后,问题不是出在业务…

2026/10/9 4:03:31 阅读更多 →
Agent-Reach:面向业务意图的AI代理调度中枢

Agent-Reach:面向业务意图的AI代理调度中枢

1. 项目概述:Agent-Reach 是什么,它解决的不是“调用API”这个动作,而是“让AI代理真正抵达业务现场”的最后一公里问题Agent-Reach 这个名字乍看像某个新出的大模型工具或CLI套件,但如果你翻过最近三个月 Reddit 上 r/LocalLLMs、…

2026/10/9 4:03:31 阅读更多 →
Agent-Reach 深度解析:Python 构建 CLI 型 AI Agent 的工具调用与避坑指南

Agent-Reach 深度解析:Python 构建 CLI 型 AI Agent 的工具调用与避坑指南

1. 从"Agent-Reach"这个名字说起:它到底想解决什么问题第一次看到"Agent-Reach"这个项目名,我的直觉是:这大概率是一个围绕 AI Agent 能力边界扩展的工具,而不是又一个"套壳聊天机器人"。原因很简单…

2026/10/9 4:02:30 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →