Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152275
  • 博文数量: 18
  • 博客积分: 3730
  • 博客等级: 中校
  • 技术积分: 1022
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-15 20:15
文章分类
文章存档

2008年(18)

我的朋友

分类: BSD

2008-06-26 11:34:55

4.2 系统资源限制

如果您的 FreeBSD 系统允许多位使用者同时使用,每个使用者可能同时执行许多工作,例如 Alex 可能会执行庞大的数学运作程序,而 Tom 在系统中执行占用海量存储器的数据库程序。如此一来,我们的系统资源将全部被几个使用者耗尽,其它正常的系统服务便无法拥有较高的效能。我们不能单纯的假设系统中所有使用者都会乖乖的使用单纯的服务,因此,在一个多重使用者的环境中,系统管理者有必要针对每个使用者限于他们所可以使用的系统资源,例如 CPU、内存、磁盘空间的使用量等。

4.2.1 登入类别

我们在新增使用者时会设定使用者的 login class,所谓的 login class 就是将使用者分类管理,以限制不同类别的使用者对于系统资源的使用。

/etc/login.conf 定义了不同的 login class。这个档案中所有对于使用者限制的设定都是以 key=value 的方式来表示。这些限制大部份是针对某个使用者所执行的某一个行程 (process) 所能占用的资源,而非该使用者全部执行的行程所占用的资源总合。因此,除了每个行程所能占用的资源外,我们还会设定使用者最多可以执行多少个行程。

以下为 /etc/login.conf 中关于 default class 的设定:

# defaults
# These settings are used by login(1) by default for classless users
# Note that entries like "cputime" set both "cputime-cur" and "cputime-max"

default:\
	:passwd_format=md5:\
	:copyright=/etc/COPYRIGHT:\
	:welcome=/etc/motd:\
	:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:\
	:path=/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin
	:nologin=/var/run/nologin:\
	:cputime=unlimited:\
	:datasize=unlimited:\
	:stacksize=unlimited:\
	:memorylocked=unlimited:\
	:memoryuse=unlimited:\
	:filesize=unlimited:\
	:coredumpsize=unlimited:\
	:openfiles=unlimited:\
	:maxproc=unlimited:\
	:sbsize=unlimited:\
	:vmemoryuse=unlimited:\
	:priority=0:\
	:ignoretime@:\
	:umask=022:
	

以下为关于系统资源限制的字段说明,每一个字段都有可使用的数值类型,例如 size、time 等,让我们来看看每个字段的说明:

字段名称 数值类型 说明
coredumpsize Size 当使用者所执行的程序出了问题 (coredump),系统会将该程序的执行状况从内存中写到硬盘上,这个值就是在限制 core file 的档案大小。如果使用者所执行的程序是需要消耗许多内存的程序,则所产生的 core file 也会很大。这个值不应该比使用者的磁盘配额限制大。
cputime Time 这是一个行程所能使用的最长 CPU 时间,这个时间指的不是我们在 top 或 ps 中看到的 CPU usage 百分比,而是一个行程所使用的 CPU 时间。当超过时间,系统核心会自动停止该行程。
filesize Size 使用者单一档案的最大容量。我们对于使用者磁盘配额只能限制使用者对于硬盘的使用总额,而这个设定可以限制单一档案的大小。
maxproc Number 限制使用者最多可以执行的行程总量。这个限制包含所有以该使用者名称所执行的程序,有的程序在执行时,会自动产生许多子行程,如果这个值设定的太小,可能会造成使用者的困扰。
memorylocked Size FreeBSD 系统中有所谓的虚拟内存空间,当物理内存不足时,系统会将某部份的内存数据放到虚拟内存中。而有的程序会使用 mlock() 这个系统呼叫要求系统将它所占用的内存空间全部放在物理内存中,memorylocked 就是限制使用 mlock() 的内存大小。
memoryuse Size 限制行程最大的内存使用量,包含物理内存及虚拟内存。
openfiles Number 限制使用者同一时间最多可以开启的档案数量。所谓的档案数量包含了一般的档案及 socket。
sbsize Size 用以限制最大的网络缓冲区的使用量。
stacksize Size 行程可使用的最大堆栈 (stack) 空间。

以下为上表中数值类型的说明:

类型 说明
Size 我们可以单纯的以数字来表示 Size,预设的单位是 byte。例如 1234 表示 1234 bytes。除此之外,我们也可以在数字之后加上单位。例如:
    b: 表示 512-byte block (1b = 512bytes)。
    k: 表示 kilobytes,即 KB (1k=1024 bytes)。
    m: 表示 megabytes,即 MB (1m=1048576 bytes)。
    g: 表示 gigabytes,即 GB。
    t: 表示 terabytes,即 TB。
Time 当我们只写数字时,预设的单位是秒。或者我们也可以在数字后加上单位 y (年)、w (周)、d (天)、h (时)、m (分)、s (秒)。

例如,三小时四十分可以表示为:13200s、220m、或是 3h40m。

Number 您可以使用 0 到 9 的数字,预设为十进制。您也可以使用开头为 0x 的数字来表示十六进制。

当要修改类别时,我们以将 default class 复制一份,并更名为其它类别,最后再进行编辑。类别新增完毕后,我们必须执行下列指令以重建系统数据库。

# cap_mkdb /etc/login.conf

接下来我们就可以执行 vipw 在想要限制的使用者的 class 的字段填入我们新增的类别了。

除了限制系统资源的使用外,我们也可以使用 login.conf 来客制化每个使用者的登入环境、所使用的语言等,请 man login.conf 以得到更多的说明。

小提示

使用 login.conf 来设定 class 的好处是您可以统一在一个地方设定不同类别使用者的权限及系统资源的使用量,对于需要管理大量使用者时十分有用。

4.2.2 磁盘配额

当系统中有多位使用者时,如果其中一个人拥有大量档案,那么其它使用者便无法有足够的空间来使用。如果系统有许多使用者,而又不限制他们对磁盘的使用量,那么磁盘很容易就会爆掉,因此我们必须对使用者加以限制。您可以限制系统中每个使用者可使用的硬盘大小(quota)。步骤如下:

  • 在核心设定中加入 options QUOTA 这一行,并重新编译核心。
  • 在 /etc/rc.conf 中加入一行 enable_quotas="YES"。
  •  在 /etc/fstab 中要启加磁盘限制的分割区中加入参数 userquota ,您也可以加入 groupquota 来限制群组的配额。
# Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/ad0s1b	none	swap	sw	0	0
/dev/ad0s1a	/	ufs	rw	1	1
/dev/ad1s1f	/home	ufs	rw,userquota	2	2
/dev/ad0s1e	/usr	ufs	rw	2	2
/dev/ad1s1e	/var	ufs	rw	2	2
  • 重开机并设定使用者的 quota 限制。

完成了上述的步骤并重新开机之后,我们就可以使用指令 edquota 来编辑磁盘配额。首先,以指令 edquota -u tom 进入文书编辑,我们通常会加入二行,一行限制档案大小,一行限制档案数:

Quotas for user tom:
/home: blocks in use: 65, limits (soft = 50000, hard =55000)
        inodes in use: 7, limits (soft = 5000, hard = 6000)

共中 blocks 代表使用者使用档案大小总合,而 inodes 代表档案数目。soft limits 代表使用量达到多少时提出警告,而 hard limits 代表使用量达多少时立刻禁止写入。

上面的范例中,使用者 tom 目前使用的档案大小为 65K,在档案大小总合为 50000K 时提出警告,55000K 时禁止写入。目前该使用者有7个档案,在档案数达 5000 个时提出警告,达 6000 个时禁止写入。

我们也可以使用 edquota -p tom 2000-3000 来以使用者 tom 的设定为范例,将 UID 为 2000 到 3000 的使用者设定为和 tom 一样。或者使用指令 edquota -p tom jack rose 来以使用者 tom 为范例,将 jack 及 rose 的设定变成和 tom 一样。

您可以使用 quota -v tom 来看使用者 tom 目前的使用情形,或使用 repquota 来查看所有使用者目前的使用情形。

在 FreeBSD 3.2 以后的版本,系统开机后预设会检查所有使用者的 quota,但这必须要花上一段时间,如果您不想在开机时自动检查 quota 的话,请在 /etc/rc.conf 中加入下列设定:

check_quotas="NO"

在 FreeBSD 3.2 版以前,开机内定是不检查 quota 的,如果你想在开机时即检查的话,请在 /etc/rc.conf 中加入下列设定:

check_quotas="YES"
阅读(1546) | 评论(0) | 转发(0) |
0

上一篇:du

下一篇:防火墙加入核心

给主人留下些什么吧!~~