红帽Linux下WLS的异常高CPU占用率分析诊断
星期三, 03/09/2011 - 15:38 — 教主
作者:tdy218 [WebLogic中文爱好者高级会员]
之前看过一篇很不错的文档(WLS的异常高CPU占用率分析诊断),原作是英文版的,有幸看到,遗憾的是没保存,不过中文版翻译的也不错,在之前的dev2dev和OTN上都有那篇文档的中文版。
原文对5种常见的操作系统下WLS的异常高CPU占用率分析都有,SUN-Solaris、HP-UX、IBM-AIX、 MS-Windows上的都比较详细,唯独没看明白Linux平台上的分析,而且现在看来,那篇文章中关于查找占用CPU过高的内核进程号的地方一笔带过,周六、周末在家又认真的看了看Linux平台下的top和ps这两个常用命令的帮助,最终得已清晰,这里又加以补充,并作文档一篇跟大家共享,欢迎赐教。
一、进程、线程和轻量级进程(Lightweight,简称LWP)简述
进程是资源管理的最小单位,而线程又是程序执行的最小单位,一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(比如CPU时间片、虚拟内存、文件句柄、信号处理器等),线程可以共享这些资源。轻量级进程(LWP)是一种由内核支持的用户线程。
每一个进程有一个或多个LWP,而每个LWP都与一个特定的内核线程关联(这种线程模型就是LinuxThreads和NPTL(符合POSIX)共同所有的1:1[一对一]的模型),不过NPTL线程模型中,进程和线程的对应关系有点复杂(还有1:n,n:n的对应关系)。
关于LWP与内核线程的1:1的映射关系,下面从现代的Solaris OS(使用了NPTL线程模型)中截取的一段映射的实例来理解:
-----------------lwp# 1 / thread# 1--------------------
d22faaf5 lwp_cond_wait (8074d00, 8074ce8, 0, 0)
d1da51fc __1cCosHSolarisFEventEdown6M_v_ (8074ce8) + 58
………………………………
-----------------lwp# 2 / thread# 2--------------------
d22faaf5 lwp_cond_wait (8073c00, 8073be8, cf4dee68, 0)
………………………………
----------------- lwp# 26 / thread# 26 --------------------