记客户端请求超时分析过程

author author     2022-09-08     383

关键词:

  1. 请求处理过程描述

    服务端 使用 框架 加载 业务so,并未业务so创建协程处理,处理完成后给出 响应。so入口函数接收(const Type&in, Type &out,Type &extend),是否给出响应的前提是 out里面要有 业务so的处理结果,即 out 不能是空的。这样处理的 原因是 有些客户端 只关心 消息是否被服务端收到,不关心处理结果,这时 服务端在收到 请求后 直接发送响应告诉 客户端 收到消息了, 而服务端业务so处理 完消息后 置out为空,就不会再次向同一笔请求 发送响应.

  2. 框架调用业务so伪码:

    try

    {

      loadso;

     proc_func=get_symbol:入口函数

     proc_func(in,out,extend);

    }

    catch(...)

    {

      printf "unkow exception"

    }

  3. 问题点:

    业务现网请求消息20%超时,服务端框架日志里有 “unkow exception”,但因为框架要处理很多业务,框架日志是公用的,不能确认"unkow exception”是不是超时请求引起的。

    调整框架日志和业务so级别 为debug,框架调用业务so会输出两条接口日志(req,ans);

  4. 分析

    a.怀疑是坏的请求,框架解析请求失败。根据请求里关键字,查看接口日志,发现只有req,没有ans,可以确定 框架接收到了请求,说明网络没问题(在进行这步是可以进行抓包,和有80%成功率),并且请求没问题。

    b.业务so 有该请求的运行日志,发现运行到某 特定行后 就不往下处理,没产生core文件;可以确认问题不在框架,结合框架产生的异常异常日志,说明 业务so 产生了异常。

    c.从业务so输出的最后一条debug日志点 往下分析,异常一定是后续产生的;逐行代码分析,重点关注可能抛出异常的函数(老司机一眼看出来,牛),最终锁定在string str.substr(pos),该函数原型为

    string substr(size_t pos=0,size_t len=npos)const;

    If this is greater than the string length, it throws out_of_range.

  5. 总结

    a.发现现网问题,先向直接领导汇报,说自己正在处理,领导可以帮助协调资源,评估影响。

    b.打开日志级别到debug,所有日志都要打开。(刚开始没有打印接口日志,导致框架没输出req,不能确定是不是框架没收到消息.)

    c.确定请求处理的最后几行代码。逐行分析.(有经验老司机,一眼就看出来问题代码行)

    d.建议框架既然捕获了异常,就输出标准异常的详情.e.what(),catch(exception e){} catch(...){}

    e.业务so 使用guard 类 局部对象 在析构函数中判断 out 是否为空,以判断是不是异常退出,保证业务so 因业务异常退出时 能输出日志,有据可查. 同时guard 内也可以进行 资源释放回收,防止资源泄露.

  

wireshark分析tcp三次握手过程

TCP三次握手过程大致流程图Wireshark分析三次握手1.客户端发起第一次握手,SYN为标志位、生成的随机序列号seq为Sequencenumber(raw):4044533600(记做J),表示请求建立连接2.服务端收到请求,SYN为标志位、ACK=1、Ack... 查看详情

nginx并发请求过高导致请求超时的问题

...架构,但应用服务端采用的是Nginx,故决定限制一下限制客户端的访问频次和访问次数。​Nginx可以通过ngx_http_limit_conn_module和ngx_http_limit_req_module配置来限制ip在同一时间段的访问次数:可以根据设定的条件来限定客户端(单... 查看详情

请求超时的 libevent http 客户端

】请求超时的libeventhttp客户端【英文标题】:libeventhttpclientwithrequesttimeout【发布时间】:2012-12-2210:56:08【问题描述】:我正在使用libevent在特定时间间隔内获取网站的一些统计信息。我的程序基于this。我唯一缺少的是请求超时,... 查看详情

http超时问题

...现sockethangup或者ECONNRESET的错误总而言之就是服务器先于客户端关闭了TCP连接,并且客户端不知道解决办法:nginx可以针对单个域名请求作出超时设置:针对服务器的超时设置: 查看详情

如何增加 Postman 客户端请求超时

】如何增加Postman客户端请求超时【英文标题】:HowtoincreasePostmanClientrequesttimeout【发布时间】:2016-07-2105:24:01【问题描述】:我向邮递员请求API并在2分钟后得到响应,这很好,因为业务逻辑很复杂。但问题是邮递员给了502网关错... 查看详情

cas单点登录-关于服务器超时以及客户端超时的分析(十)

...上面的是猜想,那么实际情况到底是什么样的?CAS-Client客户端超时时间其实就是项目session的有效时间,默认:30分钟,(springboot2.x)可修改配置:验证方法:a.事前准备:b.验证动作:2分钟后,我优先单击webApp1的网页,仿佛没... 查看详情

Cassandra CQLSH OperationTimedOut 错误=客户端请求超时。请参阅 Session.execute[_async](超时)

】CassandraCQLSHOperationTimedOut错误=客户端请求超时。请参阅Session.execute[_async](超时)【英文标题】:CassandraCQLSHOperationTimedOuterror=Clientrequesttimeout.SeeSession.execute[_async](timeout)【发布时间】:2017-02-1817:44:05【问题描述】:我想将数据从一... 查看详情

wireshark分析tcp三次握手过程

TCP三次握手过程大致流程图Wireshark分析三次握手1.客户端发起第一次握手,SYN为标志位、生成的随机序列号seq为Sequencenumber(raw):4044533600(记做J),表示请求建立连接2.服务端收到请求,SYN为标志位、ACK=1、Ack... 查看详情

如何避免sshsecureshellclient连接linux超时,自动断开

...掉,ClientAliveInterval应0改60,ClientAliveInterval指定服务器端向客户端请求消息间间隔,默认0,发送.ClientAliveInterval60表示每钟发送,客户端响应,保持连接.ClientAliveCountMax,使用默认值3即.ClientAliveCountMax表示服务器发请求客户端没响应数达定... 查看详情

java示例代码_设置web服务客户端(java)的请求超时

java示例代码_设置web服务客户端(java)的请求超时 查看详情

具有已定义超时的 Java HTTP 客户端请求

】具有已定义超时的JavaHTTP客户端请求【英文标题】:JavaHTTPClientRequestwithdefinedtimeout【发布时间】:2011-03-0107:44:59【问题描述】:我想将BIT(内置测试)用于我的云中的多个服务器。我需要请求在大超时时失败。我应该如何用java... 查看详情

NPM 请求模块(REST 客户端)的默认超时是多少?

】NPM请求模块(REST客户端)的默认超时是多少?【英文标题】:WhatisthedefaulttimeoutforNPMrequestmodule(RESTclient)?【发布时间】:2017-02-0506:44:25【问题描述】:接下来是我的node.js调用以检索一些数据,这需要超过1分钟。这将在1分钟(6... 查看详情

客户端发送请求,java后端有耗时任务,web服务器如nginx返回服务端超时信息,会中断后端请求处理吗

...的请求超时时间小于java对请求的处理时间,从而返回给客户端服务端处理超时的状态码,这样会中断java对这个请求的处理吗?个人觉得应该不会,但是求有经验的给个肯定或者答案不会终止。超过nginx超时时间,那么请求断开... 查看详情

如何测试客户端代码是不是正确超时 API 请求到外部服务器

】如何测试客户端代码是不是正确超时API请求到外部服务器【英文标题】:HowtotestifclientsidecodecorrectlytimeoutAPIrequesttoexternalserver如何测试客户端代码是否正确超时API请求到外部服务器【发布时间】:2021-12-0817:55:51【问题描述】:... 查看详情

Azure Blob 存储 .NET 客户端请求超时

】AzureBlob存储.NET客户端请求超时【英文标题】:AzureBlobStorage.NETclientrequesttimeout【发布时间】:2019-03-2121:02:06【问题描述】:我试图了解在AzureStorage.NET客户端中处理网络错误的行为。简而言之,我的问题是:如果我在从blob存储... 查看详情

http执行过程分析

执行过程:1.用户在浏览器(客户端)里输入或者点击一个网址链接;2.浏览器通过网址域名查找ip地址。DNS查找方式是通过浏览器缓存(会记录DNS记录)→系统缓存→TCP/IP参数中设置的首选DNS服务器等一级一级递归解析,然... 查看详情

nginxhttp500类型错误码出现的原因以及分析

...误问题的时候可以从3个方向来发现问题。为什么要考虑客户端问题?如果报的错误是501错误,那么有一种可能是客户端的http请求method是nginx无法识别的类型,那么这种情况下会报501错误。当然,这种情况概率很小,基本不会遇... 查看详情

httpd

...浏览器输入一个URL,且回车,会先进行DNS解析请求(2)客户端拿到DNS解析请求返回的IP之后,去请对应的服务器站点的资源(3)服务器端判断是否接受请求,如果接收请求,会对请求报文进行解析,分析请求报文的请求头信息... 查看详情