打印

【Solaris10 专题】系统资源管理

本帖已经被作者加入个人空间

【Solaris10 专题】系统资源管理

目录:
       

Part-1 Solaris 10系统资源的初级管理
# 1 系统资源管理概述
# 2 显示和改变系统资源信息
# 3 管理磁盘空间
# 4 使用Quota管理磁盘空间
# 5 系统资源的定时调用

Part-2 系统性能的监控与进程的管理
# 1 监控系统性能
# 2 系统进程的管理

Part-3 Solaris 10系统资源的高级管理
# 1 资源容器
# 2 项目和任务
# 3 资源控制
# 4 公平共享调度(FSS)
# 5 使用资源上限守护程序管理物理内存
# 6 动态资源池

Part -4 系统信息的管理
# 1 信息管理概述
# 2 系统日志信息管理
# 3 系统core文件的管理
# 4 系统crash信息的管理



Part 1     Solaris 10系统资源的初级管理

为大家介绍Solaris 10的系统资源管理方面的初级知识。由于系统资源直接关系着服务提供商的服务质量和软件开发商的软件质量,所以它是系统管理人员和软件开发人员的共同关注点。

1 系统资源管理概述

计算机系统中,分配给用户使用的各种硬件和软件设施统称为系统资源。系统资源包括两大类:硬件资源和信息资源。其中,硬件资源分为处理器、存储器、I/O设备等,I/O设备又分为输入型设备、输出型设备和存储型设备;信息资源则分为程序和数据等资源。

操作系统的重要任务之一是有序地管理计算机系统中的硬件、软件资源,跟踪资源使用状况,满足用户对资源的需求,协调各程序对资源的使用冲突,为用户提供简单、有效的资源使用方法,最大限度地实现各类资源的共享,提高资源利用率,从而使得计算机系统的性能有很大提高。

对于从控制程序执行,扩充其功能,屏蔽使用细节,方便用户使用,组织合理工作流程,改善人机界面等方面,我们都可以理解为系统资源管理。

本章将从最基本的系统资源管理开始,逐步向读者介绍系统资源管理的知识。

首先,我们需要收集一些关于系统资源的信息。只有在了解系统资源信息后,才可以使我们对整个系统资源的使用情况有一个宏观的规划,从而实现系统资源的优化配置。

然后介绍对最常见的硬件资源,即硬盘的管理,对系统性能影响比较大的处理器和内存的管理将在第15章中介绍。

在Solaris系统中,我们可以用cron和at命令来定时执行命令或程序,以实现资源的定时调用。但本章的系统资源管理不包括用户如何分配资源和控制资源。这部分的内容,请参见第16章。

下面简要介绍在Solaris 10中新出现的两个管理资源工具

 psrinfo命令

在以前的Solaris版本中,psrinfo命令为我们提供物理CPU方面的信息。在Solaris 10中,它增加了新的识别多线程属性,也可以提供CPU组方面的信息了。新增的-p属性可显示所有物理CPU的信息;而-pv是显示所有物理CPU和由物理CPU组成的CPU组。

 localeadm命令

localeadm命令是完全新增的,它可以让用户在不重新安装操作系统的情况下改变系统的地区属性。

[ 本帖最后由 云杉上的蝴蝶 于 2008-4-12 06:26 编辑 ]

TOP

1- 2显示和改变系统资源信息

本节主要介绍一些查看和改变系统的综合资源信息的方法。这些资源信息的内容可能是比较宏观、笼统的,但对我们了解系统资源的总体状况是非常有帮助的。

显示系统资源信息

作为系统管理员,需要经常查看系统资源信息,以确保系统资源的有效管理,保障系统的稳定运行。

“工欲善其事,必先利其器”,我们要首先了解显示系统资源信息的命令工具。下面列出了显示一般的系统信息的命令。

命 令--命令说明--帮 助
date--显示日期和时间--date(1)
hostid--显示主机ID号--hostid(1)
isainfo--显示系统内核支持的应用程序的比特位数--isainfo(1)
isalist--显示在x86平台上系统支持应用程序的比特位数--psrinfo(1M)
localeadm--进行系统的时区设置--localeadm(1M)
prtconf--列出系统硬件信息--prtconf(1M)
psrinfo--显示CPU的类型--psrinfo(1M)
showrev--显示主机名、主机ID、内核版本、应用程序架构、硬件提供者信息等--showrev(1M)
uname--显示操作系统的名称、版本、节点名、硬件名和CPU类型--.name(1)

1.如何确认Solaris操作系统是32位兼容的还是64位兼容的

命令介绍:

# isainfo options

isainfo命令在不使用任何参数的情况下,也能显示操作系统的版本。

其中,

 -v 显示概要信息。

 -b 显示本地应用软件的比特位数。

 例1 在SPARC平台上,确认Solaris操作系统是32位兼容的还是64位兼容的。

(1)在UltraSPARC硬件平台上,运行以前使用的32位内核版本的Solaris操作系统,命令及输出如下:

$ isainfo -v

32-bit SPARC applications

这个输出意味着操作系统支持32位应用程序。

(2)在UltraSPARC硬件平台上,运行64位内核的Solaris操作系统的命令和输出如下:

$ isainfo -v

64-bit sparcv9 applications

32-bit SPARC applications

这个输出意味着系统能够支持32位和64位的应用程序。

请注意,使用isainfo –b命令可以显示支持本地应用软件的bit位数。

(3)在SPARC平台、 x86平台上运行32位内核的Solaris操作系统的命令和输出如下:

$ isainfo -b

32

(4)在64位UltraSPARC平台上运行64位内核Solaris操作系统的命令和输出如下:

$ isainfo -b

64

需要说明的是:虽然在64位UltraSPARC系统上能运行所有应用程序,但64位应用程序最好还是在64位的系统上运行。

 例2 在x86平台上,确认Solaris操作系统是32位兼容的还是64位兼容。

(1)在x86平台上运行64位内核的Solaris操作系统的命令和输出如下:

$ isainfo

amd64 i386

此输出意味着系统能支持64位的应用程序。

(2)在x86平台上运行32位内核的Solaris操作系统的命令和输出如下:

$ isainfo -v

64-bit amd64 applications

fpu tsc cx8 cmov mmx ammx a3dnow a3dnowx fxsr sse sse2

32-bit i386 applications

fpu tsc cx8 cmov mmx ammx a3dnow a3dnowx fxsr sse sse2

此输出意味着系统能支持64位和32位的应用程序。

(3)在x86平台上运行32位操作系统的命令和输出如下:

$ isainfo -b

32

(4)在x86平台上运行64位操作系统的命令和输出如下:

$ isainfo -b

64

(5)也可以使用isalist命令确认x86平台运行的是32位还是64位操作系统:

$ isalist

amd64 pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

此输出表明此系统是64位系统。
2.如何显示物理CPU的类型

使用psrinfo -p命令来显示所有物理的CPU的数量。

 例3 显示系统中物理CPU的数量。

$ psrinfo -p

1

由输出可见,系统中只有一个物理CPU。

 例4使用psrinfo -pv命令来显示物理CPU和关联的虚拟CPU。

$ psrinfo -pv

The UltraSPARC-IV physical processor has 2 virtual processors (8, 520)

The UltraSPARC-IV physical processor has 2 virtual processors (9, 521)

The UltraSPARC-IV physical processor has 2 virtual processors (10, 522)

The UltraSPARC-IV physical processor has 2 virtual processors (11, 523)

The UltraSPARC-III+ physical processor has 1 virtual processor (16)

The UltraSPARC-III+ physical processor has 1 virtual processor (17)

The UltraSPARC-III+ physical processor has 1 virtual processor (18)

The UltraSPARC-III+ physical processor has 1 virtual processor (19)

 例5 在x86平台上使用命令psrinfo -pv。

$ psrinfo -pv

The i386 physical processor has 2 virtual processors (0, 2)

The i386 physical processor has 2 virtual processors (1, 3)
3.如何显示虚拟CPU的类型

(1)使用psrinfo -v 命令来显示CPU的类型:

$ psrinfo -v

(2)在x86平台上,使用isalist命令来显示虚拟CPU的类型:

$ isalist

 例6 在SPARC平台上,显示系统CPU的类型。

$ psrinfo -v

Status of virtual processor 0 as of: 04/16/2004 10:32:13

on-line since 03/22/2004 19:18:27.

The sparcv9 processor operates at 650 MHz,

and has a sparcv9 floating point processor.

 例7 在x86平台上,显示系统CPU的类型。

$ isalist

pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86
4.如何显示Solaris版本信息

操作系统的版本信息保留在/etc/release文件中。

 例8 显示操作系统的版本信息。

$ more /etc/release

Solaris 10 s10_51 SPARC

Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.

Use is subject to license terms.

Assembled 21 January 2004
5.如何显示系统综合信息

使用showrev –a命令可以显示系统的所有综合信息。

 例9 显示系统的所有综合信息。

$ showrev -a

Hostname: touchstone

Hostid: 8099dfb9

Release: 5.10

Kernel architecture: sun4u

Application architecture: SPARC

Hardware provider: Sun_Microsystems

Domain: boulder.Central.Sun.COM

Kernel version: SunOS 5.10 s10_46

OpenWindows version:

Solaris X10 Version 6.6.2 20 October 2003

No patches are installed
6.如何显示系统主机ID号、系统内存信息和系统日期时间

 例10 显示系统主机ID号、系统内存信息和系统日期时间。

(1)使用hostid命令可以显示系统主机ID号:

$ hostid

80a5d34c

(2)使用下面命令来显示系统内存信息:

# prtconf | grep Memory

Memory size: 128 Megabytes

(3)使用date命令来显示系统日期时间:

$ date

Wed Jan 21 17:32:59 MST 2004
7.如何显示和改变Locale设置

 例11 显示和改变系统时区设置。

(1)显示系统时区:

# localeadm -l

Checking for installed pkgs. This could take a while.

Checking for Australasia region (aua)

(1of2 pkgs)

|......|

The following regions are installed on concordance on Wed Dec 17 15:13:00 MST 2003

POSIX (C)

Central Europe (ceu)

[ Austria, Czech Republic, Germany, Hungary, Poland, Slovakia,

Switzerland (German), Switzerland (French) ]

Done.

上面例子中系统时区为澳大利亚,下面将其改为欧洲中部。

(2)改变系统Locale设置:

# localeadm -q ceu

locale/region name is ceu

Checking for Central Europe region (ceu)





The Central Europe region (ceu) is installed on this system

瞧,现在系统的时区已经是欧洲中部了。
8.显示系统已经运行的时间

使用命令uptime可以查看系统运行了多久。

 例12 显示系统运行了多久。

# uptime

11:27pm up 9 days,7:12,1 user,load average:0.07,0.12,0.14

显示目前时间是11:27pm,而系统已经开机了9天又7:12之多,目前有一个使用者在线上,过去1,5,15分钟系统平均负荷分别为0.07,0.12,0.14。
9.查看系统内存

prtconf命令可以查看关于系统硬件设备的很多信息。读者可以仿照例13来查看其他硬件信息。

 例13 查看系统内存信息。

# prtconf | grep Memory

Memory size: 512Megabytes
14.2.2 改变系统信息

系统中有些提示信息是可以由管理员手工改动的,比如系统时间和系统用户登录时的提示等。下面具体介绍一些改变系统信息的方法。
1.改变系统日期和时间

命令介绍:

# date mmddHHMM[[cc]yy]

其中:

 mm——月,使用2位数字表示。

 dd——日,使用2位数字表示。

 HH——小时。

 MM——分钟。

 cc——秒。

 yy——年,使用2位数字表示。

 例14 改变系统时间。

# date

Wed Mar 3 14:04:19 MST 2005

# date 0121173404

Thu Jan 21 17:34:34 MST 2005
2.改变系统登录信息

步骤:

(1)以超级用户或授权角色用户登录系统。

(2)编辑系统登录信息所在的文件/etc/motd.,并保存。
3.改变主机名

步骤:

(1)成为超级用户或授权角色用户。

(2)修改下列文件:

 /etc/nodename

 /etc/hostname.host-name

 /etc/inet/hosts

(3)重新启动主机。

# init 6
4.如何增加和删除时区设置

上面已介绍改变系统的时区设置的方法,但是这是在有时区软件的情况下,如果操作系统中没有安装我们需要的时区的软件,怎么办?例15将介绍如何增添系统时区软件,例16将介绍如何删除时区软件。

 例15 增添系统时区软件,并更新系统时区设置。

使用命令localeadm,并在其-a选项后面放想安装的locale的标志符,-d选项后面接安装程序包的位置。

# localeadm -a ceu -d /net/install/latest/Solaris/Product

locale/region name is ceu

Devices are /net/install/latest/Solaris/Product



One or more locales have been added.

To update the list of locales available at



 例16 删除系统时区软件。

使用命令localeadm,-r选项后跟要删除的locale的标志符。

# localeadm -r ceu

locale/region name is ceu

Removing packages for Central Europe (ceu)



One or more locales have been removed.

To update the list of locales available

at the login screen’s "Options->Language" menu

TOP

管理磁盘空间

系统磁盘是存放数据资料和应用程序的地方,它的安全与效率对管理员来说具有特殊的意义。本节将详细介绍磁盘空间的管理。查看磁盘空间的大小

查看磁盘空间的大小是系统管理员经常需要做的事情。Solaris操作系统提供了许多命令,以反映系统磁盘空间大小,由此可见查看系统空间大小的重要性。
磁盘空间信息的命令汇总:
命 令--描 述--帮 助
df--报告空闲磁盘块和文件的数量--df(1M)
du--子目录的占用空间大小--du(1)
find -size--查找指定目录下指定大小的文件--find(1)
ls -lh--显示当前目录下文件及大小--ls(1)

下面仅列举三个例子,读者应该很容易明白如何使用它们查看系统磁盘空间信息了。

 例14-17 显示文件大小和磁盘空间。

$ df

/ (/dev/dsk/c0t0d0s0 ): 101294 blocks 105480 files

/devices (/devices ): 0 blocks 0 files

/system/contract (ctfs ): 0 blocks 2147483578 files

 例14-18 以1024K的形式显示文件大小和磁盘空间。

$ df -h

Filesystem size used avail capacity Mounted on

/dev/dsk/c0t0d0s0 249M 200M 25M 90% /

/devices 0K 0K 0K 0% /devices

 例14-19 以块的形式显示文件大小和磁盘空间。

$ df -t

/ (/dev/dsk/c0t0d0s0 ): 101294 blocks 105480 files

total: 509932 blocks 129024 files

/devices (/devices ): 0 blocks 0 files

total: 0 blocks 113 files

查看文件的大小

在了解磁盘空间大小之后,我们还需要了解文件的大小。只有这样才能合理地放置文件,有效地使用空间。

通常可以使用ls命令查看文件的大小:

ls

ls后加上-l参数,则列出当前目录的详细信息。在Solaris 10中,ls –l列出的文件的系统时间已经精确到微秒。

 例14-20 列出文件的详细信息。

$ ls -l

total 148

drwxrwxr-x 5 adm adm 512 Nov 26 09:39 acct/

-rw------- 1 uucp bin 0 Nov 26 09:25 aculog

drwxr-xr-x 2 adm adm 512 Nov 26 09:25 exacct/

使用find命令可以在目录中检索达到一定标准的文件。

 例14-21 在当前目录下列出大于400块的文件。

$ find . -size +400 -print

./Howto/howto.doc

./Howto/howto.doc.backup

./Howto/howtotest.doc

./Routine/routineBackupconcepts.doc

检查目录的大小

使用du命令来检查目录的大小。

命令介绍:

$ du [-as] [directory ...]

du命令是显示目录及目录下的子目录的总体大小。

 -a参数是显示每个目录的大小和块数。

 -s参数是显示专门目录大小是多少块数。

 -h参数是显示每个目录的大小是多少KB。

 例14-22 显示目录、子目录和文件的大小。

显示目录大小是多少块数:

$ du -s /var/adm /var/spool/

130 /var/adm

40 /var/spool/lp

显示目录的大小是多少KB:

$ du -h /usr/share/audio

796K /usr/share/audio/samples/au

797K /usr/share/audio/samples

798K /usr/share/audio

查找特定文件

在磁盘空间管理中,文件管理是非常重要的。一些旧的不再需要的文件,往往占用了宝贵的资源,找到并删除这些旧文件,是系统管理者必须做的。
1.如何按时间排序列出文件

使用ls –tl命令列出最新的文件,-t参数是要求输出按时间排序,时间最新的在最上边。

 例14-23 按照时间顺序列出目录内文件。

$ ls -tl /var/adm

total 134

-rw------- 1 root root 315 Sep 24 14:00 sulog

-r--r--r-- 1 root other 350700 Sep 22 11:04 lastlog

-rw-r--r-- 1 root bin 4464 Sep 22 11:04 utmpx

-rw-r--r-- 1 adm adm 20088 Sep 22 11:04 wtmpx
2.如何找到并删除旧的或不用的文件

步骤:

(1)成为超级用户或授权角色用户。

(2)找到旧的或不用的文件。

命令介绍:

# find directory -type f[-atime +nnn][-mtime +nnn] -print > filename &

 directory—在此目录下查找。

 -atime +nnn—匹配所有在nnn天内访问过的文件。

 -mtime +nnn—匹配所有在nnn天内修改过的文件。

 filename—查找的结果列放在此文件中。

(3)删除:

# rm 'cat filename'
3.如何找到并删除core文件

core文件是系统软件故障信息记录文件。可用下面的方法来删除这些文件。

步骤:

(1)成为超级用户或授权角色用户。

(2)进入你想要查找core文件的目录。

(3)找到并删除core文件:

# find . -name core -exec rm {} \;

TOP

使用Quota管理磁盘空间

本节介绍如何使用Quota来限定用户使用磁盘空间的大小。

Quota概述

对磁盘空间资源进行必要的管理是系统管理员的工作之一。尤其当系统磁盘空间有限,而用户众多的时候,系统管理员就要想出办法,要么增加磁盘的数量,要么限定用户的使用空间。在不增加新的预算的情况下,限定用户空间就是惟一可行的方法。

Quota可以帮助系统管理员在指定目录限定用户使用磁盘空间的大小。

Quota在限制磁盘空间方面有两种措施:硬限制和软限制。硬限制就是系统严格限制用户可以使用空间的大小,不允许超额。软限制是允许用户超出限额一定的范围。当超出软限额时,Quota开始计时,在计时期间(默认时为一周,在/usr/include/sys/fs/ufs_quota.h文件中设置),用户释放空间到限额以下,计时复位清零。如果到期还没有释放空间,系统将不再允许该用户使用更多的空间。

Quota限制磁盘空间的方法也有两种,即分别对inode和block进行限制。因为系统给用户提供了两种资源:inode和block,分别用于存储文件和数据。只要用户所建立的文件超过他可以使用的inode数额,则即使这些文件都是空的,他再次建立文件的行为也将被限制。

设置Quota

Solaris操作系统支持Quota技术,意即设置Quota不需要另外安装其他第三方的工具就可以完成。

设置Quota步骤:

(1)编辑/etc/vfstab文件,在需要设置Quota的UFS的属性上加上rq标志。

(2)在该文件系统的根目录下建立名为quotas的文件,该文件的所有者应是root,其他用户不可对它进行写操作。

(3)使用edquota命令来在UFS的根目录下创建一个临时文件,这个文件的内容包括用户的使用限额。

(4)为多个用户设置edquota限额(可选)。

(5)使用quotacheck命令对限额的一致性进行检查。

(6)用quotaon命令来启动edquota服务。

 例14-24 在磁盘c0t4d0s0的mount点/work下建立磁盘使用限额。

(1)成为超级用户或授权角色用户。

(2)编辑/etc/vfstab文件,加上:

/dev/dsk/c0t4d0s0 /dev/rdsk/c0t4d0s0 /export/home ufs 3 yes rq

(3)/export/home目录下,建立名为quotas的文件。

# touch quotas

# chmod 600 quotas

(4)使用edquota命令来建立用户的使用限额:

# edquota bob

系统生成:fs /export/home blocks (soft =10, hard =10) inodes (soft =10, hard =10)

其中,fs字段表明使用硬盘限额的文件系统,为/export/home;bob为用户名。修改soft和hard的数额就可以设定限额的大小。0是无限额设定;本次设定限额大小为10MB。

(5)以bob用户设置为模板,为多个用户设置edquota限额,mary和john也为用户名。

# edquota -p bob mary john

(6)使用quotacheck -va命令对限额的一致性进行检查。

# quotacheck -va

*** Checking quotas for /dev/rdsk/ c0t4d0s0 (/export/home)

(7)用quotaon命令来启动edquota服务:

#quotaon /export/home

检查Quota设置

Quota设置后,我们可以用下面的命令来检查设置是否成功。

# repquota -va

/dev/dsk/ c0t4d0s0 (/export/home):

Block limits File limits

User used soft hard timeleft used soft hard timeleft

Bob -- 1 10 10 0 0 10 10 0

Mary -- 3 10 10 0 0 10 10 0

John -- 0 10 1 0 0 10 10 0

磁盘块限制的定义:

 used——当前已经使用的块数。

 soft——soft-block限制数额。

 hard——hard-block限制数额。

 timeleft——剩余的可使用时间。.

文件限制定义:

 used——已经使用的inode数量。

 soft——soft-inode limit限制数额。

 hard——hard-inode限制数额。

 timeleft——剩余的可使用时间。

改变和删除Quota设置

下面简要介绍一些改变和删除Quota设置的命令。

(1)改变时间限额设置:

# edquota -t

(2)改变用户限额限额设置:

#edquota username

(3)检查用户限额设置是否正确:

#edquota -v [用户名]

(4)关闭quota服务:

#quotaoff [quota根目录]

TOP

系统资源的定时调用

Solaris操作系统支持系统资源的定时调用。本节将介绍系统管理员如何通过相关命令和设置,按照事先定好的时间调用系统资源。

系统资源的循环定时调用

可以使用crontab将系统设定在每天、每周和每月的某个时刻自动运行某个命令或者应用程序,实现系统资源的循环定时调用。在不需要人工干预的情况下,还可以设定好将系统执行信息记录在某个文件之中,我们定期查看这些文件,以了解系统执行情况。
1.crontab命令的使用

命令介绍:

crontab

参数:

 -e:执行文字编辑器来设定时程表,内定的文字编辑器是VI。

 -r:删除目前的时程表。

 -l:列出目前的时程表。

时程表的格式如下:

f1 f2 f3 f4 f5 program

具体解释如下:

 其中f1是表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天。program表示要执行的程序。

 当f1为*时表示每分钟都要执行program,f2为*时表示每小时都要执行程序,其余类推。

 当f1为a~b时表示从第a分钟到第b分钟这段时间内要执行,f2为a~b时表示从第a到第b小时都要执行,其余类推。

 当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n表示每n小时个时间间隔执行一次,其余类推。

 当f1为a, b, c,…时表示第a, b, c,…分钟要执行,f2为a, b, c,…时表示第a, b, c…个小时要执行,其余类推。

使用者也可以将所有的设定先存放在档案file中,用crontab file的方式来设定时程表。

 例14-25 使用crontab实现定时执行。

每月每天每小时的第0分钟执行一次/bin/ls:

0 * * * * /bin/ls

在12月内,每天早上6点到12点钟之间,每隔20分钟执行一次/usr/bin/backup:

0/20 6-12 * 12 * /usr/bin/backup

周一到周五每天下午5:00寄一封信给aleex@domain.name

0 17 * * 1-5 mail -s "hi" aleex@domain.name < /tmp/maildata

每月每天的午夜0点20分,2点20分,4点20分……执行echo "haha":

20 0-23/2 * * * echo "haha"
2.如何控制用户使用crontab命令

控制使用crontab命令的文件存在/etc/cron.d目录下,即cron.deny和cron.allow两个文件。这两个文件与用户名相联系,一个用户名在文件中列为一行。控制文件是这样工作的:

 如果cron.allow文件存在,只有列在文件中的用户才能创建、编辑、显示和删除crontab文件。

 如果cron.allow不存在,除列在cron.deny文件中用户名的用户外,所有用户都能创建、编辑、显示和删除crontab文件。

 如果cron.allow和cron.deny文件都不存在,只有超级用户才能使用crontab命令。

cron.deny文件系统初始化安装时就已经存在,cron.deny默认的内容如下:

$ cat /etc/cron.d/cron.deny

daemon

bin

smtp

nuucp

listen

nobody

noaccess

列在cron.deny中的用户都不能使用crontab命令。你可以编辑文件以添加或删除用户名。

而cron.allow文件在默认情况下是不存在的,必须由用户创建。所以,当系统刚安装好后,除了列在cron.deny用户外,其他所有用户都可以使用crontab命令。如果你建立cron.allow文件,那么就只有列在这个文件中的用户可以使用crontab命令。

系统资源的一次性定时调用

使用at命令,可以使系统在以后的某个时刻执行一项命令或程序,从而实现系统资源的调用。
1.at命令的使用

命令介绍:

$ at [-m] time [date]

参数:

 -m执行完后给执行用户邮件通知。

 time执行命令的时间,以小时或分钟表示。

 data执行命令的时间,以天数表示。

 例14-26 使用at命令实现定期执行任务。

(1)创建定期执行的任务。

在下午19:30分执行删除/home/jones/*.backup文件的任务:

$ at -m 1930

at> rm /home/jones/*.backup

at> Press Control-D

job 897355800.a at Thu Jul 12 19:30:00 2004

(2)显示定期执行任务队列。

使用atq命令可以查看任务队列:

$ atq

Rank Execution Date Owner Job Queue Job Name

1st Jul 12, 2004 19:30 jones 897355800.a a stdin

2nd Jul 14, 2004 23:45 jones 897543900.a a stdin

3rd Jul 17, 2004 04:00 jones 897732000.a a stdin

(3)显示定期执行的任务。

$ at -l

897543900.a Sat Jul 14 23:45:00 2004

897355800.a Thu Jul 12 19:30:00 2004

897732000.a Tue Jul 17 04:00:00 2004

(4)删除定期执行的任务。

先显示定期执行任务,再用at –r命令来删除:

$ at -l

897543900.a Sat Jul 14 23:45:00 2003

897355800.a Thu Jul 12 19:30:00 2003

897732000.a Tue Jul 17 04:00:00 2003

$ at -r 897732000.a

$ at -l 897732000.a

at: 858142000.a: No such file or directory
2.如何控制用户使用at命令

通过/etc/cron.d目录下的at.deny文件,我们可以控制使用at命令的用户。这个文件与用户名相关,一个用户名在文件中列为一行。凡是列入这个文件的用户,都禁止使用at命令。

系统安装好后,at.deny就已经默认存在了。它包含下列用户名:

daemon

bin

smtp

nuucp

listen

nobody

noaccess

超级用户可以编辑at.deny文件,以增加和删除用户。

TOP

Part 2 系统性能的监控与进程的管理

监测和管理系统性能是系统管理员一项非常重要的任务。监测结果可以判断当前用户的应用和系统服务是否有效执行;管理系统进程是系统性能调优的重要手段。本章将介绍系统性能的监控和进程的管理方法。

监控系统性能

Solaris提供了许多监控工具来监控设备和核心部件的运行情况。本节将介绍一些传统的监控工具。值得一提的是,Solaris 10推出的dtrace超越了传统的UNIX系统提供的性能工具,可以用dtrace的sysinfo provider来完成所有的性能分析工作。有关dtrace的详细介绍。

虚拟内存的统计显示

可以使用vmstat命令来报告虚拟内存的统计信息和系统事件信息,如CPU负载、内存分页、设备中断、系统调用等。此外,vmstat命令还可以显示SWA区交换、缓存和中断的统计信息。

vmstat命令的输出
1.显示虚拟内存的统计信息

使用vmstat n命令可以显示虚拟内存的统计信息,其中n为每次报告的时间间隔秒数。

 例15-1 使用vmstat命令每5秒报告一次虚拟内存信息。

$ vmstat 5

kthr memory page disk faults cpu

r b w swap free re mf pi po fr de sr dd f0 s1 -- in sy cs us sy id

0 0 0 863160 365680 0 3 1 0 0 0 0 0 0 0 0 406 378 209 1 0 99

0 0 0 765640 208568 0 36 0 0 0 0 0 0 0 0 0 479 4445 1378 3 3 94
2.显示系统事件的信息

 例15-2 使用vmstat –m来显示系统启动以后发生的多个系统事件信息。

$ vmstat -s

0 swap ins

0 swap outs

0 pages swapped in

0 pages swapped out

522586 total address trans. faults taken-----地址解析错误数量

17006 page ins

25 page outs

23361 pages paged in

28 pages paged out

45594 total reclaims

45592 reclaims from free list

0 micro (hat) faults

522586 minor (as) faults

16189 major faults

98241 copy-on-write faults

137280 zero fill page faults

45052 pages examined by the clock daemon

0 revolutions of the clock hand

26 pages freed by the clock daemon

2857 forks

78 vforks

1647 execs

34673885 cpu context switches

65943468 device interrupts

711250 traps

63957605 system calls

3523925 total name lookups (cache hits 99%)

92590 user cpu

65952 system cpu

16085832 idle cpu

7450 wait cpu
3.显示交换数据统计信息

 例15-3 显示交换数据统计信息。

$ vmstat -S

kthr memory page disk faults cpu

r b w swap free si so pi po fr de sr dd f0 s1 -- in sy cs us sy id

0 0 0 862608 364792 0 0 1 0 0 0 0 0 0 0 0 406 394 213 1 0 99
4.显示系统中每个设备的中断信息

 例15-4 显示系统中每个设备的中断信息。

$ vmstat -i

interrupt total rate

------------------------------------------------------------------------------------------

clock 52163269 100

esp0 2600077 4

zsc0 25341 0

zsc1 48917 0

cgsixc0 459 0

lec0 400882 0

fdc0 14 0

bppc0 0 0

audiocs0 0 0

------------------------------------------------------------------------------------------

Total 55238959 105

显示磁盘的使用信息

使用iostat命令可以报告磁盘的输入/输出(I/O)的统计信息,并检测磁盘的吞吐量、利用率、队列、处理速率和服务时间。
1.显示磁盘的利用率信息

 例15-5 每5秒钟采集一次磁盘使用信息。

$ iostat 5

tty sd0 sd6 nfs1 nfs49 cpu

tin tout kps tps serv kps tps serv kps tps serv kps tps serv us sy wt id

0 0 1 0 49 0   0 0 0 0 0 0 0 15 0 0 0 100

0 47 0 0 0 0  0 0 0 0 0 0 0 0 0 0 0 100



2.显示扩展磁盘的信息

 例15-6 显示扩展磁盘信息。

$ iostat -xtc

extended device statistics tty cpu

device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id

fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0 0 0 0 100

sd0 0.0 0.0 0.4 0.4 0.0 0.0 49.5 0 0

sd6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0

nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0

nfs49 0.0 0.0 0.0 0.0 0.0 0.0 15.1 0 0

nfs53 0.0 0.0 0.4 0.0 0.0 0.0 24.5 0 0

可见,也采集了远程NFS的磁盘信息。

每一列数据的具体意思为:

 device:显示设备名。

 r/s:每秒读磁盘的次数。

 w/s:每秒写磁盘操作的次数。

 kr/s:显示每秒读数据总量(单位为KB)。

 km/s:显示每秒写数据总量(单位为KB)。

 wait:显示平均的等待事物数量。

 actv:显示正在处理的平均事物数量。

 svc_t:显示平均服务周期(单位为ms)。

 %w:显示等待时间的百分数。

 %b:显示磁盘工作时间的百分数。
15.1.3 显示CPU负载信息

下面的命令是每5秒产生两次处理器的统计数据报告。命令显示了处理器集合与每个CPU的成员关系。默认用户和系统操作的输出是按照CPU号,处理器集合排序。默认用户和系统操作的输出是按照CPU号或者处理器集合排序的。(本例中是按处理器集合排序的。)

 例15-7 使用mpstat命令显示cpu负载。


mpstat输出说明

变 量--说 明

SET--SET是处理器集合
minf--一般错误的个数
mjf--主要错误的个数
xcal--处理器间的交叉调用
intr--中断
ithr--线程中断,不包括时钟中断
csw--上下文切换数
icsw--非主动的上下文切换数
migr--转移到其他CPU的线程数
smtx--在互斥锁mutexes上的自旋(第一次试图获得锁,未果)的次数
srw--在读/写锁上自旋(第一次试图获得锁,未果)的次数
syscl--系统调用
usr--用户时间百分比
sys--系统时间百分比
wt--等待时间百分比
idl--CPU空闲时间百分比
sze--请求的处理器集合中的处理器个数

有关mpstat输出的几点说明:

 CPU占用率的统计由于舍入错误,可能存在百分比数字的总和不是100的情况。

 CPU处理的总时间是用户和系统操作报告的usr和sys值的和。而wt报告的值是处理器空闲等待IO操作的时间。idl报告的值是CPU因除去等待磁盘IO操作外其他任何原因而空闲的时间。所以,CPU空闲的时间总数应该是wt和idl输出值之和。

 wt的值高意味着磁盘系统的问题,不是CPU和其他部分的问题。过高的wt时间百分比必须通过提高磁盘设备性能来解决。

 当在一个分区(zone)里执行,如果pools facility处于活动状态,mpstat将只提供属于zone绑定的pool的处理器集合的成员的那些处理器的信息。

监控系统活动信息

收集系统性能数据的一种最通用的方法是使用sar命令。sar命令功能强大,参数众多。sar命令的常用格式:

sar [options] [-A] [-o file] t [n]

在命令行中,n和t两个参数组合起来定义采样间隔和次数:t为采样间隔,是必须有的参数;n为采样次数,是可选的,默认值是1。-o file表示将命令结果以二进制格式存放在文件中,file在此处不是关键字,是文件名。options为命令行选项,sar命令的选项很多,下面只列出常用选项:

 -A 所有报告的总和。

 -u CPU利用率。

 -v 进程、I节点、文件和锁表状态。

 -d 硬盘使用报告。

 -r 没有使用的内存和swap硬盘块。

 -g 串口I/O的情况。

 -b 缓冲区使用情况。

 -a 文件读写情况。

 -c 系统调用情况。

 -R 进程的活动情况。

 -y 终端设备活动情况。

 -w 系统交换活动。

 例15-8 使用sar命令,每60秒采样一次,连续采样5次,观察CPU的使用情况,并将采样结果以二进制形式存入当前目录下的文件text中。

# sar -u -o text 60 5

SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001

14:43:50 %usr %sys %wio %idle(-u)

14:44:50 0 1 4 94

14:45:50 0 2 4 93

14:46:50 0 2 2 96

14:47:50 0 2 5 93

14:48:50 0 2 2 96

Average 0 2 4 94

对显示内容进行解释:

 %usr CPU处在用户模式下的时间百分比。

 %sys CPU处在系统模式下的时间百分比。

 %wio CPU等待输入输出完成时间的百分比。

 %idle CPU空闲时间百分比。

在上面的显示内容中,我们应特别注意%wio和%idle值。%wio的值过高,表示硬盘存在I/O瓶颈;%idle值高,表示CPU较空闲。如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量;%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统需要更换处理能力更强的CPU。

如果要查看二进制文件text中的内容,则需键入如下sar命令:

# sar -u -f text

可见,sar命令既可以实时采样,又可以对以往的采样结果进行查询。

sar命令的用法很多,有时判断一个问题,需要结合运行有不同选项sar命令,比如,怀疑CPU存在瓶颈,可用sar -u和sar -q来看;怀疑I/O存在瓶颈,可用sar -b、sar -u和sar-d来看。对于sar命令其他参数的使用请读者自己去参考使用,这里不再多说。

[ 本帖最后由 云杉上的蝴蝶 于 2008-4-12 01:49 编辑 ]

TOP

系统进程的管理

优化管理系统进程可在不增加更多的硬件资源的情况下,提升系统性能。本节主要介绍系统进程的优化管理。

进程管理概述

众所周知,Solaris是个多用户多任务的操作系统,多用户多任务就意味着有更多的进程。为了统一管理系统上正在运行的进程,所有进程都被赋予一个惟一的标志号(PID),内核根据PID来跟踪和管理进程。PID也可以被root和普通用户用来标识和控制他们的进程。

要运行程序,必然要为其分配其相应的资源。我们监控进程,目的是在保证应用服务可以有效地进行的同时,消耗与服务相适应的资源。整个系统的稳定运行,也依赖于对资源的合理分配。经验证明,系统性能的降低往往是因为应用程序所产生的某些进程消耗了过多的系统资源。

系统进程的管理,是系统管理员的基本工作之一。主要是检查那些没有必要而长期占用资源的进程。处理这些问题进程的方法通常是将它们关闭。在管理进程的时候需要特别注意不要轻易杀死系统本身的进程,这样有可能造成系统的故障甚至崩溃。

进程管理的方法介绍
1.使用ps命令报告进程状态

使用ps命令报告进程状态,可以确定哪个进程正在进行;查看一个进程是否完成;查看一个进程是被挂起了还是遇到困难了;确定进程已经运行了多久;查看进程使用的资源;在杀掉一个进程前找到它的PID。所有这些对用户和系统管理员均有用处。

用户用不带任何参数的ps命令来查看自己的进程列表,不包括任何系统或其他用户的进程。如下:

$ ps

PID TTY TIME CMD

1664 pts/4 0:06 csh

2081 pts/4 0:00 ps

默认的ps列表内容一般只包括:进程标志号(PID)、执行命令的终端(TTY)、进程的CPU耗时(TIME),以及执行的命令(CMD)。

ps命令的主要选项

选 项--说 明
-a--列出最常被请求的进程
-A,-e--列出所有进程
-c--以调度程序格式列出进程
-d--列出所有进程
-f--打印进程的详细信息
-g--打印指定用户组的进程信息
-G--以组为单位打印不同用户组的信息
-j--在输出中包括SID和PGID
-l--打印完整的进程信息
-L--显示LWP的详细资料
-p--根据指定进程列表列出进程的详细资料
-P--列出进程绑定的CPU ID
-s--列出会话线索
-t--列出与特定终端有关的所有进程
-u--列出与一个特定用户有关的所有进程

显示系统进程时最常用的命令就是ps –ef。-e参数是列出系统中所有的进程,-f参数是列出进程的细节信息。

$ ps -ef

UID PID PPID C STIME TTY TIME CMD

root 0 0 0 Dec 20 ? 0:17 sched

root 1 0 0 Dec 20 ? 0:00 /etc/init -

root 2 0 0 Dec 20 ? 0:00 pageout

root 3 0 0 Dec 20 ? 4:20 fsflush

root 374 367 0 Dec 20 ? 0:00 /usr/lib/saf/ttymon

……

其中,UID为进程拥有者的用户ID;PPID为父进程的ID;C为处理器的利用率;STIME为进程开始的时间;TTY为进程或者它的父进程开始的终端。

另外,在综合反映系统进程的工具中,top也不错,它可对进程按照CPU负载的大小进行排序。限于篇幅,这里不再展开。
2.使用proc工具操作数据

proc工具主要用来操作/proc文件系统中数据。每个工具都以PID为参数,并执行与该PID相关的操作。

proc工具命令列表:

进程命令--描 述
pcred--显示进程的可信度
Pfiles--显示已打开文件的fstat和fcntl信息
pflags--显示每个lwp的/proc跟踪标志,等待和待有信号量及其他状态信息
pldd--显示链接到每个进程的动态链接库
pmap--显示地址映射空间
psig--显示信号操作
pstack--显示每个lwp的十六进制与符号堆跟踪
ptree--显示包含指定PID的进程树
pwdx--显示当前工作目录
pstop--停止进程
prun--重新启动进程
ptime--使用微状态计算进程时间
pwait--等待指定的进程终止

 例15-9 分析cron进程。

(1)查找cron的进程号:

# pgrep cron

4780

(2)显示cron进程工作的目录:

# pwdx 4780

4780: /var/spool/cron/atjobs

(3)显示进程树:

# ptree 4780

4780 /usr/sbin/cron

(4)显示已打开文件的fstat和fcntl信息,这对于确定数据文件和应用程序之间的依赖关系十分有用。

# pfiles 4780

4780: /usr/sbin/cron

Current rlimit: 256 file descriptors

0: S_IFCHR mode:0666 dev:290,0 ino:6815752 uid:0 gid:3 rdev:13,2

O_RDONLY|O_LARGEFILE

/devices/pseudo/mm@0:null

1: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771

O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE

/var/cron/log

2: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771

O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE

/var/cron/log

3: S_IFIFO mode:0600 dev:32,128 ino:42049 uid:0 gid:0 size:0

O_RDWR|O_LARGEFILE

/etc/cron.d/FIFO

4: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0

O_RDWR|O_NONBLOCK

5: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0

O_RDWR

 例15-10 启动和关闭dtpad进程。

(1)显示dtpad进程PID:

# pgrep dtpad

2921

(2)停止进程:

# pstop 2921

(3)重新启动进程:

# prun 2921
3.终止进程

当某个进程处于死循环,或者进程运行时间比较长的时候,管理员或用户就需要结束这些进程。一般而言,用户可以结束他自己的任何进程;超级用户可以结束除了PID为1、2、3和4的其他任何进程。结束进程需要小心谨慎,否则可能会导致系统的崩溃。

kill命令

使用kill命令可以终结进程,用法如下:

$ kill [signal-number] pid

其中,signal-number为信号,如果不用信号时,系统默认发送信号15(SIGKILL),可以终结进程;使用-9时可快速终结进程,建议在结束数据库或LDAP等进程时不要使用,因为这样可能会导致数据的丢失。

kill命令在进行进程间通信时使用的主要信号:

信 号--代 号--行 为--描 述
SIGHUP--1--退出--挂起
SIGINT--2--退出--中断
SIGQUIT--3--核心--退出
SIGILL--4--核心--非法指令
SIGTRAP--5--核心--追踪
SIGABRT--6--核心--中止
SIGEMT--7--核心--仿真陷阱
SIGFPE--8--核心--算术异常
SIGKILL--9--退出--已取消
SIGBUS--10--核心--总线错误
SIGSEGV--11--核心--段错误
SIGSYS--12--核心--异常系统调用
SIGPIPE--13--退出--断开通道
SIGALRM--14--退出--报警时钟
SIGTERM--15--退出--终止

pkill命令

使用pkill命令也可以终止进程,它搜索与命令行指定字符相匹配的进程,并给这些进程发信号。比如,希望取消进程名与“Java”有关的所有进程,可以使用下面的命令:

$pkill –9 Java

killall命令

killall命令用来取消系统中的所有进程。在系统运行级别为0时,由shutdown命令来调用killall命令。
4.进程管理

下面是一些在系统中可以设置的进程调度类。

 公平共享调度类:Fair share (FSS)

 固定调度类:Fixed (FX)

 系统调度类:System (SYS)

 交互调度类:Interactive (IA)

 实时调度类:Real-time (RT)

 分时调度类:Timesharing (TS)

用户的策略主要使用分时调度类进行进程管理,它的具体特性如下:

 具有用户的优先权队列,即从-60到+60。

 用户模式的优先权是可以从父进程继承的。

 系统在分时派分参数表中查看用户的优先权,然后使用nice或priocntl命令确保将其加入到全局优先权中。

可以通过dispadmin命令来进行进程调度类的管理。
dispadmin命令选项列表

选 项--说 明
-l--列出系统具有的调度类
-g--显示所指定调度类(以-c选项指定)的调度表
-r--设定系统时间的分辨率(resolution)
-s--以文件取代-c来指定调度类

 例15-11 显示系统的调度类。

# dispadmin -l

CONFIGURED CLASSES

=====================

SYS (System Class)

RT (Real Time)

TS (Time Sharing)

由这个指令的输出可以获知系统有哪些调度类,即使调度类名称被修改,也能由此知道。

在了解进程的调度级之后,我们介绍进程的优先权。优先权是在调度类框架下对进程的进一步的管理。

下面将介绍两个管理进程的优先权的命令:priocntl和nice。

priocntl命令

可以使用priocntl命令完成以下工作。

(1)显示进程调度类和优先权队列。

使用-l选项也可以显示进程的调度类信息:

# priocntl -l

CONFIGURED CLASSES

==================

SYS (System Class)

TS (Time Sharing)

Configured TS User Priority Range: -60 through 60

FX (Fixed priority)

Configured FX User Priority Range: 0 through 60

IA (Interactive)

Configured IA User Priority Range: -60 through 60

使用-ecl选项在PRI栏目下可以显示进程的全局优先级:

$ ps -ecl

F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME COMD

19 T 0 0 0 SYS 96 f00d05a8 0 ? 0:03 sched

8 S 0 1 0 TS 50 ff0f4678 185 ff0f4848 ? 36:51 init

19 S 0 2 0 SYS 98 ff0f4018 0 f00c645c ? 0:01 pageout

19 S 0 3 0 SYS 60 ff0f5998 0 f00d0c68 ? 241:01 fsflush

8 S 0 269 1 TS 58 ff0f5338 303 ff49837e ? 0:07 sac

8 S 0 204 1 TS 43 ff2f6008 50 ff2f606e console 0:02 sh

(2)指定进程的优先级。

可以为某个进程指定一个优先级,比如:

# priocntl -e -c TS -m 60 -p 60 find . -name core –print

这个命令就是给find进程指定的优先级为60。其他参数选项的意义是:

 -e运行命令。

 -c指定进程的调度类,TS为分时调度类的简写,其他调度类依次类推。

 -m当使用-p选项时,-m选项为用户可以提高或降低的最大优先级的数量。

 -p用户设定的优先级数。

(3)如何改变进程的调度类。

 例15-12 改变uid为15249的用户所有进程的调度类。

# priocntl -s -c RT -i uid 15249

其中:

 -s改变当前的优先级。

 -c设定调度类,RT就是所设定的调度类。

 -I指定用户或进程的ID。

(4)如何使用nice改变分时调度类进程的优先级。

Solaris 10支持nice命令是为了和以前版本的Solaris兼容。现在,在管理进程这一方面priocntl命令是最合适的。nice命令的优先级队列从0到39,0代表最高的优先级。对于分时调度类nice的默认优先级是20。

由于数值越大,nice用户的优先级越低。一般用户可以通过增大数值的办法来降低进程的优先级。可以使用下面的命令:

$ /usr/bin/nice -5 command-name

只有超级用户或等同的角色用户才能增加进程的优先级。增加进程的优先级,可使用下面的命令:

# /usr/bin/nice --10 command-name

TOP