localtime的死锁问题及规避方式

2024-04-16 22:08

本文主要是介绍localtime的死锁问题及规避方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、分析进程死锁原因

2、解决进程死锁问题

 


开发webrtc服务端录制时,录制中出现偶现死锁问题,导致一个用户的录制线程始终无法正常退出,录制进程一直残留在服务器上。

1、分析线程死锁原因

通过pstack 进程id 查看进程堆栈,发现如下堆栈信息:

#0  __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
#1  0x00007f7690c0894a in _L_lock_10416 () from /lib64/libc.so.6
#2  0x00007f7690c062b5 in __GI___libc_malloc (bytes=140144917086240, bytes@entry=56) at malloc.c:2852
#3  0x00007f7691d9777e in _dl_map_object_deps (map=map@entry=0x7f7691fa2000, preloads=preloads@entry=0x0, npreloads=npreloads@entry=0, trace_mode=trace_mode@entry=0, open_mode=open_mode@entry=-2147483648) at dl-deps.c:511
#4  0x00007f7691d9d88c in dl_open_worker (a=a@entry=0x7f762d7f8958) at dl-open.c:261
#5  0x00007f7691d996c4 in _dl_catch_error (objname=objname@entry=0x7f762d7f8948, errstring=errstring@entry=0x7f762d7f8950, mallocedp=mallocedp@entry=0x7f762d7f8947, operate=operate@entry=0x7f7691d9d780 <dl_open_worker>, args=args@entry=0x7f762d7f8958) at dl-error.c:177
#6  0x00007f7691d9d24b in _dl_open (file=0x7f7690ced0a6 "libgcc_s.so.1", mode=-2147483647, caller_dlopen=<optimized out>, nsid=-2, argc=16, argv=0x7fffc6c85118, env=0x23ca1d0) at dl-open.c:650
#7  0x00007f7690ca6742 in do_dlopen (ptr=ptr@entry=0x7f762d7f8b70) at dl-libc.c:87
#8  0x00007f7691d996c4 in _dl_catch_error (objname=0x7f762d7f8b50, errstring=0x7f762d7f8b58, mallocedp=0x7f762d7f8b4f, operate=0x7f7690ca6700 <do_dlopen>, args=0x7f762d7f8b70) at dl-error.c:177
#9  0x00007f7690ca67df in dlerror_run (operate=operate@entry=0x7f7690ca6700 <do_dlopen>, args=args@entry=0x7f762d7f8b70) at dl-libc.c:46
#10 0x00007f7690ca6851 in __GI___libc_dlopen_mode (name=name@entry=0x7f7690ced0a6 "libgcc_s.so.1", mode=mode@entry=-2147483647) at dl-libc.c:163
#11 0x00007f7690c7dff5 in init () at ../sysdeps/x86_64/backtrace.c:52
#12 0x00007f7690f43953 in pthread_once () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S:103
#13 0x00007f7690c7e10c in __GI___backtrace (array=array@entry=0x7f762d7f8c10, size=size@entry=64) at ../sysdeps/x86_64/backtrace.c:103
#14 0x00007f7690ba9d12 in backtrace_and_maps (do_abort=<optimized out>, do_abort@entry=2, written=<optimized out>, fd=fd@entry=2) at ../sysdeps/unix/sysv/linux/libc_fatal.c:47
#15 0x00007f7690bfd40f in __libc_message (do_abort=do_abort@entry=2, fmt=fmt@entry=0x7f7690cf26a8 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:172
#16 0x00007f7690c02c7e in malloc_printerr (action=3, str=0x7f7690cf2a40 "malloc(): memory corruption (fast)", ptr=<optimized out>) at malloc.c:4895
#17 0x00007f7690c04e8b in _int_malloc (av=av@entry=0x7f7608000020, bytes=bytes@entry=15) at malloc.c:3289
#18 0x00007f7690c062c0 in __GI___libc_malloc (bytes=bytes@entry=15) at malloc.c:2855
#19 0x00007f7690c0bd5a in __GI___strdup (s=0x7f7690ceed59 "/etc/localtime") at strdup.c:42
#20 0x00007f7690c3282d in tzset_internal (always=<optimized out>, explicit=explicit@entry=1) at tzset.c:441
#21 0x00007f7690c32b63 in __tz_convert (timer=0x7f762d7f9628, use_localtime=1, tp=0x7f7690f35580 <_tmbuf>) at tzset.c:629

在localtime中出现了死锁问题

2、解决线程死锁问题

因为是系统函数,这里比较彻底的方式是替换localtime函数。采用gmtime获取系统时间。

 

这篇关于localtime的死锁问题及规避方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910024

相关文章

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁