syslog 引发死锁

主线程在写 syslog,同时在信号处理函数中也在写syslog,当主线程在写的时候,如果同时触发了信号,那么将会导致死锁。
$pstack 4289
#0 0x00000036768df9ee in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x000000367688d0dd in _L_lock_1685 () from /lib64/libc.so.6
#2 0x000000367688ce27 in __tz_convert () from /lib64/libc.so.6
#3 0x00000036768cff7d in __vsyslog_chk () from /lib64/libc.so.6
#4 0x00000036768d0580 in syslog () from /lib64/libc.so.6
#5 0x00000000004c8c81 in SigChldHandler ()
#6
#7 0x000000367688d2ad in __tzfile_compute () from /lib64/libc.so.6
#8 0x000000367688ce5f in __tz_convert () from /lib64/libc.so.6
#9 0x00000036768cff7d in __vsyslog_chk () from /lib64/libc.so.6
#10 0x00000036768d0580 in syslog () from /lib64/libc.so.6

#11 0x00000000004c5c21 in HandleNewBinRequest ()

根本原因是syslog内部会调用malloc,而malloc是不可重入函数,在信号处理函数中调用不可重入函数会导致死锁问题。

时间: 2024-07-30 20:48:30

syslog 引发死锁的相关文章

SQL Server锁分区特性引发死锁解析

原文:SQL Server锁分区特性引发死锁解析 锁分区技术使得SQL Server可以更好地应对并发情形,但也有可能带来负面影响,这里通过实例为大家介绍,分析由于锁分区造成的死锁情形. 前段时间园友@JentleWang在我的博客锁分区提升并发,以及锁等待实例中问及锁分区的一些特性造成死锁的问题,这类死锁并不常见,我们在这里仔细分析下.不了解锁分区技术的朋友请先看下我的锁分区那篇实例. Code(执行测试脚本时请注意执行顺序,说明) 步骤1 创建测试数据 use tempdb go creat

Java Swing多线程死锁问题解析

在基于Java Swing进行图形界面开发的时候,经常遇到的就是Swing多线程问题.我们可以想想一下, 如果需要在一个图形界面上显示很多数据,这些数据是经过长时间.复杂的查询和运算得到的.如果在图 形界面的同一个线程中进行查询和运算工作则会导致一段时间界面处于死机状态,这会给用户带来不良的 互动感受.为了解决这个问题,一般会单独启动一个线程进行运算和查询工作,并随时更新图形界面.这 时候,另一个问题就出现了,可能不仅没有解决原来偶尔死机问题,还可能导致程序彻底死掉.幸运的是 在JDK中暗藏了一

【操作系统】2、进程管理与死锁

1.进程 所谓进程,可以认为是一个程序及其正在运行的过程.相对来说,程序是一个静态的概念,而进程是一个动态的概念,更加强调程序运行的过程和状态.一般一个进程至少要包含几个内容,即程序代码.程序处理的数据.CPU寄存器的值.堆和栈以及进程所占用的系统资源. 进程的概念所以和程序相区分,关键在于进程具有三个特性,即动态性.独立性和并发性.所谓动态性,指的是进程表示动态执行的程序,每时每刻进程的状态都是在变化的,例如CPU寄存器的值.堆栈中的数据等.所谓独立性,指的是进程和进程之间一般不会相互影响,每

MySQL死锁与日志相关经验分享

最近线上 MySQL 接连发生了几起数据异常,都是在凌晨爆发,由于业务场景属于典型的数据仓库型应用,白天压力较小无法复现.甚至有些异常还比较诡异,最后 root cause 分析颇费周折.那实际业务当中咱们如何能快速的定位线上 MySQL 问题,修复异常呢?下文我会根据两个实际 case,分享下相关的经验与方法. 1.Case1:部分数据更新失败 某天渠道同学反馈某报表极个别渠道数据为 0,大部分渠道数据正常.这个数据是由一个统计程序每天凌晨例行更新的,按理来说,要么全部正常,要么全部失败,那会

SQL Server---进程死锁查杀

SQLServer---进程死锁查杀          最近在某学院评教系统中遇到了这么一个情况,当机房人数达到上限时,评教过程中就遇到了无法提交的情况.遇到问题后大家第一时间发现了是由于死锁造成的,于是在网上找了一些资料发现了SQL Server中有关于数据库进程死锁查杀的存储过程,如下:(分享给大家) CREATE proc [dbo].[p_lockinfo] @kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉,0 仅显示 @show_spid_if_noloc

死锁问题

Java中的多线程使用 synchronized关键字实现同步.为了避免线程中使用共享资源的冲突,当线程进入 synchronized的共享对象时,将为共享对象加上锁,阻止其他的线程进入该共享对象.但是,正因为这样,当多线程访问多个共享对象时,如果线程锁定对象的顺序处理不当话就有可能线程间相互等待的情况,即常说的: 死锁现象. 引发死锁的条件:必须满足以下四种条件1,互斥条件,每个资源要么已经分配给一个进程,要么就是可用的.2,占有等待条件,已经得到了某个资源的进程可以再请求新的资源 3,不可抢

深入理解Java 02 内置锁与死锁

一.并发问题分析 如果一个类或者程序所提供的接口对于线程来说是原子操作,或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题,此时线程是安全的. 而实际中存在这样的情况: 1.存在两个或者两个以上的线程对象,而且线程之间共享着一个资源. 2.有多个语句操作了共享资源. 二.解决方案 用一个案例来说明:张刘亮和郑旭共用一包面纸,两个人相当于两个线程,每一张纸不可以两人同时抽取 方式一:同步代码块 线程类: class PaperThread extends Th

【锁】Oracle死锁(DeadLock)的分类及其模拟

[锁]Oracle死锁(DeadLock)的分类及其模拟 1  BLOG文档结构图   2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 死锁的概念及其trace文件 ② 死锁的分类 ③ 行级死锁的模拟 ④ ITL的概念.ITL结构 ⑤ ITL引发的死锁处理 ⑥ ITL死锁的模拟 Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http

作为一个新手的Oracle(DBA)学习笔记

Oracle数据库笔记 Jack Chaing 作者QQ595696297 交流群 127591054 祝大家学习进步. 如果大家想看Word版本的可以去下载:Word排版比较清晰一些. http://download.csdn.net/detail/jack__chiang/9810532 此笔记是作者本人去年开始从一个DBA新人的学习笔记,积累至今,希望拿出来给那些对DBA有兴趣的童孩学习,大家一起努力嘛. 此笔记记录了作者工作学习中从零基础的学习的记录,和从中遇见的问题与问题的解决!很高兴