vector动态扩容操作让我遇到了大麻烦!
- 内容介绍
- 文章标签
- 相关推荐
本文共计951个文字,预计阅读时间需要4分钟。
家好,我是东北码农。记录一下工作中的事。前几天,运维同事给我反馈了一个问题:通过监控发现,线上一个服务,业务线程时不时会卡顿,卡顿时间大约持续几秒。我们做了金蝶。
大家好,我是东北码农。记录一下工作中事。
前几天,运维同事给我反馈了一个问题:
通过监控发现,线上的一个服务,业务线程时不时会出现卡顿,卡顿大约持续几秒。
我们做金融系统后台开发的,对性能要求很严格的,当然要查一查啦。
1、问题调查 1.1、top 日志top中有内存和cpu信息,可以判断出卡顿时内存使用暴涨,但cpu使用没有下降。
应该是做了非常耗cpu和内存的操作,而不是等待什么。
通过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和capacityvector有size和capacity两个属性,size是实际数量,capacity是容器当前容量。
本文共计951个文字,预计阅读时间需要4分钟。
家好,我是东北码农。记录一下工作中的事。前几天,运维同事给我反馈了一个问题:通过监控发现,线上一个服务,业务线程时不时会卡顿,卡顿时间大约持续几秒。我们做了金蝶。
大家好,我是东北码农。记录一下工作中事。
前几天,运维同事给我反馈了一个问题:
通过监控发现,线上的一个服务,业务线程时不时会出现卡顿,卡顿大约持续几秒。
我们做金融系统后台开发的,对性能要求很严格的,当然要查一查啦。
1、问题调查 1.1、top 日志top中有内存和cpu信息,可以判断出卡顿时内存使用暴涨,但cpu使用没有下降。
应该是做了非常耗cpu和内存的操作,而不是等待什么。
通过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和capacityvector有size和capacity两个属性,size是实际数量,capacity是容器当前容量。

