查看某一进程信息(Process List、Select Process、Process Open Files、Process Memory Regions、Process Resources、Process Wait States、Process System Calls、Process Threads)
除了查看CPU、内存、IO三种重要的资源使用信息以外,查看某一进程信息是最为常用的功能,尤其对程序员来说,是排除故障、调试程序、性能优化非常有必要要了解的技能。
键入`g`命令可返回glance默认启动界面,即程序列表界面,在之前的文章中已经介绍,此处不再浪费段落。需要查看某一进程的信息,需要先找到对应的进程ID(PID),可通过ps命令查找(glance进程列表中查找资源占用较大的比较方便,资源占用较少的建议用ps命令查找)。
键入`s`命令(Select Process),按照提示输入PID,并回车,见下图:

默认界面为进程资源界面(Process Resources),见下图:

在此界面中,可通过`C`命令切换累计值、区段值;可通过`%`切换百分比值、绝对值。以下窗口只要提示了“C - cum/interval toggle”、“% - pct/absolute toggle”均适用。
程序资源界面可获得较为全面的信息,但分析某一特定问题,还需要参考以下界面。
键入`W`命令,可切换至进程等待状态界面(Process Wait States),见下图:

如果需要对程序进行性能优化,可详细观察本界面内容,分析消耗时间较长的等待并进行优化。等待原因(阻塞原因)有:
CACHE(等待Buffer Cache)
CDFS(等待CD-ROM文件系统或设备)
died(在统计间隔内进程已中断运行)
DISK(等待逻辑设备、磁盘级或裸设备级IO操作)
GRAPH(等待显卡设备或帧缓存)
INODE(等待访问或加锁i节点)
IO(等待本地磁盘、打印机、磁带、外设响应,设备级以上、Buffer Cache级以下)
IPC(等待进程或内核线程间通信事件)
JOBCL(等待跟踪恢复、DEBUG恢复或任务控制事件)
LAN(等待网络IO)
MESG(等待msgrcv、msgsnd)
new(在统计间隔中进程创建)
NFS(等待网络文件系统请求完成)
NONE(僵尸进程等待退出)
OTHER(进程早于mideamon启动且未恢复运行或等待原因未知)
PIPE(等待管道相关操作)
PRI(等待高优先级进程)
RPC(等待远程调用事件完成)
SEM(等待信号灯操作)
SLEEP(进程将自身置于休眠状态,如:sleep、wait、pause、sigpause、poll、sigsuspend 、select)
SOCKT(等待SOCKET操作)
STRMS(等待流设备)
SYSTM(等待系统资源或锁,系统资源包括:LVM、VFS、UFS、JFS、磁盘限额)
TERM(等待非流终端传输)
VM(等待虚拟内存操作完成,或释放内存,或创建、访问虚拟内存)
键入`M`命令可切换至进程使用的内存信息(Process Memory Regions)界面,见下图:

本界面可以查看内存使用情况,便于发现内存泄漏情况,但是对于分析内存泄漏原因没有太大意义。
进程归属内存类型有以下种类:
DATA(数据段)
LIBDAT(动态库数据段)
LIBTXT(动态库代码段)
STACK(堆栈段)
TEXT(代码段)
SHMEM(共享内存段)
GRAPH(帧缓存加锁页)
IOMAP(IO映射段)
MEMMAP(内存映射文件,包括mmap创建的内存和动态库使用的数据段、代码段)
NULLDR(空指针逆向引用共享页)
RSESTA(寄存堆栈引擎堆栈段)
SIGSTA(信号堆栈段)
UAREA(用户数据区)
UNKNWN(未知类型)
RSS/VSS概念:RSS实际使用物理内存、VSS虚拟耗用内存;由于内存管理策略原因,VSS会比RSS大一些。
键入`F`命令,可切换至进程打开的文件列表(Process Open Files)界面,见下图:

此界面展示进程打开的所有FD及对应的信息,可以用来定位进程只打开了文件并未关闭的情况,如果你看到成百上千个FD,那么进程很有可能存在这方面的隐患,这种隐患在HP-UX升级至11.31版本后,造成的威胁非常大,老版本HP-UX允许每个进程最多打开1024个文件,而11.31版本允许打开4096个文件,而系统中SOCKET端口数仅为65536个,如果某一个进程存在只打开没关闭的隐患,原来需要64个这样的进程才能使系统出现问题,而现在只需要16个,实际上系统用户建立对外连接的临时端口数一般只有16k个,隐患升级为故障的概率比想象的要大的多。
打开文件信息,lsof工具也有此功能。
键入`G`命令,可切换至进程所含线程(Process Threads)界面,见下图:

此界面展示了进程所含的线程及线程使用资源的信息。在性能优化的场景下,如果主要线程均为同一角色,需要观察各线程分担的处理任务是否平均,如:多线程版本的FTP Server。如果主要线程不是同一角色,有生产者/消费者模式,除了要分析同等级线程分担任务是否平均,还需要分析某一角色的线程是否存在瓶颈,如离线批价,主线程读取数据、解码时,任务处理线程等待,任务处理线程工作时,主线程等待,而主线程只有一个,任务线程有多个,那么主线程需要进行优化;在这个案例中,将主线程与任务线程交互模式改为异步,性能提升了100%。
线程资源、线程等待信息下文展示。
键入`L`命令,可切换至进程系统调用(Process System Calls)界面,见下图:

分析进程使用的系统调用,是对进程行为捕获而进行的统计,在程序执行的情况下,会经过一段时间累计,才会显示。性能优化的场景下,需要分析系统调用次数及单次系统调用耗时是否在正常的经验值之内,如过文件系统效率较低,那么open系统调用单次消耗时间数值就会比较大。如果需要实时捕获系统调用或者按照顺序捕获系统调用,建议使用tusc/truss命令。
在性能调优方面,HP-UX提供了另外一款强大的工具caliper,它可以可视化的查看耗时最多的函数,在性能调优方面更具参考价值。
在程序调试方面,gdb(GNU DEBUGER)更为强大、更加通用。
查看线程信息(Global Threads 、Process Threads、Thread Resource、Thread Wait)
键入`G`命令查看进程所含线程信息,上文已述,不再重复。
由于下列三个命令展示的信息与上文所述进程相关信息雷同,不详细说明。
键入`Z`命令查看线程列表信息,见下图:

键入`I`命令查看线程资源情况,见下图:

键入`J`命令查看线程等待情况,见下图:

查看全局系统调用信息(Global System Calls)
键入`Y`命令,可查看全局系统调用信息,见下图:

查看全局等待信息(Global Waits)
键入`B`命令,可查看全局等待信息,见下图:

查看系统表信息(System Table)
键入`t`命令,可查看系统表信息,见下图:

由于系统参数较多,此处展现的仅仅是主要的几个参数,如果需要查询更多信息,建议使用kmtune/kctune(需要root权限)、ulimit等命令查看。
查看NFS信息(NFS By System 、NFS Global Activity)
键入`n`命令,可查看按系统为维度的NFS信息,见下图:

键入`N`命令,可以查看NFS全局活动,见下图:

NFS是Network File System的缩写,即网络文件系统,可在主机间共享文件系统,方便跨主机访问,但由于效率较低,目前系统中已经没有NFS应用。
查看网络信息(Network By Interface)
键入`l`命令(字母L的小写),可查看按接口为维度的网络报告,见下图:

查看某一接口详细信息,键入`S`命令,按照提示输入索引号,等待5秒时间,将显示接口统计信息,如下图:

由于网络参数、信息较多,此处展现内容有限,参数情况建议使用ndd命令查看,使用信息建议使用netstat(参数-an、-sn)等命令查看,查看端口对应情况建议使用lsof工具。
查看交换空间信息(Swap Space)
键入`w`命令,将显示交换空间相关信息,如下图:

Swap Space即交换空间,可理解为当物理内存不够时,将一部分磁盘虚拟为内存使用。与之相对存在MemFS技术,为了提高效率,可将内存虚拟为文件系统使用。
查看应用列表信息(Application List)
键入`A`命令,可查看应用列表信息,如下图:

查看PRM组信息(PRM Group List)
键入`P`命令,可查看PRM组信息,如下图:

查看事物跟踪信息(Trans Tracker)
键入`T`命令,可查看食物跟踪信息,见下图:

查看告警信息(Alarm History)
键入`H`命令,可查看历史告警信息,如下图:
