Unix/Linux 系统自动化管理: 进程管理篇
Unix/Linux 系统自动化管理: 进程管理篇
本文是 Unix/Linux 系统管理自动化系列中的一篇,主要讲述如何实现自动化监控进程状态和性能并及时通知系统管理员。
进程监控是 Unix/Linux 系统管理中一个非常重要的组成部分。它可以监控进程状态、进程的 CPU 利用率等信息,并且可以在发现进程出现异常情况的时候,发送告警信息给系统管理员或者做出指定的反应。我们可以使用系统进程监控信息进行合理的进程调度从而优化系统性能,或者根据这些信息调整系统的行为。
不同的操作系统监控进程的命令可能略有不同。本文将介绍 Unix/Linux 操作系统进程管理命令及相关信息,并论述 Unix/Linux 操作系统上进程监控的自动化脚本实现。
Unix/Linux 进程管理相关命令介绍
进程是操作系统用于控制系统资源使用的实体。Unix/Linux 进程管理相关的命令主要有以下几个,在后面的脚本实现中会用到部分命令。
显示进程属性命令
ps 命令:该命令是最基本同时也是非常强大的进程查看命令,用于报告进程标识、用户、CPU 时间消耗以及其他属性。利用它可以确定有哪些进程正在运行及运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。ps 命令可以监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入 / 输出设备进行通信的,如果需要检测其情况,可以使用 ps 命令。
单独使用 ps 命令所看到的进程列表,都是在前台执行的进程,但并非所有进程都在前台执行,也有不少进程隐藏在后台执行。使用命令 ps -e 可以显示所有进程。
进程性能检测命令
top 命令:Linux 使用 top 命令来显示 CPU 占用率为前几位的进程。该命令可以按 CPU 使用率、内存使用率、执行时间对任务进行排序,而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。top 主要字段的含义如下:
表 1. top 字段含义
列名 含义
PID 进程 ID
USER 进程所有者的用户名
PR 任务优先级
NI nice 值。数值越小表示优先级越高,数值越大表示优先级越低
VIRT 进程使用的虚拟内存总量,单位:kb。VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位:kb。RES=CODE+DATA
SHR 共享内存大小,单位:kb
S 进程状态。
D= 不可中断的睡眠状态
R= 运行
S= 睡眠
T= 跟踪 / 停止
Z= 僵尸进程
%CPU 上次更新到现在的 CPU 时间占用百分比
TIME+ 进程使用的 CPU 时间总计,精确到 1/100 秒
COMMAND 命令名 / 命令行
topas 命令:AIX 使用 topas 命令在字符终端上报告有关本地系统上的活动的至关重要的统计信息,包括显示 CPU 占用率为前几位的进程。topas 命令以缺省的两秒间隔从系统中提取并显示统计信息。通过命令 topas -P 可以进入 topas 的 process 子部分,显示活动进程的列表。各进程将按它们在监视间隔期间的 CPU 使用率进行排序。topas 针对每个进程所显示的字段含义如下:
表 2. topas 字段含义
列名 含义
Name 在该进程中执行的可执行程序的名称。此名称将剥离任何路径
名称和参数信息,并将长度截断为 9 个字符。
Process ID 进程 ID
% CPU Utilization 该进程在监视间隔期间的平均 CPU 利用率。在第一次显示某个进
程时,此值是该进程在生存期中的平均 CPU 利用率。
Paging Space Used 分配给该进程的分页空间大小。可将这视为该进程的内存占用空间
大小,但是不包括用于保存可执行程序及其依赖的任何共享库的内存。
Process Owner 拥有该进程的用户的用户名
控制进程争用 CPU 的优先级级别的命令
nice 命令:nice 命令允许您以比命令的正常优先级更低的优先级运行命令。
语法:nice [ - Increment| -n Increment ] Command [ Argument ... ]
如果您没有指定 Increment 值,nice 命令缺省为递增值 10。您必须有 root 用户权限以在更高的优先级运行命令。进程的优先级通常被称作它的 nice 值。Linux 操作系统的 nice 值范围是 -20 到 19,19 是最低优先级。AIX 操作系统 nice 值的范围是 0 到 39,39 是最低优先级。如果您没有适当的权限就试图增加命令的优先级,nice 命令不会返回错误消息。相反,命令的优先级不会更改,并且系统以它通常的优先级启动命令。
renice 命令:renice 命令改变系统中已经在运行的一个或多个进程的 nice 值,因此改变了优先级。进程可由进程标识、进程组标识或拥有该进程的用户名识别。如果不具有 root 用户权限,则仅可以重新设置自己拥有的进程的优先级。
终止进程的命令
kill 命令:kill 命令发送一个信号(缺省,SIGTERM 信号)到一个正运行的程序。缺省操作一般是停止进程。root 用户可用 kill 命令来停止任何进程。如果不是 root 用户,必须已经启动了要停止的进程。
进程定时启动命令 crontab
为了定期执行命令,可以利用 crontab 定义命令执行的间隔和顺序。crontab 命令用于提交、编辑、列出或删除 cron 作业。一个 cron 作业是一个命令,其运行是由 cron 守护程序在规则的调度间隔执行的。要编辑提交一个 cron 作业,可以使用 crontab -e 命令。crontab -e 命令调用一个编辑会话,允许创建一个 crontab 文件。crontab 文件中的条目必须是一种 cron 守护程序可接受的格式。编辑完成后,
RedHat 系统会自动在 /var/spool/cron 下生成一个与此用户同名的文件,此用户的 cron 信息都记录在这个文件中。
SUSE 系统会自动在 /var/spool/cron/tabs 下生成一个与此用户同名的文件,此用户的 cron 信息都记录在这个文件中。
AIX 系统会自动在 /var/spool/cron/crontabs 下生成一个与此用户同名的文件,此用户的 cron 信息都记录在这个文件中。
以 RedHat 操作系统为例,cron 服务每分钟不仅要读一次 /var/spool/cron 内的所有文件,还需要读一次 /etc/crontab,因此我们配置这个文件也能运用 cron 服务做一些事情。用 crontab 配置是针对某个用户的,而编辑 /etc/crontab 是针对系统的任务。此文件的文件格式如下:
清单 1. /etc/crontab 文件内容
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root // 如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ // 使用者运行的路径
# run-parts
01 * * * * root run-parts /etc/cron.hourly // 每小时执行 /etc/cron.hourly 目录下的脚本
02 4 * * * root run-parts /etc/cron.daily // 每天执行 /etc/cron.daily 目录下的脚本
22 4 * * 0 root run-parts /etc/cron.weekly // 每星期执行 /etc/cron.weekly 目录下的脚本
42 4 1 * * root run-parts /etc/cron.monthly // 每月去执行 /etc/cron.monthly 目录下的脚本
列出用户目前的 crontab 可以使用命令:crontab -l UserName
删除用户目前的 crontab 可以使用命令:crontab -r UserName
一个