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

问题现象

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

问题排查过程

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、再判断是由于发送时间太长,还是响应时间太长导致的,这一步也可以通过抓包判断。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在项目中,考虑的性能参数 在实际项目中,根据业务QPS 规划、客户端处理性能、网络带宽、链路数、消息平 均码流大小...
    StevenBrazil阅读 1,029评论 0 0
  • 1、简述 最近简单看了一下关于HTTP请求方面的知识,之前一直用Qt来实现,有专门HTTP请求的QNetworkA...
    贰爷阅读 2,575评论 0 0
  • 本文想从一个角度来让大家认识到回答一个问题不能从表面或者感觉来判断,这是学习技术的大忌,很多新手如果刚开始没有一套...
    KooFrank阅读 1,918评论 0 0
  • 一、避免消息积压 对于绝大多数使用消息队列的业务来说,消息队列本身的处理能力要远大于业务系统的处理能力。主流消息队...
    滴流乱转的小胖子阅读 271评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,593评论 28 53