C++ 发送http太慢导致数据积压问题分析(Linux)

2023-11-18

问题现象

程序接收数据,对数据进行简单地处理,处理完之后发送到其他平台。程序在接收到数据到在其他平台上面显示时间差了将近一个小时。存放要发送到其他平台的数据的容器积压了大概一百五十多万条的数据。

问题排查过程

1、接收数据与发送数据到其他平台显示之间出现较大的时间间隔就是由于数据积压导致的。出现数据积压的原因有两种,一种是数据输入量太大,一种是数据输出太慢。数据输入量是固定的,而且输入量不算大,所以首先通过加大输出数据的线程排查。可是问题并没有解决。

2、因为数据输出前需要对数据进行处理,判断是否是处理的过程有问题,通过计算单条数据处理输出的时间。

Linux下计算程序运行的时间:

/*  一个简单计算程序运行时间的代码,时间单位是ms  */
int DealData(string data)
{
    struct timeval start, end;
    double timeuse = 0;
    gettimeofday(&start, NULL);
    
    /*
    数据实际处理过程
    */
    
    gettimeofday(&end, NULL);
    //获取上面这段代码运行所用时间,单位:ms
    timeuse = (end.tv_sec - start.tv_sec)*1000 + (double)(end.tv_usec - start.tv_usec)/1000.0;
    
    return 0;
}

程序处理的数据种类很多,通过计算每种数据处理并发送到平台的时间,排查出是在处理图片数据时间花费的时间较长,一张图片处理及发送到平台花费时间大概为10多秒,发送数据的方式为http。而数据处理只是将具体的图片加密,处理的时间很短,属于正常范围内,说明问题出在发送http数据上面。

2、发送http数据时间较长,首先排查是否是发送的数据量太大导致。通过查看发送的实际图片,了解到图片在发送前已经处理过了,实际发送的大小一般只有500kb左右,由此判断不是发送的数据量太大导致,进一步判断是由于传输过程除了问题导致的。

3、http传输的过程可以简单分为两步:(1)发送数据到平台;(2)平台接收到数据并给出响应,发送方收到响应,传输过程结束。首先测试发送数据的时间,可以直接在服务器上测试,不通过程序。

Linux下测试http发送数据的时间,命令如下:

# URL是要发送的http地址,POST 指明发送的是post指令,data.json是要发送的数据文件
Time curl URL -X POST -H "Content-Type:application/json;charset=UTF-8" -d @data.json

通过以上命令测试,发现发送相同的数据,发送的时间也是10多秒,说明不是由于程序导致的发送http时间较长,而当前网络也没有问题,由此判断由于接收方平台出现了问题,收到数据后给出响应时间太长导致整个http时间变得很长。

4、联系接收方解决,最终问题解决。用上面的命令再次测试,发送数据时间为300毫秒左右,程序处理速度变快,积压的数据一下就跑完了,问题解决.

总结

遇到发送http数据积压问题:

1、首先看发送时间的是否太长;

2、发送时间太长,首先判断是否是传输的数据包太大导致;

3、再判断是由于发送时间太长,还是响应时间太长导致的,这一步也可以通过抓包判断。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 发送http太慢导致数据积压问题分析(Linux) 的相关文章

随机推荐

  • ClickHouse实时分析(一)- ClickHouse入门

    目录 1 什么是ClickHouse 1 1 OLAP场景的关键特征 1 2 列式数据库更适合OLAP场景的原因 1 2 1 输入 输出 1 2 2 CPU 2 ClickHouse的特点 2 1 列式存储 2 2 数据压缩 2 3 数据的
  • DALI协议了解

    DALI Digital Addressable Lighting Interface 是一种新的智能照明系统的控制协议 系统具有结构简单 安装方便 操作容易 功能良优等特点 协议定义了电子镇流器与控制器之间的通信方式 DALI协议系统由分
  • 哨兵节点:思想简单,效果很棒的的编程算法

    文章目录 普通的算法 哨兵算法 小结 别人的经验 我们的阶梯 今天和同事一起调代码 定位到一处很耗时的地方 在某个线程中 同步周期需要保证在2毫秒 如果耗时不到2毫秒 那么就让剩下的时间进行sleep 但是在调用一个模块的内部函数时 时不时
  • 轻盈绘图的Excalidraw插件

    朋友们 你们的Obsidian彩虹屁狂魔重新上线 从这篇Obsidian实践开始 我想跟大家陆续分享一下 Obsidian中那些让人眼前一亮的宝藏插件 原本我想从逻辑上最基础 使用上最简单的插件讲起 然鹅 请原谅我实在按捺不住自己迫切的心情
  • JAVA小游戏(国王和大臣)

    棋规则和需求 规则 棋子 2颗国王棋和 8 16 颗大臣棋 分别用黑白两色代表国王和大臣 黑子为国王 白子为大臣 棋盘 5 9的二维棋盘 共37个交点 如图所示 吃子规则 包括移子和添子 1 国王每回合可以选择移动一步 或者跳吃大臣一颗棋子
  • ceph集群警告和错误类型

    指标 说明 级别 noscrub flag s set 防止集群做清洗操作 full flag s set 使集群到达设置的full ratio值 会导致集群阻止写入操作 nodeep scrub flag s set 防止集群进行深度清洗
  • Vue与WebGL结合

    本文将WebGL与当前前端比较火的Vue框架进行初步结合 以备后续项目开发需要 部分代码源自https blog csdn net GISuuser article details 82224057以及 WebGL编程指南 大家可以自己百度
  • 使用IDEA创建springboot项目时,出现错误Cannot download ‘https://start.spring.io‘: connect timed out

    使用IDEA创建springboot项目时 出现错误Cannot download https start spring io connect timed out 解决方案 1 选择 custom 并使用阿里云 https start al
  • Objective-C Runtime 1小时入门教程

    原文出处 ian ianisme 一 前言 如果你没有Objective C基础 请学习了基础的iOS开发再来 这个1小时是给有一定iOS基础的童鞋的 如果你是大牛或者你感觉Objective C Runtime太简单不用1小时学习的 也请
  • MVVM框架极简总结

    MVVM是一个前端框架 由model view viewmodel组成 是MVC的升级版 变成了由viewmodel进行m和v之间的双向数据绑定 虽然代码量相较于MVC变得更多了一点 逻辑和视图分开来写 但是更利于代码解耦 也更方便测试来自
  • 刷脸支付互联网思维的推广让传播变得更快

    行业巨头也在加速抢占刷脸支付的风口 支付宝近期发布了新的刷脸支付设备 同时宣布补贴力度不设上限 以此来加速刷脸支付的落地 在巨头们的大力推动下 刷脸支付普及率不断提升 最新数据显示 目前我国刷脸支付用户数已经破亿 其中 90后 占据了主流
  • Qt之软键盘的实现

    文章目录 前言 一 基于中文汉字数据库 1 核心代码 2 效果 二 基于谷歌拼音输入引擎 1 核心代码 2 效果 前言 Qt5 8版本开始推出了基于QML实现的软键盘功能 在此之前 并没有官方版本的软键盘 本篇主要介绍Qt实现软键盘的两种方
  • conda创建虚拟环境 python版本不对_如何在conda虚拟环境中指定python版本

    我在新的职位上负责一个工作项目 我相信虚拟环境是在它里面创造的 正如我所见 head bm3 py usr bin env opt bm3 venv bin python3 bm3 venv是使用requirements txt 使用vir
  • 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 路由(二)之分库分表路由

    关注微信公众号 芋道源码 有福利 1 RocketMQ MyCAT Sharding JDBC 所有源码分析文章列表 2 RocketMQ MyCAT Sharding JDBC 中文注释源码 GitHub 地址 3 您对于源码的疑问每条留
  • c++学习之pair对组创建

    功能描述 成对出现的数据 利用队组可以反回两个数据 函数原型 pair
  • C# 项目没有.sln文件的解决办法:

    什么是sln文件 sln文件开发中使用的解决方案文件 使用解决方案文件 后缀为sln的文件 表示一个项目组 他通常包含一个项目中所有的工程文件信息 包括文件版本 工程信息 全局设置 通过打开sln文件就可以加载整个项目 但是我新建的一个项目
  • Win11总是出现BitLocker恢复,想要彻底关闭它该如何操作?

    win11解除bitlocker加密方法一 1 首先按下键盘 Win R 打开运行 如图所示 2 打开运行后 在其中输入 control 并点击 确定 打开控制面板 如图所示 3 打开后 进入 bitlocker驱动器加密 如图所示 4 随
  • 【计算机视觉

    文章目录 一 ResNeSt 二 ShuffleNet v2 三 FBNet 四 Inception v4 五 ResNet D 六 MetaFormer 七 PyramidNet 八 RevNet 九 Convolutional Visi
  • Shell脚本运行中的停止方法

    Linux系统Shell中提交了一个脚本 但是需要停止这个进程 如何处理 方式1 killall file flume kafka 说明 killall是一个命令 不是kill all file flume kafka是脚本名 此方法简单粗
  • C++ 发送http太慢导致数据积压问题分析(Linux)

    问题现象 程序接收数据 对数据进行简单地处理 处理完之后发送到其他平台 程序在接收到数据到在其他平台上面显示时间差了将近一个小时 存放要发送到其他平台的数据的容器积压了大概一百五十多万条的数据 问题排查过程 1 接收数据与发送数据到其他平台