调试方法综述

2019-05-27 19:28

调试方法综述

目录编号: 文件编号: 版本:1.4T 时间:2002-6-7 修订表

本表包含文档修订历史记录。下面的条目仅用于说明目的。

本文档应当在版本控制下存储,每个版本的简述应当输入版本控制系统。该简述在本段重复记录。修订不需要在文档中其它部分描述除非它们解释开发计划本身。

版本 1.0 1.1 2.0 2.1 2.1b 3.0 4.0 模块ID 模块名字 文档版本号 选用模板版本 主要作者 孙希 孙希 孙希 孙希 孙希 孙希 孙希 联系方式 4055 2152 2068 2068 2068 3125 3125 版本描述 征求意见 根据新输出信息进行修改完善 增加异常信息定位说明,征求意见 增加内存、mblk等管理模块的日志信息 根据贾洪雷指出的错误进行修改 根据4.x.x版本libsys相关信息修改 补充典型问题分析 补充mblk泄漏问题中mblk分配点定位方法 完成日期 2004-4-1 2005-6-27 2007-6-12 2007-6-18 2007-6-28 2011-6-30 2015-7-20 内容

1. 报文缓冲区 ................................................................................................................................. 3

1.1 mblk泄漏的定位 ..................................................................................................................... 3

1.1.1 阅读mblk泄漏日志 .............................................................................................. 3 1.1.2 查看mblk内容 ...................................................................................................... 3 1.1.3 较低版本中查看mblk内容 .................................................................................. 4

2. 内存 ............................................................................................................................................. 5

2.1 内存基本信息 ......................................................................................................................... 5 2.2 内存泄漏 ................................................................................................................................. 6 2.3 内存重复释放 ......................................................................................................................... 6 2.4 内存被非法改写 ..................................................................................................................... 7 2.5 VOS内存管理关键日志信息 ................................................................................................. 7

273935858.doc Version1.4T (错误!未指定书签。) Page 1 of 27

概要设计

2.5.1 严重报错日志 ........................................................................................................ 7 2.5.2 信息提示日志 ........................................................................................................ 8

3. 任务信息显示 ............................................................................................................................. 9

3.1 任务信息 ................................................................................................................................. 9 3.2 特定任务的堆栈 ................................................................................................................... 10

3.2.1 直接使用show task查看特定任务的堆栈 ........................................................ 10 3.2.2 早期版本使用show memory查看特定任务的堆栈 .......................................... 10 3.2.3 与任务有关的日志 .............................................................................................. 12

3.3 任务切换记录 ....................................................................................................................... 12 3.4 热键 ....................................................................................................................................... 14

4. 典型问题分析 ........................................................................................................................... 16

4.1 Console口不响应 .................................................................................................................. 16 4.2 CPU占用率高 ....................................................................................................................... 16 4.3 三层转发引起CPU忙 .......................................................................................................... 18 4.4 Ping不通 ................................................................................................................................ 19 4.5 Arp老化过快 ......................................................................................................................... 21

5. PPC异常处理 ............................................................................................................................ 22

5.1 PPC函数调用原理 ................................................................................................................ 22 5.2 异常信息分析 ....................................................................................................................... 22

5.2.1 异常信息组成 ...................................................................................................... 22 5.2.2 异常调用栈分析 .................................................................................................. 24 5.2.3 PPC背景资料 ....................................................................................................... 25

6. 使用bsa工具分析热键和异常 ................................................................................................ 27

图形列表

采用Caption段落风格的新图将自动加入下表。更新请按F9。 错误!未找到图形项目表。

273935858.doc Version1.4T (错误!未指定书签。) Page 2 of 27

概要设计

1. 报文缓冲区

系统中,所有收到的和要发送的报文都是使用mblk(mblk是message block的简称)在系统内部缓存的。使用show memory mblk命令查看系统mblk的使用情况。如下 Switch#show memory mblk

BUF0 BUF1 BUF2 BUF3 BUF4 BUF5 BUF6 BUF7 BUF8 size 0 104 256 600 1548 curr 3 1 1 0 0 max 9 5 4 2 2 total 1024 512 512 256 1024

size表示该类别mblk的大小;curr为该类别mblk的当前使用数量;max为自从系统启动以来该类别的mblk使用的最大数量;total表示该类别的mblk的最大数量。上面的命令执行例子表示,大小为0的mblk当前使用了3个,最多的时候使用了9个,系统总共有该大小的mblk 1024个,大小为104的mblk当前使用了1个,最多的时候使用了5个,系统总共有该大小的mblk 512个,大小为256的mblk当前使用了1个,最多的时候使用了4个,系统总共有该大小的mblk 512个,以此类推。如果某个类别的curr值与total值接近或相等,说明该类别的mblk当前几乎完全被占用,是一个不正常的信号,可能由于当时网络中报文比较多;如果某个类别的curr值长时间保持在较大的水平上(大于100)或只增不减,而网络中报文又不是很多,说明系统当时可能有问题,可以使用下面的其他手段进一步定位。

1.1 mblk泄漏的定位

1.1.1

阅读mblk泄漏日志

mblk泄漏日志为如下形式:%MBLK-4-OVERTIME: mblk ([hex1]) alloc at pc [hex2] tick [hex3], hold for 30 minutes, maybe leak。

其中hex1表示mblk地址,下面两节查看mblk内容时即以此地址为准。hex2表示mblk分配地址,可以通过3.2节“通过指令地址找到所在的函数”中介绍的方法确定该mblk在哪个函数中中申请。hex3为分配时间,该值供参考。上述三个值都是以16进制形式表示的。

1.1.2 查看mblk内容

当怀疑系统中出现了mblk泄漏时,可以使用show memory msgb查看当前未释放的mblk。例如: Switch#show memory msgb | include alloc

mblk(0x00df4718), alloc at 0x000ef88c datap(0x00e4794c), next 0x00000000 mblk(0x00df5748), alloc at 0x000e2a2c datap(0x00e13d48), next 0x00000000 mblk(0x00df78d0), alloc at 0x000e2a2c datap(0x00e14270), next 0x00000000 mblk(0x00df79f8), alloc at 0x000e2a2c datap(0x00e138d0), next 0x00000000 mblk(0x00e08f78), alloc at 0x0003a380 datap(0x00e1429c), next 0x00000000 mblk(0x00e090a0), alloc at 0x0003a308 datap(0x00e142c8), next 0x00000000 Switch#

其中alloc at后面的值为分配点指令地址。为了更容易定位问题,我们可以查看mblk的内容。我们选取其中一个mblk,查看它的内容。使用show memory msgb address命令: Switch(D)#show mem msgb 0x0f902920

273935858.doc Version1.4T (错误!未指定书签。) Page 3 of 27

概要设计

mblk(0x0f902920), alloc at 0x00537638 datap(0x0f96d3b4), next 0x00000000 mblk 0x0f902920 rptr = 0x0f96d34c wptr = 0x0f96d354 next = 0x00000000 prev = 0x00000000 cont = 0x00000000 last operate tick is 00000000

datab 0x0f96d3b4 base 0x0f96d34c limit 0x0f96d3b4 ref 1 data from base:

0f96d34c: 00000000 94040000 00e00f00 000900e0 0f96d35c: 0f000005 8100e001 c0c00004 00007fff 0f96d36c: fcfaf7fe 5c211201 01000000 0001f7fe 0f96d37c: 5c21107b 00676145 74686572 6e657431

通过查看mblk内容,我们知道这是一条日志信息,这有助于进一步缩小问题范围。

定位mblk泄漏类的问题,很重要的一点是要找到当前持有mblk的模块。Mblk显示的信息中,alloc at、rptr、wptr等信息均可用于定位当前持有mblk的模块:alloc at后面的地址就是分配或记录持有该mblk的指令地址,可以通过该指令地址反汇编找到持有mblk的C代码;有些模块记录或分配mblk后,后续仍然有大量代码处理该mblk,只知道记录或分配mblk的位置仍然难以判断mblk在后续哪个位置中持有或泄漏,这时候可以通过rptr、wptr等辅助判断,其中rptr表示当前程序处理到mblk中哪个位置,一般协议在处理报文时,会随着处理过程将rptr逐渐后移,根据当前rptr指向位置在报文的相对位置也可以推断当前mblk处理的进度,比如说:当前rptr指向以太网报文的mac头部,可以推断为当前mblk正在被物理层或链路层处理;如果指向ip头部,可以推断为网络层;如果指向tcp/udp头部则可以推断为传输层/socket处理,等等。

1.1.3 较低版本中查看mblk内容

当系统模块libsys版本低于1.3.0时,没有show memory msgb命令,此时可以通过show memory命令查看mblk内容。仍然以上节mblk地址0x00df5748为例: 首先使用show memory 0x00df5748显示mblk控制块内容: Switch#show memory 0x00df5748 0x30

00df5740: 0232B03B 00000000 00000000 00000000 .2.;............ 00df5750: 00000000 008C5AB4 008C5B02 00E13D48 ......Z...[...=H 00df5760: 00000000 C0A8D562 C0A8D55B 04280017 .......b...[.(..

mblk地址偏移0x0c和0x10分别是rptr、wptr地址;0x14是对应的datab的地址,即0xe13d48,继续使用show memory命令显示该地址: Switch#show mem 0x00E13D48 0x20

00e13d40: 0232B03B 00000000 00E092F0 008C5AB4 .2.;..........Z. 00e13d50: 008C5B02 01010000 000E27F8 008C5AB4 ..[.......'...Z.

datab地址偏移0x04是base地址,即0x8c5ab4,我们只要再使用show memory 0x8c5ab4即可得到mblk的内容:

Switch#show memory 0x008C5AB4

008c5ab0: 00000000 4A616E20 20352030 363A3039 ....Jan 5 06:09 008c5ac0: 3A323120 5359532D 362D434F 4E464947 :21 SYS-6-CONFIG 008c5ad0: 3A20436F 6E666967 75726564 2066726F : Configured fro 008c5ae0: 6D207674 79203120 62792073 756E7869 m vty 1 by sunxi (下略)

273935858.doc Version1.4T (错误!未指定书签。) Page 4 of 27

概要设计

2. 内存

2.1 内存基本信息

系统内存采用多级内存管理方式。系统使用内存池方式管理小块的分配和释放,内存池中的空闲块是固定尺寸的,不会做空闲块合并操作;系统使用堆方式管理大块内存的分配和释放,堆中的空闲块会做合并操作。“小块”的界限依机型而定,一般是512或2048。 使用show memory region命令可以看出当前内存的使用情况 Switch#show memory region Level 1 Heap:

max block 3979384, free 4946280 bytes, total alloc 2321 blocks(231016632 bytes) Level 2 Heap:

total bytes: 124716456, total blocks 106,

current free bytes: 98285112, max block 81632496

Memory utilization 47%(Image 7%, Region 17%, Heap 38%/87%, Msg buffer 0%/3%) [ 0]Size: 32 Current:22782 Max: 22784 Total: 65536 [ 1]Size: 64 Current:19052 Max: 19052 Total: 65536 [ 2]Size: 128 Current:13489 Max: 13489 Total: 65536 +[ 3]Size: 256 Current:25210 Max: 25211 Total: 37933 [ 4]Size: 512 Current: 2272 Max: 2273 Total: 8192 +[ 5]Size: 1024 Current: 1189 Max: 1195 Total: 7709 +[ 6]Size: 2048 Current: 3142 Max: 3143 Total: 4091 Show memory region的输出分为四个部分。

第一部分Level 1 Heap表示vxworks堆的使用情况,max block表示当前堆中的最大块,free表示当前堆中总共空闲内存;total alloc表示当前已经从level 1 heap分配的总块数和字节数。 第二部分Level 2 Heap表示libsys管理堆的使用情况,max block表示当前堆中的最大块,current free表示当前堆中总共空闲内存;total bytes表示当前堆中总内存。需要说明,有些机型不使用Level 2 Heap,这时会显示“No general purpose heap avaliable.”。

第三部分是系统内存占用率情况,其中Memory utilization是总内存占用率,括号内是分项内存使用情况:其中

Image表示映像占内存总量百分比;

Region表示内存池总尺寸占内存总量百分比; Heap表示Level 1/Level 2 Heap,/号前后的值分别表示堆当前使用量和堆总尺寸占内存总量的百分比;需要说明的是Region是由从Heap中分配得到的巨型内存块划分的,因此Heap当前使用量的百分比包含了Region的百分比;

Msg buffer表示mblk,/号前后的含义与堆相同; 一般来说Image+Heap+Msg buffer的比率接近100%。

第四部分是系统内存池使用情况。其中size表示内存块的尺寸,current表示当前使用的数量,max表示自从系统启动后最大用量,total表示总共数量。目前系统采用扩展内存池的策略,即系统启动时为每个尺寸生成基本内存池,当某个尺寸的基本内存池内的块用光后,会为该尺寸生成扩展内存池,这时会在该尺寸前面显示+号;系统为每个尺寸最多支持32个内存池。上例中系统为尺寸256、1024、2048生成了扩展池,这时可以通过命令show memory region detail来查看系统扩展内存池的使用情况:

273935858.doc Version1.4T (错误!未指定书签。) Page 5 of 27


调试方法综述.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中考化学专题突破13-15(化学计算 化学与能源和资源的利用 化

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: