代码改变世界

Solaris系统进程的查看和管理

2006-08-19 21:01  Jeff  阅读(2841)  评论(0编辑  收藏  举报
1、什么是进程?
进程:可并发执行的程序在一定数据集合上的运行过程。进程即是资源分配的基本单位,也是调度和分派的基本单位。

2、UNIX操作系统进程调度算法:
多级反馈调度队列算法。

3、进程状态:创建、初始、就绪(活动、静止)、执行、阻塞(活动、静止)、结束。

4、进程监控命令:
ps 命令和进程工具/usr/proc/bin下的工具级。
可以将ps和grep命令组合使用来搜索特定的信息。
5、/usr/proc/bin的命令介绍:
pstop 停止进程
prun pid 重新启动进程
ptime pid 使用微状态计算进程时间
pwait pid 等待指定的进程终止.
pcred pid 显示可信度
pfiles pid 显示已打开文件的fstat 和fcntl 信息
pflags pid 显示每个lwp 的/proc 跟踪标志,等待和持有信号量以及其他状
态信息
pldd pid 显示链接到每个进程的动态链接库
pmap pid 显示地址映射空间
psig pid 显示信号操作
pstack pid 显示每个lwp 的十六进制与符号堆跟踪
ptree pid 显示包含指定PID 的进程树
pwdx oid 显示当前工作目录

6、ps命令格式:
ps [ -aAdeflcjLPy ] [ -o format ] [ -t termlist ] [ -u userlist ] [ -U userlist ] [ -G grouplist ] [ -p proclist ] [ -g pgrplist ] [ -s sidlist ]

7、常用的参数:
-e 输出所有进程报告
-f 在第一栏显示进程所有者的名字(不是UID)。该选项关闭-l、–t、–s 和–r 选项,打开-a 选项。
-l 产生一个长的输出报告,只是不包含STIME 字段

8、ps -el的相关输出参数解释:
bash-2.05$ ps -el

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
19 T 0 0 0 0 0 SY ? 0 ? 0:16 sched
8 S 0 1 0 0 40 20 ? 151 ? ? 0:00 init
19 S 0 2 0 0 0 SY ? 0 ? ? 0:00 pageout
19 S 0 3 0 0 0 SY ? 0 ? ? 0:30 fsflush
8 S 0 377 1 0 40 20 ? 223 ? ? 0:00 sac
8 S 0 378 1 0 40 20 ? 224 ? console 0:00 ttymon
8 S 0 131 1 0 40 20 ? 289 ? ? 0:00 rpcbind

F 十六进制标志,它们加起来表示进程的当前状态。如下所述:
00 进程终止,而且它们在进程表中的空间已释放。
01 系统进程,长驻内存
02 进程被父进程跟踪
04 进程被父进程跟踪而且已被停止
08 该进程无法被信号量唤醒
10 该进程当前在内存中,而且被锁定直到一个事件完成
20 进程不能被交换出

S 进程当前状态,由以下字母之一显示:
O 当前正在处理器上运行
S 睡眠;等待I/O事件完成
R 运行结束
I 空闲;进程被创建
Z 僵死。进程已终止
T 由于父进程跟踪而停止
X 等待更多的内存

UID 进程所有者的用户ID
PID 进程ID
PPID 父进程ID
C 进程的CPU使用情况(即进程占CPU时间的百分比)
PRI 进程优先权方案。较大的数表示较低的优先权
NI 进程的nice值,该值与优先权方案相关联。使一个进程“nicer”意指降低该进程的优先权,以使它不会用尽CPU的时间
SZ 进程请求的虚拟内存量。这是该系统对内存需求的一个好的指标。
TTY 启动进程(或者父进程)的终端。带问号的进程无控制终端(通常为系统进程)
TIME 自进程启动以来占CPU时间总量
COMD 产生进程的命令

9、使用ps报告。
查找属于一个用户的许多相同的工作。Kill命令终止进程。 ps -U username
查找TIME字段中占用了很多CPU时间的进程。这样的进程可能在死循环。ps -e
查找C字段,找出不重要但占用了大量CPU时间的进程。如果该进程获取过多内存,删除该进程。如果许多进程占用了大量内存,则系统可能需要增加内存。ps -el
注意使用越来越多CPU时间的失控进程。可以通过使用-f选项查看进程启动时间(STIME)以及通过查看TIME字段中的CPU时间总量来检测失控进程。 ps -f

10、删除进程。
在正常途径无法结束时才使用删除命令。
#kill - signal pid
signal:57
signal:
2 中断
3 退出
4 非法指令
5 跟踪中断
6 Abort
7 EMT指令(Emulation竞争trap)
8 浮点格式的异常情况
9 kill(不能被捕获或忽略)
10 通道错误
11不合法的内存区段
12 错误系统调用
13 写入不可读的连通管道
14 alarm clock
15 软件结束信号
16 用户定义的信号1
17用户定义的信号2
18 子进程状态被改变
19 电源坏掉
20窗口(Window)的大小被改变
21Urgent(紧急的) Socket Condition
22 Pollable(可查询的)event
23 停止
24 由用户终止
25 继续执行
26 停止终端输入
27 停止终端输出
28 virtual Timer expired
29 Profiling time expired
30 超过CPU时间
31 超过文件大小限制
32 Socket I/O possible

有时即使用kill命令,但进程仍未被删除。最有可能的三种情况:
进程在退出前等待设备完成操作。
进程在等待由于NFS故障而导致的无法使用的资源。要删除此类进程,输入kill -quit PID
进程为僵死进程,在ps报告的defunct的消息中显示。僵死进程是释放了所有资源,但未接受到父进程确认的进程。只有收到确认才删除进程在进程表中的入口。下一次引导时僵死进程会被清除。僵死进程不影响系统性能,不需要删除。

11、优先权控制命
使用priocntl命令可以:
显示或设置指定进程的调度参
显示系统调度程序的当前配置信息
执行带有指定调度参数的命令
每个进程都有不同的级,每级分配有各自不同的调度策略。
系统可能配置的级包括:
系统(SYS)
交互(IA)
实时(RT)
分式共享(TS)
对于分式共享级,用户提供的优先权范围为:-20~+20。一个
分时共享进程的优先权(用户模式优先权)是从父进程继承
而来。系统在分时调度表中查找用户模式优先权,加入任何
nice值或这者priocntl优先权值(用户提供),保证创建的全
局优先权在0~59之间。
在默认配置中,一个可运行的实时进程在任何其它进程之前运行。实时进程使用不当会导致系统性能急剧下降。
1. 显示进程级的基本信息(进程级或系统调度参数):
输入priocntl -l并回车
2. 显示进程的全局优先级
使用ps -ecl命令显示进程的全局优先权。全局优先权在PRI栏列出
3、指定进程的优先级:
输入priocntl -e -c class -m user -limit -p priority command - name回车
-e 执行命令
-c 指定级(默认选项是TS(分时共享)或RI(实时)
-m 用户限制选项,指定-p选项提升或降低优先权的最大量。
-p 允许指定用户提供的优先权,范围为-20~+20。

4.更改分时共享进程的调度参数
依照以下步骤更改分时共享进程的调度参数:
1)成为超级用户。
2)输入priocntl -s -m user -limit [-p priority] -i id type id -list回车。
-s允许设置用户优先权范围的上限
-m 用户限制选项,指定-p选项提升或降低优先权的最大量。
-p优先权命令名选项,允许指定优先权。
-I id -type和id -list选项使用id -type和id -list的组合标识进程, id -
type指定id类型,如PID或UID。
3)输入ps -ecl|grep id -list回车。
4)检查PRI栏的输出,验证已经成功地更改了进程状态。
% priocntl -s -c RT -t 500 -p 20 myprog
% ps -ecl|grep myprog

5. 更改进程
依照以下步骤更改进程级:
1)成为超级用户。
2)输入priocntl -s -c class -i id type id -list回车。
-s允许设置用户优先权范围的上限并更改优先权
-c 指定想更改的进程级为TS(分时共享)级或RI(实时)级
-I id -type和id -list选项使用id -type和id -list的组合标识进程, id -type指定id
类型,如PID或UID。
3)输入ps -ecl|grep id -list回车。
4)检查PRI栏的输出,验证已经成功地更改了进程状态。
注意:必须是超级用户或者在实时shell中操作,更改进程级为非实时级或者实时级。

6、更改进程优先级
使用nice命令可以提高或降低一个命令或进程的优先权。
不带参数使用该命令则默认nice值增4个单位,使进程优先
权降低。
注意:必须是超级用户才能。
/usr/bin/nice command -name(默认,进程的优先权降低4个单位)
/usr/bin/nice +10 command -name(进程的优先权降低10个单位)
/usr/bin/nice -10 command -name(进程的优先权增加10个单位)
/usr/bin/nice - -10 command -name(nice 值减少10个单位,提高一个命令的优先权)