WEB开发网
开发学院操作系统Linux/Unix AIX 调试工具 阅读

AIX 调试工具

 2010-03-25 00:00:00 来源:WEB开发网   
核心提示: 运行 kdb 并对感兴趣的套接字的地址执行 sockinfo,清单 8. 运行 kdb(0)>sockinfof10006000677d398tcpcbTCPCB(@F10006000677D398)seg_next......@F10006000677D398seg_prev......

运行 kdb 并对感兴趣的套接字的地址执行 sockinfo。

清单 8. 运行 kdb

(0)> sockinfo f10006000677d398 tcpcb 
---- TCPCB ----(@ F10006000677D398)---- 
  seg_next......@F10006000677D398 seg_prev......@F10006000677D398 
  t_softerror... 00000000 t_state....... 00000004 (ESTABLISHED) 
  t_timer....... 00000000 (TCPT_REXMT) 
.... 
proc/fd: fd: 4 
       SLOT NAME   STATE   PID  PPID     ADSPACE CL #THS 
 
pvproc+01B000 108*dsapi_sl ACTIVE 006C0D0 00B206C 000000002E707590  0 0001 

根据 CPU 使用量检查挂起

#ps -fp <pid> 

查看 time 字段。如果它长时间不变,那么很可能是发生了死锁或挂起。

#ps -mp <pid> -o THREAD 

检查进程内存的工具

数据段设置

LDR_CNTRL 环境变量控制进程可以使用的数据段数量。下面的示例定义一个额外的数据段:

export LDR_CNTRL=MAXDATA=0x10000000 
start the process 
unset LDR_CNTRL 

这个值会显著影响 AIX 上一些与内存相关的问题。MAXDATA 控制 malloc 分配的内存量,使用 LDR_CNTRL=MAXDATA=0xN0000000 修改 MAXDATA(其中的 N 等于数据段数量)。

在 32 位系统上,默认的地址空间模型是对于用户和堆栈数据使用单一数据段,最大总大小接近 256 MB。如果应用程序需要更多内存,可以通过设置 MAXDATA 使用较大或非常大的地址空间模型。

关于大程序支持的更多信息参见 AIX 文档。

还可以使用 ldedit 命令在可执行程序中修改 MAXDATA 设置。

ldedit -bmaxdata:0x80000000 sampleexec 

对于大地址空间模型下的 32 位程序,允许的最大值是 0x80000000;对于非常大的地址空间模型,是 0xD0000000。对于 64 位程序,可以指定任何值,但是数据区域不能超过 0x06FFFFFFFFFFFFF8。

进程的内存使用量

ps 命令报告 malloc 分配的内存,但是不包含 mmap 分配的内存。svmon 报告完整的进程内存使用情况。

#svmon -P <pid> -m -r -i <interval> 

晚分配和早分配

在默认情况下,内存和分页空间采用晚分配。PSALLOC 环境变量控制分配机制。

#export PSALLOC=early 

在默认情况下,当调用 malloc 时并不分配分页空间,而是到引用它时才分配。malloc 可能会过量分配内存,其他进程可能在当前进程之前获得资源,这会导致错误。把 PSALLOC 设置为 “early” 可以保证进程获得内存分配请求所请求的分页空间。

共享内存设置

使用 #ipcs -mop 输出关于活跃共享内存段的信息。使用 ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] 删除共享内存段。

结束语

本文讨论了可以在客户环境中帮助调试问题的一些工具。还讨论了一种调试方法和一些常见的问题领域,以及可用的 AIX 工具。

上一页  3 4 5 6 7 8 

Tags:AIX 调试 工具

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接