运维——记一次接口超时的问题与解决方法(HttpException: Read timed out)

news2024/11/26 2:45:17

前言:近期,一个线上的项目,请求出现了大量接口超时的问题,找了几个小时原因,最终发现是因为数据库服务器的磁盘满了,在此记录一下寻找的过程以及发现的问题,以备后续参考。

环境

  • 项目服务器(CentOS 64-bit 7.9)
    • OpenJDK 1.8.0_272
  • 数据库服务器(CentOS 64-bit 7.9)
    • Mysql 5.7.19-log

(1).出现问题

下午5点多,有人向我们反馈,所有开放接口调用时都出现了请求超时的问题,日志输出如下:

cn.hutool.http.HttpException: Read timed out

简而言之就是Http请求出现了超时的问题。

(2).检查服务

既然是请求超时,第一个想到的就是服务会不会挂掉了,于是进服务器看了下,发现服务正常,日志也显示有收到请求。

(3).检查网络

既然服务没有问题,那么有没有可能网络出现了问题,因为这阵子确实有改变过网络环境,于是联系了他们的运维,互相ping了一下,没有问题,带上服务的端口telnet一下,也没有问题,于是,尝试用curl请求接口,发现接口的鉴权验证也能正常拦截鉴权错误的请求,此时基本确定了网络没有问题。
在这里插入图片描述

但由于鉴权的基本验证并没有走MySQL,只有在鉴权通过以后,才会在MySQL记录请求信息,所以这里的错误鉴权并没有出现超时的问题。

(4).检查端口

使用lsof指令查看端口,发现有很多状态是CLOSE_WAIT的连接,所以可以判断出问题原因是有大量的请求没有正常返回(包括前端页面请求、开放接口请求和设备使用的接口请求)
在这里插入图片描述

(5).重启服务

确认接口逻辑没有问题后,感觉问题可能是连接数量太多,导致大量的CLOSE_WAIT

有没有可能是有人攻击服务器?于是尝试将服务的端口关闭,只对特定的ip开放。设置完成后,尝试重新请求接口,发现鉴权错误的请求还是能正常返回,于是构造了一个鉴权正确的请求,发现请求出现一直等待响应的问题,于是确认问题出在服务这边,但具体原因仍然未知。

于是尝试重启大法,看看能不能解决问题。结果,服务起不来了,且一直卡在初始化设备状态的逻辑。看了下日志输出,确认是卡在了数据库执行操作上。

(6).检查数据库

进入数据库服务器,发现数据库可以正常登录并执行查询语句,所以怀疑是不是有死锁的问题,执行show engine innodb status;后发现并没有死锁,检查了数据库服务器的连接情况,没有发现异常,线索又中断了…
在无奈之下,尝试重启数据库服务,结果,数据库服务起不来了,提示以下异常:

Starting MySQL... [ERROR] The server quit without updating PID file

这提示有锤子用啊…于是查看MySQL的异常日志,找到最近的[ERROR]标签,终于找到了问题:

mysqld: File '/data/.../.../log/mysql-bin.~rec~' not found (Errcode: 28 - No space left on device)

恍然大悟,没有磁盘空间了嘛,于是执行了一下df -hl,结果…

Filesystem               Size	Used	Avail	Use%	Mounted on
/dev/mapper/VG--xxxxx    400G 	400G 	28K		100%	/data

这样都所有东西都解释通了:

  • 只涉及数据库查询操作的都能正常返回(其它情况则导致请求发送成功,但一直等待返回值)
  • 数据库没有执行完成,导致请求走不下去,所以出现请求发送成功,但服务端一直没有正常返回的问题
  • 接口没有返回就导致客户端请求超时后强行断开,导致大量的CLOSE_WAIT
  • 数据库跑不起来

瞬间感觉吃进了一斤答辩…
于是查看了占用较大的文件,发现数据库的慢日志文件slow.log占用特别大,里面记录了所有的数据库操作,但是明明在my.cnf配置了long_query_time = 1,为啥还会记录执行时间不到1s的日志呢?
不过先不管这么多了,把服务恢复才是首要任务,于是备份并删除慢日志,重启MySQL

Starting MySQL...			[OK]

感觉心里的石头终于落地了

(7).再次重启服务

在数据库启动完成后,重启项目的中间件(因为中间件没有问题,所以上文省略了),重启服务,再次请求开放接口,发现正确的鉴权也能正常返回,至此,服务恢复正常。


遗留的问题

  • 服务端在请求执行时间过长的情况下不会自动断开
  • 数据库在SQL语句执行时间过长的情况下没有自动断开
  • 数据库慢日志记录了执行时间小于long_query_time的记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打怪升级之FPGA组成原理(LE部分)

FPGA芯片逻辑单元的原理 不论你使用哪一款FPGA芯片,其核心可编程逻辑单元都是从一段内存种按顺序读取执行并执行的过程。具体来说,FOGA芯片内部包括可编程逻辑块(LAB)、可配置输入输出单元(IOE)、时钟管理模块、嵌入式RAM(BRAN,在Cyclone IV…

【堆的使用】【dfs构建数】二叉树遍历

二叉树遍历方法一:方法二:利用堆的性质原题链接 方法一: 利用dfs构建树 因为这个前序遍历给了我们空的叶节点 所以我们可以只根据叶节点 构建树 abc##de#g##f### 构建图如下 我们根据前序 abc##de#g##f### 发现 dfs左子树 和 右子树 当…

mac系统下使用clion调试redis源码

获取源代码 有两种方式,第一种是从官网下载 Redis 源码压缩包,如图 1-1 所示。 图1-1 将压缩包解压得到一个文件夹。 第二种方式,通过 git clone 获取源码。 从 Github 上,使用 git clone https://github.com/redis/redis.git…

第1章-JVM与Java体系结构

1、本系列博客,主要是面向Java8的虚拟机。如有特殊说明,会进行标注。 2、本系列博客主要参考尚硅谷的JVM视频教程,整理不易,所以图片打上了一些水印,还请读者见谅。后续可能会加上一些补充的东西。 3、尚硅谷的有些视频…

业务转包?行为不可控?企业外包如何保护数据安全?

出于人力、设备、开发成本等各种因素考虑,企业会把一部分业务外包出去,比如AI数据标注外包、IT外包、银行部分业务外包等。同时,随着企业不断向外包业务转移,保护数据安全和隐私已成为企业最为关注的问题之一。 来自国外的一份报告…

1.16 从0开始学习Unity游戏开发--人物控制

上一篇我们简单的做了一个玩家不动的情况下,如何控制准心来射击子弹,但是显然正常的游戏需要移动玩家本体,所以本篇我们需要补全这部分玩法所需的功能。 人物移动 在我们之前的篇章里面,讲解了如何通过物理引擎来实现物体的物理…

(学习日记)2023.4.11

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

360虚拟数字展厅vr全景展示实现高度开放空间的深度体验

随着VR虚拟现实技术的不断发展和普及,线上VR全景虚拟展厅逐渐成为了各行各业的展示和推广产品的重要手段之一。相比于传统的展览方式,线上VR全景虚拟展厅打破了许多传统展览的局限性 传统局限性: 1、重体验过于依赖线下,难以实现转…

CloudCompare如何使用基础功能?

文章目录0.引言1.File2.Edit3.Tools4.Display5.Plugins6.3D Views0.引言 CloudCompare是一款优秀的开源点云处理软件,在研究点云的过程中,会用到其中一些点云处理功能。为快速熟悉软件的基础功能,本文介绍相应的功能按键的作用。    1.Fil…

Nginx专题-基于多网卡的主机配置

文章目录Nginx 基于多网卡的主机实现一、虚拟机前置环境准备ifcfg-ens32配置文件的内容参考ifcfg-ens33配置文件的内容二、案例演示修改nginx.conf配置文件解决中文乱码Nginx 基于多网卡的主机实现 一、虚拟机前置环境准备 点击虚拟机右下角的 红色标框按钮,然后右键…

【GC垃圾回收算法】让内存垃圾无处藏身

文章目录概述垃圾对象的判定引用计数可达性分析回收垃圾标记清除复制算法标记整理分代回收概述 垃圾回收就是帮我们把不用的内存垃圾自动释放掉 什么是垃圾呢?就是指不再使用的垃圾 如果不进行垃圾回收就会导致一个严重的问题,内存泄漏 内存泄漏&#x…

【id:34】【20分】D. Point_Array(类+构造+对象数组)

题目描述 上面是我们曾经练习过的一个习题,请在原来代码的基础上作以下修改:1、增加自写的析构函数;2、将getDisTo方法的参数修改为getDisTo(const Point &p);3、根据下面输出的内容修改相应的构造函数。 然后在主函数中根据…

HTTP伪造

打开后是一个精美的页面,再精美也没啥用,先查看源码吧可以看到这里有个点击触发的a标签,点进去后提示我不来自https://Sycsecret.buuoj.cn,结合题目是HTTP,立刻就想到了HTTP请求头伪造抓包,本身是没有Refer…

ActiveMQ使用(一):在JavaScript中使用stomp.js

ActiveMQ使用(一):在JavaScript中使用stomp.js 1. 环境准备 jQuery-1.10 下载地址:https://www.jsdelivr.com/package/npm/jquery-1.10.2?tabfilesstomp.js 2.3.3: 下载地址:https://www.jsdelivr.com/package/npm/stompjs 2. 相关代码 <!DOCTYPE html> <html l…

东用科技路由器连接上云助手配置指导手册

一、上云助手操作步骤1.安装“Device control center”并启动。2.点击“服务器设置”后设置端口号&#xff1a;1-65535&#xff0c;传输协议&#xff1a;TCP/UDP。##路由推送功能默认不勾选。其功能为将填写的远端子网及掩码信息推送给客户端&#xff0c;客户端就会生成一条目的…

java反序列化 cc链1 分析

这里我是跟白日梦组长学习&#xff0c;果然大佬就是大佬&#xff0c;讲的是真好&#xff0c;按他的配置&#xff0c;我们来配置环境。 环境搭建 环境&#xff1a; java&#xff1a;java8u_65 commons-collections&#xff1a;3.2.1 这里逛了很多圈&#xff0c;说实在的真的没有…

融云出海赋能会干货回顾 | 用户增长、场景玩法、安全合规实用指南

近期&#xff0c;“纵浪潜海 2023 融云社交泛娱乐出海赋能会”在上海、广州相继举行。移步【融云全球互联网通信云】&#xff0c;回复【出海】获取PPT。 作为更专业的出海服务商&#xff0c;融云联合多家出海服务企业&#xff0c;从热门出海地区的特性洞察、玩法解决方案、技…

BGP过滤(社团属性过滤器、AS路径过滤器)

通过路由策略来过滤 [r2]ip ip-prefix aa permit 172.16.1.0 24 [r2]route-policy aa deny node 10 [r2-route-policy]if-match ip-prefix aa [r2]route-policy aa permit node 20 [r2]bgp 200 [r2-bgp]peer 10.1.23.3 route-policy aa export 前缀列表进行过滤 [r3]ip ip-pref…

新手使用Python开发游戏pygame入门很合适-02

前面一篇博文&#xff0c;我们让飞机动起来了&#xff0c;但不是那么完美&#xff0c;我们继续来完善我们的游戏代码&#xff0c;本篇博文主要介绍获取按键的方式已经飞行速度的控制。 文章目录一、获取按键的三种方式1、通过event.get配合pygame.key枚举2、通过event.get配合o…

本地测试Segment Anything

一、下载GitHub代码 官网地址&#xff1a; https://github.com/facebookresearch/segment-anything git clone 或者 下载ZIP压缩包 二、下载.pth文件 官网中给出了三个训练好的参数文件 点击下载&#xff0c;我这里下载了最后一个358M大小的模型&#xff08;这里可以使用迅…