- 浏览: 467920 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
alvin198761:
renzhengzhi 写道我参与过12306余票查询系统的开 ...
别给12306 辩解了 -
renzhengzhi:
我参与过12306余票查询系统的开发,用户请求被前面3层缓存拦 ...
别给12306 辩解了 -
renzhengzhi:
写的很好。
JAVA线程dump的分析 -
liyonghui160com:
说好的附件呢
分布式服务框架 Zookeeper -- 管理分布式环境中的数据 -
ghpaas:
orbeon作为xforms标准的实现,不论其设计器还是运行时 ...
XForms 1.1 中文翻译—第1章 关于XForms标准
From developerWokrs 客户报告的 bug 不一定能够在开发环境中轻松地重现。应用程序崩溃、挂起和性能低下都可能无法重现。在这种情况下,需要可以在客户环境中使用的调试工具。本文讨论一种调试方法和一些常见的问题领域,以及 AIX 上可用的工具。注意,本文不讨论性能调试。 当环境中出现问题时,我们首先要查明操作系统版本和使用的硬件。这个步骤很重要,因为需要确认是否有可以进行调试的可重现环境,如果没有,就需要重新创建相同的环境。 通过运行 以下命令显示 AIX 的版本、发布版和维护级别。 如果一个程序终止了,根据终止类型,可能会生成核心文件(core file)。核心文件 是终止的进程的映像,即当进程崩溃时内存中所有数据的转储。当发生以下事件时会生成核心文件: 在应用程序崩溃时,不一定会生成核心文件,核心文件还可能不完整。在这种情况下,可能需要启用核心文件转储或增加核心文件大小。 这个命令显示 shell 核心文件大小的当前值(软限制),这个值应用于从这个 shell 启动的所有进程。如果这个值是零,那么执行以下命令把它提高到最大值(硬限制 ): 编辑 /etc/security/limits 文件,修改软和硬核心大小的 在 /etc/profile 中添加以下设置以设置软限制: 可以设置的属性: 使用 PAX 文件在 /tmp/snapcore 目录中生成。 如果创建了核心文件,错误日志记录进程应该会记录一个错误日志项,这个进程常常在发生第一个软件故障时启动。 可以使用 对导致核心转储的二进制可执行文件运行 列出 有用的属性: 在 AIX 上有许多用于检查应用程序错误、挂起和崩溃的工具。下面讨论其中几个工具。 可以使用以下工具检查进程或核心。所有命令都以 有用的选项: 不允许使用 要想使用 在典型的数据库系统环境或执行大量文件处理的应用程序中,查明进程拥有的文件的名称对于调试问题可能很重要。 如果客户机进程状态字段长时间处于 运行 运行 查看 time 字段。如果它长时间不变,那么很可能是发生了死锁或挂起。 这个值会显著影响 AIX 上一些与内存相关的问题。 在 32 位系统上,默认的地址空间模型是对于用户和堆栈数据使用单一数据段,最大总大小接近 256 MB。如果应用程序需要更多内存,可以通过设置 关于大程序支持的更多信息参见 AIX 文档。 还可以使用 对于大地址空间模型下的 32 位程序,允许的最大值是 0x80000000;对于非常大的地址空间模型,是 0xD0000000。对于 64 位程序,可以指定任何值,但是数据区域不能超过 0x06FFFFFFFFFFFFF8。 在默认情况下,内存和分页空间采用晚分配。 在默认情况下,当调用 使用 本文讨论了可以在客户环境中帮助调试问题的一些工具。还讨论了一种调试方法和一些常见的问题领域,以及可用的 AIX 工具。prtconf
命令查看总体系统配置。
清单 1. 总体系统配置
#prtconf
System Model: IBM,8204-E8A
Machine Serial Number: 06381D2
Processor Type: PowerPC_POWER6
Number Of Processors: 2
Processor Clock Speed: 4204 MHz
CPU Type: 64-bit
Kernel Type: 64-bit
LPAR Info: 2 ibmmachine
Memory Size: 9344 MB
Good Memory Size: 9344 MB
Platform Firmware level: Not Available
Firmware Version: IBM,EL320_076
Console Login: enable
Auto Restart: true
Full Core: false
清单 2. AIX 的版本、发布版和维护级别
# instfix -i|grep AIX_ML
All filesets for 5.3.0.0_AIX_ML were found.
All filesets for 5300-01_AIX_ML were found.
All filesets for 5300-02_AIX_ML were found.
All filesets for 5300-03_AIX_ML were found.
All filesets for 5300-04_AIX_ML were found.
All filesets for 5300-05_AIX_ML were found.
All filesets for 5300-06_AIX_ML were found.
All filesets for 5300-07_AIX_ML were found.
# lslpp -h bos.rte
Fileset Level Action Status Date Time
----------------------------------------------------------------------------
Path: /usr/lib/objrepos
bos.rte
5.3.0.50 COMMIT COMPLETE 10/17/07 16:34:57
5.3.0.60 COMMIT COMPLETE 03/11/08 16:08:59
5.3.7.0 COMMIT COMPLETE 03/12/08 11:28:55
# oslevel -r
5300-07
清单 3. CPU 和内核类型
# bootinfo -K
64
# bootinfo -y
64
清单 4. 已安装的软件产品
# lslpp -lc|grep -i perl
/usr/lib/objrepos:perl.libext:2.1.0.10::COMMITTED:I:Perl Library Extensions :
/usr/lib/objrepos:perl.rte:5.8.2.71::COMMITTED:F:Perl Version 5 Runtime Environment:
#uptime
05:16PM up 2 days, 1:36, 4 users, load average: 1.95, 1.90, 1.80
SIGQUIT
— 退出SIGILL
— 无效的指令SIGTRAP
— 跟踪捕捉SIGIOT
— 结束进程SIGEMT
— EMT 指令SIGFPE
— 算术异常、整数被零除或浮点异常SIGBUS
— 规格异常SIGSEGV
— 分割违例SIGSYS
— 参数对于子例程无效
#ulimit -c
#ulimit -c <val>
。
#ulimit -Hc
<value>
:
core = <value>
core_hard = <value>
#ulimit -S -c <value> > /dev/null 2>&1
chuser attribute=value username
core
— 软限制的大小core_hard
— 硬限制的大小core_path
— 核心文件目录路径启用/禁用core_pathname
— 生成核心文件的目录chcore
命令修改设置,使用 lscore
查看当前的核心设置。
chdev -l sys0 -a fullcore=true
gencore
实用程序为指定的每个进程创建核心映像。然后可以通过 dbx
等调试器使用核心映像。snapcore
命令收集核心文件、程序和程序使用的库,然后把它们压缩为一个 PAX 文件。可以把这个文件传输到调试环境中,使用它判断和解决应用程序的问题。
snapcore -r<core file name> <program name>
清单 5. 获取错误日志
# errpt -a
LABEL: CORE_DUMP
IDENTIFIER: C69F5C9B
Date/Time: Fri Nov 13 17:04:55 IST 2009
Sequence Number: 235168
Machine Id: 000381D2D900
Node Id: ibmmachine
Class: S
Type: PERM
Resource Name: SYSPROC
Description
SOFTWARE PROGRAM ABNORMALLY TERMINATED
Probable Causes
SOFTWARE PROGRAM
User Causes
USER GENERATED SIGNAL
Recommended Actions
CORRECT THEN RETRY
Failure Causes
SOFTWARE PROGRAM
Recommended Actions
RERUN THE APPLICATION PROGRAM
IF PROBLEM PERSISTS THEN DO THE FOLLOWING
CONTACT APPROPRIATE SERVICE REPRESENTATIVE
Detail Data
SIGNAL NUMBER
11
USER'S PROCESS ID:
765972
FILE SYSTEM SERIAL NUMBER
8
INODE NUMBER
352516
CORE FILE NAME
/opt/IBM/InformationServer/Server/Projects/sample1/core
PROGRAM NAME
dsapi_slave
PROGRAM_NAME
下面指出生成核心的程序。errpt
命令显示过去 24 小时内所有错误的详细报告:
# date
Fri Nov 13 18:18:33 IST 2009
# errpt -a -s 1112181809
清单 6. 创建核心的应用程序
#lquerypv -h core 500 64
The executable is located between the pipes on the right hand side of the output and in
the case below, it is uvsh.
00000500 00000001 00000000 00000043 00000003 |...........C....|
00000510 F1000100 3361BFF8 00000000 00000000 |....3a..........|
00000520 00120000 75767368 00000000 00000000 |....uvsh........|
00000530 00000000 00000000 00000000 00000000 |................|
00000540 00000000 00000000 00000000 5A9E9590 |............Z...|
00000550 00000000 00000016 00000000 00000BF1 |................|
00000560 00000000 00000000 00000000 00001019 |................|
dbx
。这会显示出问题的调用。
#dbx exe core
sys0
lsattr -El sys0
autorestart
— 在崩溃之后自动地重新引导系统fullcore
— 启用/禁用完整的核心转储maxuproc
— 每个用户允许的最大进程数量
chdev -l sys0 -a attribute=value
proc<cmd>
开头。在生产环境中检查进程时应该特别小心,因为这些工具在进行检查时实际上会停止进程。
procstack
输出进程的堆栈跟踪。procflags
输出进程的未处理信号和持有的信号。procsig
输出进程的信号操作和处理程序。procfiles
报告每个进程中所有打开的文件的 fstat
和 fcntl
信息。procwdx
输出分别用于停止和重新运行进程的 procstop
和 procrun
的当前工作目录。proctree
输出包含指定进程 ID (PID) 或用户的进程树,子进程相对于父进程缩进显示。truss
生成跟踪信息,包括进程执行的系统调用、它收到的信号和它导致的机器错误。在默认情况下,不跟踪用户级函数。可以使用truss -u '*' -p <pid>
启用对所有用户级函数的跟踪。
-p
提供 PID。-u [!] [LibraryName [...]::[!]FunctionName [...] ]
跟踪从用户库动态装载的用户级函数。-a
显示每个 exec()
系统调用中传递的参数字符串。-f
跟踪通过 fork()
或 vfork()
创建的所有子进程,跟踪输出中包括它们的信号、错误和系统调用。-m [!]Fault
跟踪进程中列出的机器错误(见 sys/procfs.h 头文件)。-s [!] Signal
允许列出要跟踪或排除的信号。truss
跟踪通过 SUID 作为另一个用户运行的命令,因为系统认为它不属于您使用的用户。系统会显示以下错误:
# truss -deaf -o truss.out program
truss: 0915-015 Cannot create subject process.
wait4all: i: 0, status: 32512, pid: 643282, created: 0
truss
跟踪这种命令,应该:
ps
命令查明 shell 的 PID。truss
跟踪这个 shell 会话。truss
。可以通过查看 truss.out 文件检查错误。
procfiles -n <pid>
inode
号,那么:
ncheck
根据 inode
号生成路径名
ncheck - i <inode>
grep
搜索 inode
ls -ail |grep <inode>
netstat -a |grep <process name>
FIN_WAIT
状态,或服务器进程状态字段长时间处于 CLOSE_WAIT
,进程就是发生了挂起 或 死锁。netstat -Aan
,其中的 -A 显示与套接字相关联的任何协议控制块的地址。
清单 7. 套接字到进程 ID 映射
#netstat -Ana|grep 31538
f10006000041c398 tcp4 0 0 *.31538 *.* LISTEN
f10006000677d398 tcp4 0 0 9.122.87.107.31538 9.122.87.51.2500 ESTABLISHED
f100060006affb98 tcp4 0 0 9.122.87.107.31538 9.122.87.51.2511 ESTABLISHED
f1000600066d1398 tcp4 0 0 9.122.87.107.31538 9.122.87.51.2521 ESTABLISHED
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
#ps -fp <pid>
#ps -mp <pid> -o THREAD
LDR_CNTRL
环境变量控制进程可以使用的数据段数量。下面的示例定义一个额外的数据段:
export LDR_CNTRL=MAXDATA=0x10000000
start the process
unset LDR_CNTRL
MAXDATA
控制 malloc
分配的内存量,使用 LDR_CNTRL=MAXDATA=0xN0000000
修改MAXDATA
(其中的 N 等于数据段数量)。MAXDATA
使用较大或非常大的地址空间模型。ldedit
命令在可执行程序中修改 MAXDATA
设置。
ldedit -bmaxdata:0x80000000 sampleexec
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 ]
删除共享内存段。
发表评论
-
Storix简介
2012-03-27 12:10 984简介 Storix ... -
asa阿萨
2012-03-25 23:58 1阿迪撒旦撒旦 -
适配器布局
2010-10-28 11:23 928网络性能取决于所选的硬件,如机器中的适配器类型和适配器布局 ... -
工作负载管理诊断
2010-07-13 23:15 799工作负载管理仅指评估工作负载的每个组成部分的优先级。 ... -
与磁盘或内存相关的问题
2010-07-13 23:12 850与磁盘或内存相关的问题 正如大部分实内存可用来缓冲文 ... -
在 AIX V5.3 中使用 MALLOCDEBUG 隔离并解决内存泄漏
2010-07-01 15:02 1213引言 在编写应用程序 ... -
分析AIX上的native内存泄露
2010-07-01 14:59 1430Running native profiling on ... -
AIX性能——预处理器和编译器利用
2010-06-27 20:37 1026在指令重新整理中,有几个优化级别给予编译器以不同程度的自由 ... -
AXI性能——系统调整
2010-06-27 20:37 851在有效实现应用程序后,系统总体性能的进一步提高就成了系统调 ... -
AIX性能调整——当前的机器指令
2010-06-27 20:35 812如果未出现 TLB 或高速缓存未命中的情况,绝大多数机器指令都 ... -
可分派线程
2010-06-27 20:33 801当某个线程可分派但不在运行时,它不能完成任何有用的事情。更糟的 ... -
等待线程
2010-06-27 20:31 861无论何时只要执行的程序发出不能立刻满足的请求,例如同步 I ... -
AXI性能调整——中断处理程序
2010-06-27 20:30 988通知操作系统发生了外部事件的机制是中断当前运行线程并将控制 ... -
AIX性能调整——可执行程序
2010-06-27 20:28 880当请求运行某个程序 ... -
AIX性能调整——硬件层次结构
2010-06-27 20:26 985通常,从一个硬件级别移动到另一级别所需要的时间主要由较低级 ... -
AIX性能调整——程序执行模型
2010-06-27 20:21 850为了清楚地检查工作负载的性能特征,需要有一个动态而非静态的 ... -
AIX4.3 TL12安装指南
2010-06-18 11:01 1127Installation instructions Te ... -
系统工作负载
2010-05-16 22:40 776系统工作负载的完整准确的定义对于预测或理解它的性能是很关键 ... -
列出可用的软件产品(lslpp 命令)
2010-05-13 09:16 1134要显示关于系统上可用软件产品的信息,请使用 lslpp 命 ... -
列出可用的字体(font 命令)
2010-05-13 09:14 1110要显示可用于显示器的字体列表,请使用 lsfont 命令。 ...
相关推荐
aix 优化及维护案例--来自aixchina.net 1 系统优化篇 3 1.1 AIX 5L 内存性能优化之AIX Version 5.3 中内存的概述以及内存参数的优化 3 1.2 AIX 5L 内存性能优化之使用 ps、sar、...5 AIX调试工具的介绍与使用详解 183
aix程序调试工具。 详细使用说明,例子。 适合初学者。
常用代码调试工具,单步调试,帮助你尽快定位代码缺陷。
curl工具,可以方便调试url,简单易用的url调试工具
关于本书 本书为应用程序开发者提供关于编写 AIX® 操作...其中的主题包括输入和输出处理、curse、文件系统和目录、lex 和 yacc、逻辑卷编程、共享库、大型程序支持、打包、跟踪工具以及系统管理接口工具(SMIT)。
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
1.5 AIX系统中的DOS工具 9 1.6 AIX系统的用户界面 10 1.7 联机帮助 10 1.8 AIX的几个重要技术 11 1.8.1 LVM-Logical Volume Manager 11 1.8.2 JFS-Journal File System 11 1.8.3 系统管理接口工具(smit) 11 第二章...
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
AIX支持多种编程语言和工具 ● AIX提供 shell 语言● 可选的有许可证控制的编程语言:C++ C Fortran Pascal 等● 编程工具---编辑器---源代码控制系统(SCCS)---调试工具---代码检查 (lint) 系统管理 AIX系统除了提供...
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法
这是本人的针对aix下面用C语言编写程序的一个教程。主要面对有一定的编程经验,但unix不是很熟悉,或者想进一步深入了解C语言的人。...调试工具dbx的使用 其他工具ldd,nm,dump等的使用 通信程序报文通常处理方法