3、性能指标定义:延迟、吞吐量、CPU占用率、内存消耗、网络带宽的关键指标
聊性能调优,第一步不是上手改代码,而是先搞清楚——你到底要优化什么?
我见过不少团队,一上来就盯着CPU占用率猛调,结果发现瓶颈其实在网络带宽上。白忙活一场。所以,咱们先把这几个核心指标掰扯清楚。
3.1 延迟(Latency)
延迟,说白了就是“等多久”。一个服务请求发出去,到收到响应,中间花了多少时间。这个指标最直观,也最影响用户体验。
关键点:
- 端到端延迟:从客户端发起到收到完整响应。我习惯用这个做最终验收。
- 服务内部延迟:请求进入SOA服务到处理完成。这个能帮你定位是哪个环节慢。
- 网络延迟:数据在网络上传输的时间。嗯,这里要注意,车内以太网虽然快,但丢包重传会瞬间拉高延迟。
我的经验:有一次排查一个ADAS服务的延迟抖动,发现不是算法慢,而是DDS的QoS策略配置不当,导致数据在中间件层排队。你想想看,调了半天代码,结果问题出在配置上。
避坑指南:我曾经用ping测网络延迟,发现只有2ms,但服务延迟却有50ms。后来才意识到,ping测的是ICMP,而SOA走的是TCP/UDP,路径和优先级完全不同。别被ping骗了。
3.2 吞吐量(Throughput)
吞吐量,就是“能干多少活”。单位时间内能处理多少请求,或者能传输多少数据。
常见单位:
- 请求/秒(TPS/QPS)
- MB/s 或 Mbps
延迟和吞吐量,其实是跷跷板。你拼命压吞吐量,延迟往往会上去。为什么?因为排队了。我建议做性能测试时,先定一个延迟上限,再去看能压到多少吞吐量。
| 场景 | 典型吞吐量要求 | 我的建议 |
|---|---|---|
| 车载诊断服务 | 10~50 TPS | 别压太高,诊断链路很脆弱 |
| 传感器数据流 | 100~500 MB/s | 注意网络带宽瓶颈 |
| OTA升级服务 | 5~20 MB/s | 别跟其他服务抢带宽 |
注意:吞吐量不是越高越好。我曾经见过一个团队,把CAN信号转发服务的吞吐量调到极限,结果CPU占用率飙到95%,其他服务全部饿死。调优要全局看。
3.3 CPU占用率
CPU占用率,就是处理器有多忙。这个指标太常见了,但容易误解。
几个关键点:
- 平均占用率:看一段时间内的平均值。我一般看1分钟、5分钟、15分钟。
- 峰值占用率:瞬间冲高的值。这个很要命,会导致服务抖动。
- 按核分布:多核处理器上,别只看总占用率。我遇到过某个核跑满100%,其他核空闲,总占用率才25%。
我的习惯:在SOA服务中,我会把CPU占用率控制在70%以下。超过这个值,延迟就会开始非线性增长。你想想看,CPU都忙不过来了,请求自然要排队。
3.4 内存消耗
内存消耗,就是占了多少RAM。嵌入式系统里,内存是硬约束。
关注点:
- 堆内存:动态分配的内存。容易泄漏,我吃过亏。
- 栈内存:每个线程的栈空间。别开太大,否则线程一多就爆了。
- 共享内存:SOA服务间通信常用。注意不要越界。
避坑指南:我曾经在调试一个服务时,发现内存占用率缓慢增长,查了两天才发现是DDS的样本缓存没释放。嗯,从那以后,我每次上线前都会跑24小时内存泄漏测试。
3.5 网络带宽
网络带宽,就是“路有多宽”。车内以太网通常是100Mbps或1Gbps,但别以为够用。
关键指标:
- 带宽利用率:实际使用量/总带宽。我建议控制在60%以下,留出余量给突发流量。
- 丢包率:丢了几个包。丢包会导致重传,延迟瞬间飙升。
- 抖动(Jitter):延迟的波动。对音视频流服务特别重要。
我的经验:有一次做多路摄像头数据融合,四个摄像头同时传1080p视频,带宽直接打满。后来改用H.265压缩,带宽占用降了40%。你想想看,有时候调优不一定是改代码,换个编码格式也行。
3.6 指标之间的关系
这几个指标不是孤立的。我画个简单的逻辑图给你看:
吞吐量 ↑ → CPU占用率 ↑ → 延迟 ↑
内存消耗 ↑ → 垃圾回收频繁 → 延迟抖动
网络带宽满 → 丢包 → 重传 → 延迟飙升
说白了,调优就是在这几个指标之间找平衡。我个人的习惯是:先定延迟目标,再看吞吐量,最后调CPU和内存。网络带宽嘛,提前规划好,别等上线了才发现不够用。
最后提醒一句:别只看平均值。峰值和99分位延迟,才是真正影响用户体验的。我曾经被平均延迟2ms的数据骗过,结果99分位延迟到了200ms,用户早就骂娘了。