线程夯死的排查及解决

news2024/11/16 6:43:06
最近做的业务一直是和第三方交互的业务,为了加快速度,基本上都是采用多线程,然而时不时总是发生一些推送任务莫名的卡死,知道前几天的一次发现,让我开始了线程的排查之路,希望对大家的有一定的启发和借鉴

一:分布式锁导致的线程夯死

问题的发生是小伙伴突然和我说线上的数据推送任务不推送了,于是我基于对自己的代码信任,觉得不可能,(其实以前也发生过这样的问题,大多是代码中涉及的redis队列超时导致,不过我已经优化了一个版本,觉得不可能还有这样的问题,这时候小伙伴说重启吧,但是我想了想之前也遇到过这种灵异现象,这一次上头了,感觉事情没那么简单,于是我开始了排查之路

1.发现线程夯死

日志系统显示下午的15:30,google的推送线程(gg_push_47)捞取了数据打了日志就卡住了,初步怀疑线程夯死
在这里插入图片描述

2.确认线程夯死

于是根据ip找到了具体的pod,以及里面的自主排障里的Arthas控制台,查询到了线程处于TIMED_WAITING,注意我配图的Arthas线程已经不是当时的线程了(gg_push_47),因为当时忘记截图了,所以随手找了一个,用来代表线程当时的状态

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3.排查夯死原因

问题已经定位到了,于是找到了运维打了jstack日志(因为我没服务器权限。。。)可以看到gg_push_47夯死在了jedis的一个lock操作上面,而最后一次业务当法则是getToken
在这里插入图片描述
getToken中恰好也存在利用公司架构封装的redis使用的分布式锁,于是我们看看.getToken操作redis
到底做了啥

在这里插入图片描述

到这里其实原因就很清晰了,lock这个方法设置的锁,锁持有超时和锁等待时间都是-1,也就是永久
那么假设A线程调用 getToken但是由于释放锁的时候出现了redis超时的问题,也就是finally这段代码异常了,那么A线程由于锁永远持有,所以B线程(gg_push_47)由于设置的锁等待时间是-1,那么B线程虽然获取不到锁,但是也会永远等待,导致了线程的夯死

4.结论

分布式锁一定要设置锁超时和锁等待时间,如果不确定时间的值,那么可采用看门狗机制,我这里是维护之前的代码,没办法。。都是坑啊

二:网络请求不设置超时时间导致的线程夯死

问题的发生是小伙伴又和我说线上的数据推送任务不推送了,不过这次从google换成了facebook,tm的分布式锁搞定了啊,而且facebook没用分布式锁,设置任何JUC到LOCK都没,怎么可能会被夯死呢,这时候小伙伴又说重启吧,但是我又一次上头了,于是再次踏上排查之路。。。

1.确认线程夯死

有了上次的经验我直接拿到了停止推送的线程,发现不同于上次的等待这次一直处于runnable状态
在这里插入图片描述

在这里插入图片描述

2.排查夯死原因

于是又找到了运维打了jstack日志(运维累了。。。)可以看到fb_push_44夯死在fb的网络请求中在这里插入图片描述
绿色的是我的最后一次交互业务代码,红色的为facebook-sdk封装的网络请求的api,可以发现问题出现在读取respose,初步怀疑是没有设置超时时间,于是我看了一下源码发现真的没有设置超时时间

1.发现连接对象是HttpsURLConnection,set方法并为设置任何超时时间参数,去看看具体的的属性有无默认值
在这里插入图片描述
2.发现JDK提供的HttpsURLConnection初始化时间都是0,即永不超时,而SDK中也为设置,所以也就导致了线程夯死
在这里插入图片描述

3.结论

任务网络请求,一定要设置超时时间,否则就是坑啊。。。

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

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

相关文章

使用Mybatis-plus在xml文件中实现自己定义的sql逻辑

1、创建数据库表(前提安装配置好Mysql,并且会使用) DROP TABLE IF EXISTS USER; CREATE TABLE USER (id BIGINT(20) NOT NULL COMMENT 主键ID,NAME VARCHAR(30) NULL DEFAULT NULL COMMENT 姓名,age INT(11) NULL DEFAULT NULL COMMENT 年龄,email VARCHAR(50) NUL…

【C51单片机】8-温湿度监测显示系统(LCD1602、温湿度传感器、IIC、OLED)

1.LCD1602概述 LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 1602 即 32 字符(16列两行) //硬件接线 //电源 VSS -- GND VDD -- 5V //对比度 VO -- GND //控制线 RS -- P1.0 RW -- P1.1 E -- P1.4 //背光灯 A -- 5…

华为VRRP配置

拓扑图 PC1电脑配置 指定ip192.168.10.1 网关192.18.10.254 LSW1交换机配置 ge0/0/1 access &#xff0c;vlan10 ge0/0/2 trunk ge0/0/3 trunk <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Informa…

基础练习 闰年判断

def is_leap_year(year):if year % 4 0 and year % 100 ! 0 or year % 400 0:print("yes")else:print("no")if __name__ __main__:is_leap_year(int(input()))

题解,git的使用,MySQL与JDBC的使用(上)

题解 引入&#xff1a;tarjan算法&#xff0c;强连通分量&#xff0c;割点&#xff0c;割边&#xff0c;点双联通分量&#xff0c;边双联通分量 P4961 小埋与扫雷 思路&#xff1a;分别求出数字和空格相加即可 #include<iostream> using namespace std; const int X[8]…

图片与视频相关冷知识

目录 色彩的相关概念 色深 色相与饱和度 色调 冷色调与暖色调 色温 白平衡 白平衡偏移 色阶 色阶中的直方图 对比亮度 视频相关概念 像素数 分辨率 逐行扫描与隔行扫描 对比度 高对比度与低对比度 清晰度&#xff08;也称锐度&#xff09; 锐化 锐化与锐度…

果推断16--市场营销中资源分配问题的直接异质因果学习

题目&#xff1a;市场营销中资源分配问题的直接异质因果学习 Direct Heterogeneous Causal Learning for Resource Allocation Problems in Marketing 论文链接&#xff1a;https://export.arxiv.org/pdf/2211.15728v2.pdf 摘要&#xff1a;资源分配是市场营销中一类重要的决…

定点除法运算

目录 一、原码除法运算 1.原码比较法和恢复余数法 ⑴比较法 ⑵恢复余数法 2.原码不恢复余数法&#xff08;原码加减交替法&#xff09; 二、补码除法运算 1、够减的判断 2、上商规则 3、商符的确定 4、求新部分余数 5、末位恒置1 乘法的…

nssctf web入门(4)

这里通过nssctf的题单web安全入门来写&#xff0c;会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列&#xff0c;之后会一直出这个题单的解析&#xff0c;题目一共有28题&#xff0c;打算写10篇。 [ZJCTF 2019]NiZhuanSiWei [ZJCTF 2019]NiZhuanSiWei…

本周大新闻|微软IVAS 1.2预计24年交付;华为发布AR-HUD方案

本周XR大新闻&#xff0c;AR方面&#xff0c;IVAS 1.2版预计24年交付&#xff1b;苹果AR眼镜预计26年采用超透镜方案&#xff1b;苹果首款XR头显由和硕转立讯代工&#xff1b;一加展示新款AR眼镜原型&#xff1b;镭昱点亮单片全彩Micro-LED&#xff1b;苹果智能指环专利公布。 …

windows10 java 创建合约

a. 安装Nodejs 主要是方便使用npm 命令 并配置环境变量 b.使用 npm 可以便捷地安装Solidity编译器solcjs npm install -g solc c.找个目录 创建一个solidity文件 如 // SPDX-License-Identifier: GPL-3.0pragma solidity >0.8.2 <0.9.0;/*** title Storage* dev Store…

ChatGPT引爆AI热潮,未来有哪些核心落地场景与投资机遇?

自ChatGPT面世以来&#xff0c;AI行业再度被引爆&#xff0c;AI大模型作为新一代颠覆性技术同时掀起了一波又一波热潮&#xff0c;头部厂商与创业者纷纷涌入&#xff0c;备受业界瞩目与市场追捧。 在这汹涌的狂欢背后&#xff0c;实则代表着AI发展的阶跃&#xff0c;即AI直接创…

和ChatGPT关于Swing music的一场对话(上篇)

什么是 Swing Music &#xff1f; Swing Music 是一款漂亮的自托管音乐播放器&#xff0c;适用于您的本地音频文件。就像一个更酷的 Spotify …但带上你自己的音乐。 第一次在 reddit 上看到 Swing Music&#xff0c;就被其 UI 吸引了 但源码站点的releases 中只有 windows 和 …

凌恩生物美文分享|转录组研究利器——三代全长转录组测序(Iso-Seq)

近年来&#xff0c;随着高通量测序技术的发展&#xff0c;转录组测序已经成为研究基因表达调控的主要手段。我们知道&#xff0c;很多物种的转录本非常多样和复杂&#xff0c;绝大多数真核生物基因不符合“一基因一转录本”的模式&#xff0c;这些基因往往存在多种剪切形式。通…

学习着编写了一款chrome小插件

背景介绍 半年前有幸分享了一下浏览器开发者工具的技术分享&#xff0c;当时的PPT在写至最后处总感觉理论讲解多于代码分享&#xff0c;于是琢磨着编写一下相关的代码&#xff0c;在经过一番苦思冥想后最终锁定了浏览器插件编写的实现上&#xff0c;所以在经过一番知识百科后&…

(OpenAI)ChatGPT注册登录常见问题错误代码及其解决方法

在使用 ChatGPT 的时候我们可能会碰到一些错误的代码&#xff0c;本文统一来介绍一下每一种错误以及解决方法。 错误代码1. 不能在当前国家使用 出现场景&#xff1a;一般在注册或登录的时候会出现。 原因&#xff1a;主要是ChatGPT检测到当前访问所在的地区不允许访问导致。 …

如何在Java中使用同步回调和异步回调

文章目录&#xff08;一&#xff09;同步回调&#xff08;1&#xff09;匿名内部类回调&#xff08;2&#xff09;Lambda 回调&#xff08;二&#xff09;异步回调&#xff08;1&#xff09;简单的线程回调&#xff08;2&#xff09;异步并行回调&#xff08;3&#xff09;Comp…

python 时间序列分解案例——加法分解seasonal_decompose

文章目录一、模型简介1.1 加法分解模型1.2 乘法分解模型1.3 分析步骤二、案例2.1 背景 & 数据 & python包2.2 分析过程一、模型简介 1.1 加法分解模型 加法分解模型适用于随着时间推移趋势和季节性变化不断累加&#xff0c;并且随机波动比较稳定的时间序列数据。该模…

初识linux之线程互斥

目录 一、线程互斥的概念 1. 多线程下全局数据的安全问题 2 线程互斥相关背景概念 二、线程加锁 1. 锁生成和销毁 2. 对一个锁加锁 3. 对一个锁解锁 三、解决多线程并发式访问临界资源问题 四、如何看待锁 1. 锁限制线程串行访问 2. 加锁和解锁的原子性 五、对锁进…

数学体操之牛顿数值法解方程的程序和图解

牛顿法是一种用来寻找函数零点的迭代方法&#xff0c;它基于以下思路&#xff0c;如果我们知道了一个函数在某个点的切线&#xff0c;那么函数的零点就可以通过切线与x轴的交点来近似计算。 给定一个函数,找到零点,过程如下: 选择初始点,然后使用这个点处的切线来近似,也就是…