通常我们通过
ps aux | grep [pthread]
查看特定进程[pthread]的状态信息;
在Linux中,可能状态如下:
D 不可中断 Uninterruptible sleep (usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
< 高优先级
N 低优先级
L 有些页被锁进内存
s 包含子进程
+ 位于后台的进程组
l 多线程,克隆线程
例如:
USERPID%CPU%MEMVSZRSS TTY STAT START TIME COMMAND
tss 20629 1.1 0.0 94732 1660 pts/1 Sl+ 18:03 0:08 /usr/local/sbin/tcsd -f
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
Linux下查看某个进程的线程数量
1.根据进程号进行查询:
# pstree -p 进程号
# top -Hp 进程号
2.根据进程名字进行查询:
# pstree -p `ps -e | grep server | awk "{print $1}"`
# pstree -p `ps -e | grep server | awk "{print $1}"` | wc -l
Linux死锁问题
使用 pstack 和 gdb 工具对死锁程序进行分析
pstack 进程号 查看各个线程的堆栈信息
当进程吊死的时候,多次使用,死锁的线程将一直处于等锁的状态,确定某些线程一直没有变化,一直处于等锁的状态。那么这些线程很可能是死锁了。如果怀疑哪些线程发生死锁了,可以采用gdb 进一步attach线程并进行分析。
执行命令 gdb attach 9368(进程号) 进入gdb调试终端
运行:(gdb) info thread
获取锁和释放锁的位置前后分别添加日志输出,从而判断释放是死锁的问题;