vector动态扩容操作让我遇到了大麻烦!

2026-05-27 19:090阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计951个文字,预计阅读时间需要4分钟。

vector动态扩容操作让我遇到了大麻烦!

家好,我是东北码农。记录一下工作中的事。前几天,运维同事给我反馈了一个问题:通过监控发现,线上一个服务,业务线程时不时会卡顿,卡顿时间大约持续几秒。我们做了金蝶。

大家好,我是东北码农。记录一下工作中事。

前几天,运维同事给我反馈了一个问题:
通过监控发现,线上的一个服务,业务线程时不时会出现卡顿,卡顿大约持续几秒。

我们做金融系统后台开发的,对性能要求很严格的,当然要查一查啦。

1、问题调查 1.1、top 日志

top中有内存和cpu信息,可以判断出卡顿时内存使用暴涨,但cpu使用没有下降。
应该是做了非常耗cpu和内存的操作,而不是等待什么。

1.2、代码分析

通过top的分析,结合代码分析,发现业务代码中有vector操作,每收到一个包都会建立索引。伪代码如下

vector<uint64_t> idx_; void on_recv(pkg *h) { idx_.push_back(h->seq); }

应该是vector动态扩容时,造成的卡顿。下面来验证一下。

2、vector std::vector is a sequence container that encapsulates dynamic size arrays.

vector的底层实现是数组,在使用时采取动态扩容方式。

2.1、vector的size和capacity

vector有size和capacity两个属性,size是实际数量,capacity是容器当前容量。

阅读全文

本文共计951个文字,预计阅读时间需要4分钟。

vector动态扩容操作让我遇到了大麻烦!

家好,我是东北码农。记录一下工作中的事。前几天,运维同事给我反馈了一个问题:通过监控发现,线上一个服务,业务线程时不时会卡顿,卡顿时间大约持续几秒。我们做了金蝶。

大家好,我是东北码农。记录一下工作中事。

前几天,运维同事给我反馈了一个问题:
通过监控发现,线上的一个服务,业务线程时不时会出现卡顿,卡顿大约持续几秒。

我们做金融系统后台开发的,对性能要求很严格的,当然要查一查啦。

1、问题调查 1.1、top 日志

top中有内存和cpu信息,可以判断出卡顿时内存使用暴涨,但cpu使用没有下降。
应该是做了非常耗cpu和内存的操作,而不是等待什么。

1.2、代码分析

通过top的分析,结合代码分析,发现业务代码中有vector操作,每收到一个包都会建立索引。伪代码如下

vector<uint64_t> idx_; void on_recv(pkg *h) { idx_.push_back(h->seq); }

应该是vector动态扩容时,造成的卡顿。下面来验证一下。

2、vector std::vector is a sequence container that encapsulates dynamic size arrays.

vector的底层实现是数组,在使用时采取动态扩容方式。

2.1、vector的size和capacity

vector有size和capacity两个属性,size是实际数量,capacity是容器当前容量。

阅读全文