Unix/Linux 系统自动化管理: 进程管理篇(1)

进程监控是 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
一个 crontab 文件包含若干个 cron 作业的条目。每个 crontab 文件条目包括 6 个字段,它们被空格或制表符以以下格式分开:
minute hour day_of_month month weekday command
这些字段接收以下值:

表 3. 字段含义
字段
minute 0 到 59
hour 0 到 23
day_of_month 1 到 31
month 1 到 12
weekday 0 到 6(星期日到星期六)
command shell 命令
必须为每个字段指定一个值。除了 command 字段,这些字段可以包含以下内容:
  • 指定范围内的一个数。要在 5 月运行一个命令,在 month 字段指定 5。
  • 两个被破折号分开的数目表明了包含的范围。要从星期二到星期五运行 cron 作业,把 2-5 放到 weekday 字段中。
  • 由逗号隔开的数字列表。要在一月第一天和最后一天的运行命令,在 day_of_month 字段中可指定 1,31。
  • 由两个被破折号分开的数字组成的组合表明了包含的范围,可与由逗号格开的数字列表一起使用。要在一月的第 10 天到第 16 天和最后一天首次运行命令,应该在 day_of_month 字段中指定 1,10-16,31。以上两种也可组合使用。
*(星号),意味着所有的允许值。要每个小时运行一个作业,在小时字段指定一个星号。

你可能感兴趣的:(linux,unix,职场,休闲)