linux进程挂死应该如何定位?

现象:
1、ps显示进程还在。
2、top显示进程占用cpu一直是0%。
3、proc里面显示进程状态为sleeping。
4、进程的main函数中的循环打印不再执行。
5、进程中的signal函数无法手动触发。
6、除了我自己需要的4个信号,其他信号都使用pthread_sigmask屏蔽了。
7、进程从运行到挂死的过程中,占用的内存没有持续增长,没有内存泄漏问题。
8、程序从启动到挂死时间为5小时左右。最长可以达到5天。

请大神指点迷津。

5个回答

抱歉搞不定,坐等大神 出现 mark一下

这个提问问的很专业,抱歉我也解决不了....不过之前有看过这篇文章:

 https://blog.csdn.net/wujin8589/article/details/51758944

会不会是程序的问题。

服务器在Linux上运行,一般情况下不关闭掉会永久运行,现在的很多服务基本都是这样子在一直跑着。

前面5条显示的是,进程已经休眠掉了,并且信号可能被系统调用到了。
有没有可能是定义的某些信号的名字,跟系统的sleep类定义的信号命名冲突了。

写的脚本有问题吧,系统不会说谎。

按照@hu_belif推荐的方法,拿到了当时的堆栈。但是信息很少,应该是栈被写坏了。估计是某一个数组越界,或者malloc的内存越界导致。大家帮忙看看!

Program terminated with signal 11, Segmentation fault.
#0 0x36c30504 in ?? () from /lib/libc.so.6
(gdb) bt
#0 0x36c30504 in ?? () from /lib/libc.so.6
#1 0x36be2938 in ?? () from /lib/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

现在挂死问题已经不再出现了,初步定位是打印了太多的log,大量的sqlite占用CPU IO太高(最高达到50%以上)。CPU被耗尽时,原本有序的signal的处理不再有序,导致进程挂死。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
linux 挂死问题定位分析
1.生成coredump 文件 根据生成的coredump文件,下载到编译环境中,结合gdb查找符号位,定位挂死位置 /opt/toolchains/gcc-4.7.3-cmc-201308-20140423/bin/mips-linux-uclibc-gdb ./linux_cmts_sym coredump GNU gdb (GDB) 7.5.1 Copyright (C) 2012
关于用strace工具定位vrrpd进程有时会挂死的bug
正在烧镜像,稍
挂死问题定位之方法一
在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁慈地留下的程序的尸体,帮助程序员们解决了一个又一个问题。 有时配置不给力,Linux直接毁尸灭迹,没有了Core文件;又有时,刚好磁盘空间不足,Core文件写不下了。没有Core文件的时候,如何知道
通过/proc查看Linux内核态调用栈来定位卡死问题
前几天碰到一个问题:一个进程运行过程中挂死了,把gdb挂上去之后bt打印的内容为空,后来通过查看 /proc 文件系统,查看程的调用栈,才发现是发消息给内核态程序时,内核态一直没有响应,导致用户态进程挂死。刚好在网上看到一篇描述通过 /proc 文件系统来定位问题的文章,这篇文章讲解得比较清楚,因此尝试翻译出来。原文地址:Peeking into Linux kernel-land using
linux挂死oops定位问题
注意分析pc is at系统挂死的行号,结合反汇编定位。以及关键寄存器的值,还有dump_stack()打印出来的调用堆栈关系。 什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”。“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”。看,Oops就是这个意思。 在Linux内核开发
Linux服务器挂死案例分析
Linux服务挂死案例分析
fprintf函数导致进程挂死问题分析
今天tuxedo的某个服务一调用就挂死,不报错,没coredump,经过打日志定位,有问题的代码是这一行: fprintf(m_fp,"%s%s",strTime.c_str(),strFmt.c_str()); m_fp是File*,后面两个变量都是string,并且都能打印出来,没有问题。 DaYong一口咬定就是fopen的问题。于是查看fopen的代码: m_fp = fopen
Linux如何查找杀死僵死进程
最近工作过程中,发现好几台服务器出现僵死进程(如图)。 用下面的命令找出僵死进程 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' 命令注解:   -A 参数列出所有进程   -o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数   因为状态为 z或者Z
linux 僵死进程及其处理方法
一、什么是僵死进程? 一般情况下,程序调用exit(包括_exit和_Exit,它们的区别这里不做解释),它的绝大多数内存和相关的资源已经被内核释放掉,但是在进程表中这个进程项(entry)还保留着(进程ID,退出状态,占用的资源等等),你可能会问,为什么这么麻烦,直接释放完资源不就行了吗?这是因为有时它的父进程想了解它的退出状态。在子进程退出但还未被其父进程“收尸”之前,该子进程就是僵死进程,
linux 内核出现CPU 死机
linux 异常分析工具(一) linux 内核OOPS(二) linux 内核出现CPU stall
Linux用户态用信号定位异常退出访问非法内存问题
repost from:http://www.cjjjs.com/paper/xmkf/2017817141130842.html  很多用户认为进程异常终止情况无从分析,但实际上进程异常终止情况都是有迹可寻的. 所有的进程异常终止行为,都是通过内核发信号给特定进程或进程组实现的. 可分成几个类型进行描述:     - SIGKILL. SIGKILL最特殊,因为该信号不可被捕获,同时SI
linux下使用gdb调试崩溃丶死锁实例
gdb是linux下一款功能强大的调试工具,windows下对应的有windbg,下面举例说明常见程序错误解决方法 1.gdb启动 要想使用gdb调试,编译时指定-g选项加入调试信息,gdb可以启动执行文件,attach正在运行程序,调试程序崩溃产生core文件 启动gdb后输入run运行,continue继续,quiet退出,下面是调试一段崩溃和死锁的源码 #include #inc
linux下进程突然挂掉排查方法
环境: Ubuntu Server 12.04  i686 问题描述: 24G内存,空闲的有20G左右。但是内核老是报这个,动不动就杀程序  Jul  6 13:12:44 00098 kernel: [3112325.883069] Out of memory: Kill process 2249 (nginx) score 1 or sacrifice child Jul  6 13:1
线程“无故”死亡,究竟谁是幕后黑手?
今天,一上班,同事就火急火燎的跑过来问我:程序怎么不会跑数据了,是不是挂了?按照惯例得先问问同事是不是哪里没配置好,导致没数据产生,在确认不是数据问题的之后,就纳闷了:难道程序真的挂了。 那个程序是我开发的一个多线程程序,run方法是一个死循环,负责处理数据,合适的情况下线程会进行休眠,避免浪费cpu资源。我第一时间登上服务器,使用jps命令可以看到程序的进程好好的还在那。由于之前数据库连接池出
tomcatJava程序老是死掉
最近我一个同事做了一个接口给地方,但是这个接口老是死掉,把tomcat服务重启之后又好了可没过多久有关掉了,一天要重启tomcat服务3,4次。程序挂掉之后,我看了下日志发现是连不上数据库了,于是我就知道了连接数据库没有释放掉的原因。于是就找程序里面那里的连接没有释放掉,可找了一半天没有发现那里没有释放掉呀。那既然这样就让tomcat自己来释放连接吧,在tomcat的安装目录下面的/conf/co
解决100个进程莫名其妙逐渐挂掉的问题
上周天遇到这样一个问题: 开启某操作后, 开启了100个进程, 几分钟内, 这些进程逐渐全部挂掉了。 当时无法用root身份登录机器, 无法看到内核log信息。 蛋疼了一整天,  但这个问题几乎必须要在24:00前解决, 几乎是必须。 白天的思路是, 肯定要100个进程才能快速做完啊。 而且之前在别的机器上, 也玩过200个进程同时跑的事。          找了好久, 都没有找到原因,
I2C从机挂死分析和解决方法
I2C几乎是嵌入系统中最为通用串行总线,MCU周边的各种器件只要对速度要求不高都可以使用。优点是兼容性好(几乎所有MCU都有I2C主机控制器,没有也可以用IO模拟),管脚占用少,芯片实现简单。I2C协议虽然简单,实际使用过程中小毛病还不少。今天先来看一个平日最为常见的问题:I2C从机挂死。 很多事情不难而且经常碰到,每次自认为懂了但最终让你站出来说清楚的时候却总是不能自圆其说,很难受。所
Linux下用gdb定位死锁方法
linux下多线程可能会遇到死锁问题,死锁问题一般是两个线程争抢某种资源导致的,比如线程1已经拥有A锁,它同时还想获取B锁,而此时线程2已经拥有B锁,同时去获取A锁,这样线程1和2就因为无法获得各自想要获取的锁而阻塞。        可以用gdb调试来查看死锁的线程及位置。        命令如下:        gdb        attach pid        thread a
NFS server宕机后,NFS client主机上df命令挂死
问题情况: oracle@NDMCDB05:~> df -h Filesystem            Size  Used Avail Use% Mounted on /dev/sda2              16G  331M   15G   3% / udev                   12G  748K   12G   1% /dev /dev/sda10
Uiautomator 重启 ~被自己蠢哭(黑盒测试好烦,一个Case就这样反复弄了一天)
被 一个 这么简单的问题 困扰了一天    唉    最后还是回到第一个思路上解决的。 (* KEYCODE_POWER 电源键 )      什么    Process proc1 = Runtime.getRuntime().exec("su -c \"/system/bin/reboot\"");     //这个没效果                 proc1.waitFor();
python线程卡死问题解决
1. top命令和日志方式判定卡死的位置python代码忽然卡死,日志不输出,通过如下方式可以确定线程确实已经死掉了:# top 命令top命令可以看到机器上所有线程的执行情况,%CPU和%MEM可以看出线程消耗的资源情况由于机器上线程数量太多,可能要查看的线程的信息在top命令当前屏幕上显示不出来可以通过如下方式查看在top命令下输入:u 接下来会提示输入用户名,就可以查看该用户所执行的所有线...
关于malloc函数死机的问题
撸主自打开了博客,还没动过笔,最近一直在琢磨着写点啥,
在shell中判断用户进程是否死掉
在shell中,有时要判断进程是否死掉,这个其实很好办,注意GREP的时候 过滤掉GREP本身的这个进程就可以了; #!/bin/sh SERVICE='httpd' if ps ax | grep -v grep | grep $SERVICE > /dev/null then     echo "进程正在运行" else     echo "进程不在运行"    fi
linux避免僵死进程方法总结
什么是僵死进程?
现在有一个进程挂起了,如何用工具查出原因
通过Javacore了解线程运行情况: Javacore,也可以称为“threaddump”或是“javadump”,它是 Java 提供的一种诊断特性,能够提供一份可读的当前运行的 JVM 中线程使用情况的快照。即在某个特定时刻,JVM 中有哪些线程在运行,每个线程执行到哪一个类,哪一个方法。 应用程序如果出现不可恢复的错误或是内存泄露,就会自动触发 Javacore 的生成。而为了性能问...
进程池出现卡死现象
问题描述:客户端发起请求后,服务器端一直处于阻塞状态。 通过ps命令获取到各个进程的进程号 attach 父进程id 查看bt堆栈 attach 子进程id 查看bt堆栈 发现父进程和子进程都阻塞在epoll_wait,子进程复制了父进程的进程空间包括epollfd,因此应该在每个子进程中初始化自己的epollfd
gdb attach调试进程
进入调试: ps命令查看进程id。  执行gdb attach pid即可调试正在运行的程序。  info proc显示当前程序可执行文件相关信息(name,pwd) 断点相关: b pkt.c:22(在pkt.c文件的22行打断点)  b eth_rcv (在函数eth_rcv入口打断点)  info b;显示当前所有断点;  d num;删除断点num;  n n
gdb动态挂运行程序并调试
/* * gdb动态挂运行程序并调试 * 编译程序: * gcc gdb_attach2.c -o gdb_attach2 -g * * 运行程序: * ./gdb_attach2 * * 查看程序进程代号: * ps ax | grep gdb_attach2 * 3973 pts/0 S+ 0:00 ./gdb_attach2 * * 启用gdb挂载程序
【Linux】后台进程的挂载与卸载
利用putty等shell软件打开一个Linux进程,如果我想我关闭掉putty等ssh shell终端之后,其继续运行,就会产生一种烦恼。比如像php的服务器等,如果你关闭一个ssh shell终端之后Sessions连接,这个Linux进行会同时被关闭,好像Linux被关机一样,客户端再也无法链接。Linux常常被作为服务器使用的,这样会令人非常懊恼。因此,我们需要利用到Linux的后台进程挂
系统HANG住分析工具及方法
如果系统HANG住了,这个时候做一个SYSTEM STATE DUMP,对于分析HANG的原因十分重要。但是很多情况下,系统HANG住了就无法登录,那么如何进行分析呢? METALINK DOC :359536.1提供了一些好的办法,在这里和大家共享: 支持的数据库版本:9.2.0.1-10.2 平台(部分是UNIX平台,部分适用于所有平台) 1、10G以前,使用DBX,G
Java程序挂掉的几种可能
今天花了一整天在跟踪一个问题,每次感觉已经快找到原因的时候发现现象又变了,我觉得从中吸取的教训可以给大家分享一下。 为了重现这个现象,我写了一个简单的例子。在本例中,先初始化了一个map,然后用一个无限循环将一些键值对插入到map里面: class Wrapper { public static void main(String args[]) throws Excepti
Linux 内核堆栈
所有进程(包括内核进程和普通进程)都有一个内核栈,在x86的32位机器上内核栈大小可以为4KB或8KB,这个可以在编译内核的时候配置。内核栈的用途有两个:1)当进程陷入内核态,即内核代表进程执行系统调用时,系统调用的参数就放在内核栈上,内核栈记录着进程的在内核中的调用链;2)在内核栈被配置成8KB大小的情况下,当中断服务程序中断当前进程时,它将使用当前被中断进程的内核栈。 对于用户进程,其既有用
Golang关于channel死锁情况的汇总以及解决方案
直接读取空channel的死锁 当一个channel中没有数据,而直接读取时,会发生死锁: func main() { q := make(chan int, 2) <-q } 错误提示: fatal error: all goroutines are asleep - deadlock! goroutine 1 [chan receive]: main.m...
LINUX httpd挂死解决
一天,实然WEB登不上了,于是想把HTTPD重启一下。 正在启动 httpd:httpd: Could not reliably determine the server's fully qualified domain name, using 59.50.43.82 for ServerName (98)Address already in use: make_sock: could not
嵌入式 如何定位死循环或高CPU使用率(linux)
如何定位死循环或高CPU使用率(linux)  确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep xxx 得到如下结果,其中线程2909使用了7.8%的CPU. 2907 2913 0.0 ./xxx 2907 290
挂起进程和进程的阻塞和挂起的区别
挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态.. 转自http://blog.sina.com.cn/s/blog_9fa53b5f0102vyuy.html 理解一:挂起是一种主动行为,因此
后台守护进程实现coredump
1.在/etc/profile中加入以下一行,这将允许生成coredump文件 ulimit-c unlimited 2. 在rc.local中加入以下一行,这将使程序崩溃时生成的coredump文件位于/data/coredump/目录下: echo "/bin/esunny.tap/core.%e.%p"> /proc/sys/kernel/core_patter
tim46 重建mq(处理进程挂死问题)
IBM Tivoli Identity Manager 重建mq(处理进程挂死问题)
Linux 获取并分析程序崩溃时的调用堆栈
http://blog.csdn.net/zsf8701/article/details/8812508 下面是一个小例子,说明了程序出现段错误时,如何打印程序的堆栈信息。 [cpp] view plain copy #include   #include   #include   #include       static void W
PPPoE认证方式中用户“挂死”现象分析及解决策略
近年来,随着宽带业务的蓬勃发展,原来用于圈地的包月制计费方式已经不能满足用户的要求,宽带应用管理计费系统的建设已经成为电信运营商迫切的需求。在这种情况下,各省地市电信运营商都将宽带应用管理计费平台的建设纳入了计划日程。笔者在参与运营商宽带应用管理计费系统建设过程中,发现普遍存在用户挂死现象,这需要引起运营商的注意,因为这个问题在运营商宽带应用管理计费系统建设中关系重大。2 PPPoE的
Linux服务器假死问题的产生及问题的解决
服务器的tomcat是开启的,但服务器连不上,此时服务器可能处在一种假死状态,可试着使用ps -ef |grep tomcat 命令查看tomcat进程号。如图: 从图片中可以看出,系统存在多个tomcat进程,导致系统崩掉。那么系统为什么会崩掉呢?这是因为,在项目第一次上传以后,后期有多次修改,涉及多次更新服务器的文件。每次更新时,把tomcat关掉,更新文件,启动tomcat,如此反复多次
ssh防止挂死的小技巧
1、ssh 使用加-o StrictHostKeyChecking=no参数 可规避这个问题 ssh -l pyncloud 10.137.47.18 ls The authenticity of host '10.137.47.18 (10.137.47.18)' can't be established. RSA key fingerprint is d7:76:64:fd:4a:d3:
如何检测、定位linux程序异常
linux下如何检测、定位程序异常
Linux下防止程序挂掉的shell脚本
Linux下防止程序挂掉的shell脚本   在一个实际项目中,很多时候需要保证程序或软件总是运行的,只有这样才能将相关损失降至最低;可是实际中由于软件自身质量和外部因素,很难保证程序持续运行的,此时就需要写一个程序或者脚本,用来监控目标程序,只要发现目标程序挂掉了该脚本就在此让其运行起来,从而保证软件的可靠性!   以下是本人写的一个shell脚本程序,其基本思想是用ps命令将所有进程信...
fork出的子进程和父进程 避免僵死进程
一、fork后的父子进程 由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的理由是:因为一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id。对子进程来说,之所以fork返回0给它,是因为它随时可以调用
java定时线程挂死问题
    这是博主写的第一篇博客,我想将我生活中的点点滴滴记录下来也是一件很有意义的事情。    最近博主在一个对接项目中遇到一个线程挂死问题,整整定位了一天才终于有了结论。    在我的对接项目中,需要使用到定时线程,也就是ScheduledExecutorService 类中的 scheduleAtFixedRate 和 scheduleWithFixedDelay 方法,下面介绍一下这两个方法...
如何监视一个进程,崩溃挂掉后自动重启
如何监视一个进程,崩溃挂掉后自动重启 2011-03-21 20:53 2239人阅读 评论(0) 收藏 举报 shell脚本服务器bashpathwindows 如何保证服务一直运行?如何保证即使服务挂掉了也能自动重启?在写服务程序时经常会碰到这样的问题。    shell脚本 下面的shell通过一个while-do循环,用ps -ef|grep 检查loader进
linux下如何定位CPU占用高的进程的问题点
一、Top+pstack+gdb的组合拳 闲言少述,先直接上操作实例,再做原理讲解。 1.1 用top命令找到最占CPU的进程 >top   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            22688 root      20   0 1842m 136m  13m S 1
如何调试应用程序崩溃和挂死
描述如何调试程序崩溃, 推荐了《软件调试》一书,概述对提高调试技术非常有用
linux驱动调试之修改系统时钟中断定位系统僵死问题
在first_drv.c中故意引入错误,在点灯时引入死循环,当应用程序调用write函数就会在while里面卡住。 重新编译驱动,并拷贝到网络文件系统中,装载驱动并把灯点亮,但是系统卡死了。 可以看测试程序的源代码,看涉及什么系统调用,找到对应的驱动程序并进行分析。 在系统空间可能会发生这样一种情况:系统僵死! 此时系统处于僵死状
相关热词 c#中dns类 c#合并的excel c# implicit c#怎么保留3个小数点 c# 串口通信、 网络调试助手c# c# 泛型比较大小 c#解压分卷问题 c#启动居中 c# 逻辑或运算符
立即提问