首页 > 系统相关 >linux 死锁排查以及线程信息打印

linux 死锁排查以及线程信息打印

时间:2024-05-26 15:37:01浏览次数:24  
标签:bin gstack 9900 echo 死锁 sh 线程 linux

 

脚本名称,gstack.sh

#!/bin/sh

if test $# -ne 1; then
    echo "Usage: `basename $0 .sh` <process-id>" 1>&2
    exit 1
fi

if test ! -r /proc/$1; then
    echo "Process $1 not found." 1>&2
    exit 1
fi

# GDB doesn't allow "thread apply all bt" when the process isn't
# threaded; need to peek at the process to determine if that or the
# simpler "bt" should be used.

backtrace="bt"
if test -d /proc/$1/task ; then
    # Newer kernel; has a task/ directory.
    if test `/bin/ls /proc/$1/task | /usr/bin/wc -l` -gt 1 2>/dev/null ; then
        backtrace="thread apply all bt"
    fi
elif test -f /proc/$1/maps ; then
    # Older kernel; go by it loading libpthread.
    if /bin/grep -e libpthread /proc/$1/maps > /dev/null 2>&1 ; then
        backtrace="thread apply all bt"
    fi
fi

GDB=${GDB:-/usr/bin/gdb}

# Run GDB, strip out unwanted noise.
# --readnever is no longer used since .gdb_index is now in use.
$GDB --quiet -nx $GDBARGS /proc/$1/exe $1 <<EOF 2>&1 | 
set width 0
set height 0
set pagination no
$backtrace
EOF
/bin/sed -n \
    -e 's/^\((gdb) \)*//' \
    -e '/^#/p' \
    -e '/^Thread/p'

gstack.sh 脚本,可以查看进程的 线程信息。

例如: server1 的进程id 是 9900

执行下面的命令,就可以查看 9900 进程的线程信息了

sh  gstack.sh  9900

执行下面的命令,可以将 进程的线程信息,写入到指定文本(a1.log)

sh  gstack.sh  9900  >> a1.log

 

 

 

脚本名称:watch_dead_lock.sh 

#!/bin/bash  
  
# 设置日志文件名  
LOG_FILE="a1.log"  
# 设置要执行的命令模板  
COMMAND_TEMPLATE="sh gstack.sh %s >> $LOG_FILE"  
# 设置追加到日志文件的分隔符  
SEPARATOR="--------------------------------------\n"  
# 设置执行次数  
COUNT=10000  
  
# 检查是否提供了参数  
if [ "$#" -ne 1 ]; then  
    echo "Usage: $0 <number>"  
    exit 1  
fi  
  
# 获取外部输入的数字  
NUMBER=$1  
  
# 设置要执行的命令  
COMMAND=$(printf "$COMMAND_TEMPLATE" "$NUMBER")  
  
# 初始化计数器  
COUNTER=0  
  
# 循环执行命令  
while [ $COUNTER -lt $COUNT ]; do  
    # 打印当前是第几次执行  
    echo "正在执行第 $((COUNTER+1)) 次..."  
      
    # 执行命令  
    eval $COMMAND  
      
    # 追加分隔符到日志文件  
    echo -e "$SEPARATOR$SEPARATOR" >> $LOG_FILE  
      
    # 打印分隔符到屏幕(可选)  
    echo "--------------------------------------"  
      
    # 增加计数器  
    ((COUNTER++))  
      
    # 等待10秒  
    sleep 4  
done  
  
echo "执行完成,共执行了 $COUNT 次命令。"

watch_dead_lock.sh 可以定期打印线程的 gstack 信息,用于排查死锁等情况

例如,下面的命令就是 定期打印 9900 的线程信息。这个脚本要配合gstack.sh脚本来执行

sh watch_dead_lock.sh 9900

 

标签:bin,gstack,9900,echo,死锁,sh,线程,linux
From: https://www.cnblogs.com/music-liang/p/18213736

相关文章

  • 第一部分 多线程基础
    本系列博客,主要是面向Java8的源码。本系列博客主要参考汪文君老师《Java高并发编程详解》一书转载请注明出处,多谢~。1.线程的start方法剖析/***Causesthisthreadtobeginexecution;theJavaVirtualMachine*callsthe<code>run</code>methodofthisth......
  • Debian/Linux网络配置全面指南:从静态IP到DNS设置
    在Debian/Linux上配置网络涉及多个步骤,包括设置静态IP地址、配置网关和DNS服务器等。以下是一个详细的教程,指导你如何在Debian/Linux系统上进行网络配置。1.编辑网络接口配置文件在Debian/Linux上,网络接口的配置文件通常位于/etc/network/interfaces。首先,以超级用户身份......
  • vb.net 利用APi 、句柄,通过GetWindowThreadProcessId 获得窗口所在进程ID和线程ID 结
    '''<summary>'''声明'''</summary>'''<paramname="hwnd"></param>'''<paramname="lpdwProcessId"></param>......
  • 【Linux】为 VMware 的 Linux 系统(CentOS 7)设置静态IP地址
    文章目录准备工作查看子网掩码和网关IP确认准备设置的虚拟机端口没有被占用调整设置编辑配置文件配置文件说明完成配置,准备测试使用命令终端连接服务器我是一名立志把细节说清楚的博主,欢迎【关注】......
  • Linux 常用命令
    Linux常用命令查看资源使用情况top命令:实时显示系统资源的使用情况,包括CPU使用率、内存使用情况、进程信息等。它可以实时更新数据,您可以使用交互命令对输出进行排序和过滤。htop命令:与top类似,但提供了更友好的用户界面和更多的功能,如更丰富的进程信息和交互式......
  • Linux 防火墙只允许指定IP 端口访问
    开启和关闭防火墙命令如下:查看防火状态systemctlstatusfirewalld2:暂时关闭防火墙systemctlstopfirewalld3:永久关闭防火墙systemctldisablefirewalldsystemctlstopfirewalld.service4:重启防火墙systemctlenablefirewalld5、查看防火墙已开通的端口:sudo......
  • linux文件权限常用知识点,基于Linux(openEuler、CentOS8)
    目录知识点常用实例知识点真实环境文件显示解读常用实例文件所有者chown-Rnginx:nginx/home/source目录权限(R选填必须大写<遍历子文件夹及文件>)chmod-R755/home/sourcechmod-R777/home/source......
  • Linux服务器安装docker,基于Linux(openEuler、CentOS8)
    本实验环境为openEuler系统(以server方式安装)(CentOS8基本一致,可参考本文)目录知识点实验知识点Docker是一个开源的应用容器引擎。它允许开发者将应用及其所有依赖项打包到一个可移植的容器中,并发布到任何支持Docker的流行Linux或Windows操作系......
  • linux: 操作系统与进程概念
    在计算机的组成原理中,我们经常用计算机通常遵循冯诺伊曼体系结构,即控制器,存储器,运算器,和输入设备及输出设备,而通常将里面的存储器称为内存,运算器和控制器一起集成为CPU,输入输出统称为外设,我们日常写的代码由输入设备加载到内存中,由处理器识别成机器码,再通过CPU中的指令......
  • linux:常用工具 yum vim git gbd
    linux操作系统如果最小化安装是很难使用的,所以需要很多工具进行扩展,这些扩展网上有很多,同时也是给了用户很多选择,但是并不是所有的程序都是可靠的,安卓和windows都是需要去有官方认证的平台下载安全的应用使用,而linux也是有不同的发行版本的团队整理的可靠的安装包使用,......