linux下查找运行程序中的死循环

早上到公司后发现服务器的CPU占用率竟然达到百分之百了. 猜测是触发了问题代码进入死循环了.

用PS命令查看了一下情况. 发现罪魁祸首是某个游戏服务器程序. CPU占用率超高.

用 top -H -p PID 查看问题到底出现在那个线程, 记录下threadID.

用 gdb ProcessName PID 附近到目标进程.

用 info threads 列出线程状态.

用 thread Num. 查看问题线程信息

用 bt 查看堆栈调用顺利找到问题代码位置.

最后记得 gdb dettach 分离.

时间: 2024-11-06 19:33:13

linux下查找运行程序中的死循环的相关文章

linux下查找进程及终止进程操作的相关命令

使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号.首先,我们需要使用linux下另外一个命令ps查找与进程相关的PID号:ps aux | grep program_filter_word1)ps a 显示现行终端机下的所有程序,包括其他用户的程序.2)ps -A 显示所有程序.3)ps c 列出程序时,显示

两种在linux下创建应用程序快捷方式的方法

两种在linux下创建应用程序快捷方式的方法: A. 在桌面上创建快捷方式 B. 在应用程序菜单中添加快捷方式 在桌面上创建快捷方式 这是最简单的一种方法,在桌面上单击鼠标右键,会有一个“创建启动器”栏.这里我以为mplayer创建快捷方式为例说明: 名称-mplayer(或者你喜欢的任何名称,这个名称会出现在快捷图标的 下方) 命令-/usr/bin/gmplayer(这个是mplayer的gui应用程序的执行文件,跟 安装路径相关,可以通过which gmplayer找到) 图标-一般应用程

Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)

在写程序的时候,经常会遇到一些问题,比如某些变量计算结果不是我们预期的那样,这时我们需要对程序进行调试.本文主要介绍调试C/C++在Linux操作系统下主要的调试工具. 在Linux下写程序,C/C++主要的编译器有GCC/G++,ICC等,像我等穷码农,最喜欢GCC了,很大原因是他免费!所以,我们以GCC/G++为例介绍主要的调试工具. 分以下几个内容介绍: 1.调试之前的工作 2.选择调试工具 3.调试步骤 点我,请帮我投一票! 调试之前的工作 编译器在编译阶段需要产生可供调试的代码,才能被

如何使用加多宝(jdb)在linux下调试Java程序

毕业时写了一段时间的C,那时候调试使用gdb,后来转了java,当时就想java程序怎么调试,找了一下,果然,那就是jdk自带的jdb windows里是这样的 Linux下是这样的 一般我在linux下来调试Java程序 好,那么,问题来了,这玩意怎么用?有好几种玩法 第一种玩法:以经典的HelloWorld为例,先写一个Java程序,如下: 我们把编译好的类上传到linux下,如下所示 务必强调一下:类所在的包名的层次结构也要在linux下体现出来 下面我们来玩起来,在linux下操作如下

linux下DHCP在企业网中的应用(DHCP中继)

linux下DHCP在企业网中的应用 一.环境要求 一台虚拟机 一个linux操作系统 两个windows操作系统 二.实验要求 企业网中一般有多个vlan,vlan之间需要相互通信,需要一个DHCP server去给其他vlan的主机动态分配ip地址. 三.实验拓扑及地址规划 拓扑图及地址规划如图所示: 四.实验步骤 ① 配置DHCP服务器,编辑dhcp的配置文件 route -n查看路由信息 vim /etc/dhcp/dhcpd.conf service dhcpd configtest

Linux下后台运行任务

http://www.cnblogs.com/xianghang123/archive/2011/08/02/2125511.html http://blog.csdn.net/u012700515/article/details/27113313 http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 将一个正在运行的任务放到后台,并且关机后任能运行 ctrl+z jobs #查找jobs的id disown -h %num #num为jo

linux 下查找文件的路径

必须提醒你的是:locate命令非常快,其实 locate 命令他查询的是系统中的一个数据库.这个数据库通常会在一定时间更新.这样确实很方便,但是:如果你新建一个文件 $ touch file_for_test然后你输入$ locate file_for_test这样你是不会找到这个文件的.这时你必须手动更新这个数据库,进入管理员权限($ sudo su - 或者其它之类)然后键入# updatedb 当你再入输入$ locate file_for_test 时你就能发现能找到它了~~~~ 祝好

vim linux下查找显示^M并且删除

linux下 ^M的输入方法是ctrl+v然后再ctrl+m vim下在文件中显示^M:e ++ff=unix % 在文件中删除^M:%s/^M$//g 在linux下查找^Mfind ./ | xargs grep '^M' -l -s 在linux下删除^Mfind ./ | xargs grep '^M' -l -s | xargs dos2unix

linux下编译运行TIGL Viewer步骤

linux下编译运行TIGL Viewer步骤(仅为了正确编译安装的话直接跳到步骤3) 1. linux发行版选择:由于linux发行版众多,不同版本包含的库版本可能存在差别,因此需要选择正确的版本.由于在openCascade推荐使用的发行版列表中,对Ubuntu比较熟悉,所以选用ubuntu.(其他发行版的包安装方式与ubuntu有较大差别,不熟悉的话会比较麻烦) 2. ubuntu版本选择:虽然openCascade推荐使用ubuntu13.04版本,但因为13.04非长期支持版,所以使用