硬件资源监控:CPU、内存、磁盘I/O、网络带宽的监控工具与指标解读

做量化交易系统,说白了就是跟硬件资源赛跑。我见过太多团队,代码写得花里胡哨,结果一上生产环境,CPU直接飙到100%,订单都发不出去。嗯,今天我们就来聊聊硬件监控这件事。

我个人习惯把硬件资源监控分成四大块:CPU、内存、磁盘I/O、网络带宽。每一块都有它的脾气,你得摸透了才行。

CPU监控:别被平均负载骗了

CPU是交易系统的心脏。你想想看,行情数据进来,策略计算,订单生成,哪一步离得开CPU?

常用的监控工具,我推荐 tophtopmpstat。别小看这些命令行工具,它们能告诉你很多信息。

核心指标解读:

  • %user:用户态CPU使用率。策略计算主要耗在这里。
  • %sys:内核态CPU使用率。系统调用、中断处理。
  • %iowait:CPU等待I/O完成的时间。这个值高了,说明磁盘或网络在拖后腿。
  • %steal:虚拟化环境下的“偷走”的CPU时间。云服务器上常见。

我曾经遇到过一个案例:某套CTA策略,回测时跑得飞快,实盘却卡得要命。一查 top,发现 %iowait 高达30%。后来发现是日志写得太频繁,磁盘扛不住了。把日志级别调低,问题就解决了。

我的小技巧: 别只看CPU使用率,要看负载均衡。用 mpstat -P ALL 1 观察每个核心的使用情况。如果某个核心跑满,其他核心空闲,说明你的代码有锁竞争或者线程绑定问题。

内存监控:小心“看不见”的消耗

内存这东西,看着够用,其实很容易出问题。交易系统里,行情数据、订单簿、历史数据,哪个不是吃内存的大户?

工具方面,free -mvmstat/proc/meminfo 是标配。更细粒度的,可以用 smem 看进程级别的内存占用。

指标 含义 警戒线
total 物理内存总量 -
used 已使用的内存 超过80%需关注
buff/cache 缓存和缓冲区 过高可能影响其他进程
available 实际可用内存 低于20%需告警

这里有个坑:free 命令显示的 used 包含了 buff/cache。很多人一看 used 很高就慌了,其实 available 才是真正可用的内存。我刚开始做交易系统时也犯过这个错,差点把运维同事给忽悠了。

避坑指南: 我曾经遇到一个内存泄漏的问题。行情网关每接收一条数据,就new一个对象,但忘记释放了。用 valgrind 一查,内存像瀑布一样往下掉。后来改成对象池,内存就稳了。记住,交易系统里,对象池是你的好朋友。

磁盘I/O监控:延迟的隐形杀手

磁盘I/O是交易系统里最容易忽略的瓶颈。你以为写个日志没什么,但高频交易场景下,磁盘I/O延迟可能直接导致订单超时。

工具推荐:iostatiotopdstat。重点关注这几个指标:

  • r/s, w/s:每秒读写请求数。太高说明磁盘压力大。
  • rkB/s, wkB/s:每秒读写数据量。看吞吐量。
  • await:平均I/O等待时间(毫秒)。这个最关键,超过10ms就要警惕了。
  • %util:磁盘利用率。接近100%说明磁盘已经饱和。

我记得有一次,某个策略在回测时一切正常,但实盘时订单执行延迟突然飙升。查了半天,发现是磁盘I/O的 await 从2ms飙到了50ms。原因?另一个团队在跑全量数据导出,把磁盘带宽吃光了。从那以后,我们给交易系统单独划了磁盘分区,并且限制了非核心任务的I/O优先级。

我的建议: 交易系统尽量用SSD,别用机械盘。如果条件允许,上NVMe。另外,日志写操作一定要异步,别让I/O阻塞了交易主流程。

网络带宽监控:别让数据堵在路上

网络是交易系统的生命线。行情数据要进来,订单要发出去,哪一步都离不开网络。网络延迟哪怕多1毫秒,都可能让你错过最佳成交价。

工具方面,sar -n DEVnloadiftop 是常用的。更专业的可以用 tcpdump 抓包分析。

指标 说明 关注点
rxkB/s 接收速率 行情数据量大时容易打满
txkB/s 发送速率 订单量爆发时需关注
rxcmp/s 每秒接收的压缩包 某些交易所会压缩行情
drop 丢包数 不为0就要查原因

这里有个经验:网络带宽不是越大越好,关键是延迟和稳定性。我曾经见过一个团队,为了省钱用了共享带宽,结果行情高峰期网络抖动,订单发不出去。后来换了专线,问题就解决了。

避坑指南: 我曾经在排查网络问题时,发现 drop 指标不为0。一开始以为是网卡问题,后来发现是系统内核参数 net.core.rmem_max 设置太小,导致接收缓冲区溢出。调大这个参数后,丢包就消失了。记住,内核参数调优 是网络监控的重要一环。

知识体系总览

下面这张图,是我自己总结的硬件资源监控知识体系。你可以把它当作一个检查清单,每次做性能调优时对照着看。

硬件资源监控知识体系 CPU监控 内存监控 磁盘I/O监控 网络带宽监控 核心指标 • %user / %sys • %iowait / %steal • 负载均衡 • 工具: top, mpstat 核心指标 • total / used • buff/cache • available • 工具: free, vmstat 核心指标 • r/s, w/s • await 延迟 • %util 利用率 • 工具: iostat, iotop 核心指标 • rx/tx 速率 • drop 丢包 • 延迟与抖动 • 工具: sar, iftop 核心原则:先监控,后调优。用数据说话,别靠感觉。 推荐组合:top + iostat + sar + iftop,四件套搞定日常监控

嗯,这张图基本把硬件监控的核心内容都涵盖了。你每次做性能调优时,可以对照着检查一遍,看看是哪个环节出了问题。

最后说一句:监控不是目的,调优才是。但如果没有监控数据,调优就是盲人摸象。所以,先把监控搭起来,让数据说话。


公众号:蓝海资料掘金营,微信deep3321