`
大涛学长
  • 浏览: 110690 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何检测 Web 服务请求丢失问题

阅读更多
问题描述
最近偶尔有用户反馈某些 HTTP 接口出现超时问题,而 web 服务端的 Trace 监控没有出现 http 返回值为 503 等异常情况。出现这种情况一般是web容器出现问题,客户端连接不上来。本文将主要介绍如何去监控这类问题。
我们是用典型的 Web 服务架构,应用通过域名访问到我们的 LVS(Linux Virtual Server)机器,LVS 后面对应了多台 Web 服务器。



考虑到无法对 LVS 进行跟踪,而 Web 服务器(Tomcat 上出现堆积,无法评估影响范围)。考虑再三后,我们准备在Tomcat 和 LVS 上加一个 Nginx,用于追踪用户访问的真实情况。Nginx 是一款自由、开源的高性能 HTTP 服务器。通过 Nginx 代码,我们可以掌握第一手的用户访问的真实情况,本来是打算通过 Nginx 的 Access 日志来做统计, 后来参考 阿里云链路追踪的文档,用链路追踪可以把 HTTP 的埋点和 Tomcat 连起来看,可以更详情地发现问题。



环境准备和问题复现
编译安装 Nginx 和 Jaeger Agent,具体的安装过程可以参考 阿里云链路追踪文档。
测试环境:需要重现超时问题,写了一个小程序,开启 200 个线程,每个线程连续向服务发送 500 个请求。总共提交 100000 个请求。
排查过程
排查的主题思路, 对比 Web 服务端数据和 Nginx 服务端的链路统计数据,如果两种的请求数不一致,那可以确定有请求丢失。再根据链路上的详情数据来确定丢失请求的原因。
1、Web 服务端数据统计
发送请求后,发现 web 服务端一共处理 98717 个请求,比客户端少了 1283 个请求。



2、Nginx 服务端统计
查看 Nginx 的请求,一共有 100000 个请求,说明 Nginx 收到了全部请求,但是进入到 Web 服务上处理的只有 98717 个请求(通过 javax.servlet.Filter 埋点来监控)。
3、问题分析
检查 Nginx 服务,发现 Nginx 的有些请求的 HTTP 的返回码 499。如下图所示:



对比正常的 HTTP 链路,发现 Nginx 的请求的 HTTP 的返回码 499,只有一个 Span 就返回了,而 HTTP 返回码为 200 的,可以看到完整的调用链路(链路上除了 Nginx 的 Span,还有 Web服务的 Span),如下图展示:



我们可以这样来解释这个问题,客户端流量进入 Web 服务器,如果 Web 服务器处理不过来(超出可承受的最大流量或者 Web 服务器本身可能出现 FullGC,OOM,死锁,线程池慢问题), 那客户端设置超时的请求将会出现 499,未进入 javax.servlet.Filter 处理,Web 服务端看不到任何访问记录。
那是不是可以认为出现 HTTP 返回值为 499 的请求都是服务端处理失败的请求?
4、进一步排查
我们捞取下 Nginx 上返回 499 的请求,总共 2719条,大于 Web 服务丢失的 1283 个请求。这个数据对不上,是什么原因呢?我们在仔细查看了下数据,有 Nginx 返回 499 的请求,但是 Web 服务返回了 200。这些请求进入 Web 服务处理程序,但是 Web 服务还没返回就超时了。如果没有 Tracing 把上下文链接起来,我们很难通过 Nginx 日志或者 Web 服务日志来解释这个问题(一个请求,Nginx 返回 499,而 Web 服务返回 200),如下图所示:



把 Nginx 和 Web 容器服务(Tomcat)的链路打通,我们可以查看 HTTP 请求每个环节的状态,很方便地定位问题。
总结
针对这种 Web 服务无响应的问题,可以通过加一层代理(Nginx代码),很好的排查问题。同时也很好统计 Web 服务器造成多少请求失败,影响多少用户。对故障定级,影响面可以进行准确的评估。



推荐产品 Tracing Analysis
登录链路追踪控制台,在概览页面上打开 查看 Token 开关。
单击需要使用的链路数据采集客户端(Jaeger 或 Zipkin)按钮。
在下方表格中相应地域的 相关信息 Trace 列中,单击接入点信息末尾的复制按钮。
提示:如果应用部署于阿里云生产环境,则选择内网接入点,否则选择公网接入点。对于 Zipkin,一般情况下请使用 v2 版接入点,v1 版接入点仅限对 Zipkin 十分了解的高阶用户使用。
本文作者:徐建伟,花名竹影
原文链接:https://yq.aliyun.com/articles/718470?utm_content=g_1000079877
本文为云栖社区原创内容,未经允许不得转载。
分享到:
评论

相关推荐

    如何检测Web服务请求丢失问题1

    【如何检测Web服务请求丢失问题】\n\n在IT领域,Web服务请求丢失可能是由于多种原因造成的,如网络延迟、服务器过载、错误配置或软件bug。本文将深入探讨如何定位并解决此类问题。\n\n首先,【问题描述】中提到的...

    简单搭建WEB服务器 简单搭建WEB服务器 简单搭建WEB服务器

    在IT领域,Web服务器是提供HTTP(超文本传输协议)服务的应用程序,允许用户通过互联网访问网站和网页。本文将详细介绍如何简单搭建一个WEB服务器,包括基础概念、所需工具及步骤,旨在帮助初学者快速入门。 一、...

    个人WEB服务器 2.0

    4. **备份与恢复**:定期备份网站数据,以防意外丢失,同时了解如何在出现问题时恢复服务。 总的来说,【个人WEB服务器 2.0】为个人用户提供了一种便捷的方式,让他们能够在自己的设备上搭建并管理Web服务,从而...

    REST服务构建的web应用的优势和不足

    REST 服务构建的 Web 应用优势和不足 REST(REpresentational State Transfer)是一种混合架构风格,当前互联网的核心架构风格。基于 REST 服务(RESTful Service)的 Web 应用系统设计任务主要包括:识别并设计 ...

    五分钟搭建Web服务器和论坛

    你需要将你的网页文件放在这个目录下,以便Web服务器能够找到并服务它们。 4. **启动和测试Web服务器**: 安装完成后,使用`systemctl start apache2`或`systemctl start httpd`命令启动Web服务器。然后,通过访问`...

    nginx Web服务器代码

    维护方面,定期更新Nginx以获取安全补丁,监控日志以排查问题,进行定期备份以防止数据丢失。 综上所述,Nginx以其高效、稳定和灵活的特性,在Web服务器领域占据重要地位。深入理解其工作原理和配置,对于构建高...

    配置与管理WEB服务器.pptx

    这包括定期更新服务器软件以修复安全漏洞,设置访问控制列表(ACLs)限制特定IP的访问,监控服务器日志以检测异常活动,以及使用备份策略来防止数据丢失。此外,还需要对服务器进行性能调优,确保在高负载下也能正常...

    WinForm、ASP.NET Web服务实现简单的自动更新

    1. **更新检查器**:这是一个后台线程或定时任务,定期连接到ASP.NET Web服务,请求当前的版本信息。通常,这可以通过HTTP请求完成,携带当前版本号作为参数,以便服务器比较。 2. **下载管理器**:当检测到有新...

    Microsoft Web Application Stress Tool web服务器性能测试工具

    6. **监控系统稳定性**:在高压力下,还要关注系统的稳定性,确保在大量并发请求下,应用仍能保持正常运行,不出现崩溃或数据丢失的情况。 7. **兼容性测试**:除了性能测试,还可以利用WAS工具进行兼容性测试,...

    基于UIP的简单WEB服务器

    【基于UIP的简单WEB服务器】是一个项目,它在Visual Studio 2005(VS2005)开发环境中,利用UIP(User Interface Protocol)的API接口...对于想要学习嵌入式Web服务或者UIP协议的开发者来说,这是一个很好的实践案例。

    打造个人WEB服务器

    Web服务器是互联网上提供网页服务的计算机系统,它接收HTTP请求并返回HTML响应,使得用户可以通过浏览器访问网站内容。在这个过程中,我们将深入探讨如何设置和配置个人Web服务器。 首先,我们需要一个基础环境,这...

    手机远控asp源码传至web服务器

    【标题】"手机远控asp源码传至web服务器"涉及到的是远程控制技术与ASP编程语言在Web服务器上的应用。ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,它允许开发者创建动态、交互式的网页。在这个...

    WebServer项目常见问题

    WebServer项目常见问题解决方案 在配置Tomcat底层时可能会遇到的问题,以下是解决方案: 1. 项目创建后无法新建包或类 原因:项目下的src/main/java目录不是源码目录。 解决方法:将src/main/java目录设置为源码...

    http上存下载服务器 hfs web服务器

    10. **与其他服务集成**: 可以将HFS与其他服务集成,如通过API接口自动化文件上传或下载,或者结合使用其他Web服务来增强功能。 总之,HTTP上存下载服务器HFS为个人和小型团队提供了一种简单、实用的文件分享和管理...

    Web、FTP服务器的配置

    - **IIS(Internet Information Services):** 微软提供的用于管理Web和FTP服务的工具集。 - **虚拟目录:** 物理位置不在主目录下的文件夹, 但可以在URL中直接访问。 - **默认文档:** 当用户访问某个目录时, 自动加载...

    嵌入式Web访问时的内存丢失问题

    在本文中,我们将探讨一个特定的问题,即“嵌入式Web访问时的内存丢失问题”,这是在实际应用中偶尔遇到的,尤其是在资源有限的嵌入式环境中。嵌入式Web服务器通常用于监控和控制设备,如文中提到的多支点触发系统,...

    一次HTTP请求共经历7步

    在互联网世界中,HTTP(超文本传输协议)是用于客户端(如Web浏览器)与服务器之间交换数据的基础。...通过理解这7个步骤,我们可以更好地理解Web的工作原理,这对于网络开发、性能优化和问题排查都是非常有帮助的。

    基于Web服务的安全模型研究.docx

    然而,Web服务的开放性和基于Internet的特性使其面临着诸如信息丢失、窃听、篡改等安全风险。安全问题成为Web服务的重要议题,因为这直接影响到数据交换和传输的安全性。为了确保连锁商业企业通过Web服务进行安全的...

    Web服务器种类及优缺点.docx

    服务器是一种高性能计算机,主要负责处理来自客户端的服务请求并提供相应的服务。为了确保服务的质量与连续性,服务器必须具备强大的计算能力、稳定性和高可用性。根据应用场景的不同,服务器可以分为多种类型,例如...

    web静态服务器

    在web服务器的场景下,服务器会创建一个监听socket,等待客户端发起连接请求,然后进行通信。 HTTP协议是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器的传输协议。它是基于TCP/...

Global site tag (gtag.js) - Google Analytics