- 论坛徽章:
- 0
|
5.4 资源配置管理
为了确保一些大型应用程序(如Oracle)运行良好,需要为其分配合理的系统资源,如:内存空间、信号灯、CPU时间等,这些系统资源的分配在以往操作系统中通常通过可调的内核参数在”/etc/system”文件中设定, 这种方式需要重新启动机器才能使修改生效,但Solaris 10版本中的系统资源配置管理较之前的版本有较大的变化, 在Solaris10中保留了这种传统做法,另外还提供了另一种动态设置参数的方式,不需要重新启动OS就可以修改这些系统限制,以下Solaris 10中资源配置管理的例子都是基于Oracle的应用.Oracle是一个由多进程组成的程序, 不同的进程之间利用不同的IPC方式实现不同的功能,IPC需要占用系统开销,对Oracle应用程序的资源限制实际上是设定IPC所能占用的系统开销(有关IPC的介绍,请参考本节附录).
有关IPC调整的内核参数及其默认值在Solaris10和以前版本已有所变化,且一些参数已被废止,参见下表(单位为字节).
旧的内核参数标识 默认值 新的资源控制标识 默认值 最大值
共享内存
Share Memory shminfo_shmmni 100 project.max-shm-ids
(一个project可建立最多共享内存数) 128 224
shminfo_shmmax 0x800000 project.max-shm-memory
(一个project使用的共享内存可占用系统内存数) 1/4*物理内存 UINT64_MAX
信号灯
Semaphore seminfo_semopm 10 process.max-sem-ops
(每个进程中调用semop(2) 需要执行的最大操作数) 512 INT_MAX
seminfo_semmsl 25 process.max-sem-nsems
(各信号灯集中最大信号灯数量) 512 SHRT_MAX
seminfo_semmni 10 project.max-sem-ids
(一个project可以建立的信号灯集个数) 128 224
消息队列
Message Queues msginfo_msgmnb 4096 process.max-msg-qbytes
(进程使用的消息队列的消息的最大字节数) 65536 ULONG_MAX
msginfo_msgtql 40 process.max-msg-messages
(进程使用的消息队列上最多消息数) 8192 UINT_MAX
msginfo_msgmni 50 project.max-msg-ids
(一个project允许建立的消息队列数) 128 224
5.4.1 基于项目调整
项目(project)是Solaris Resource Management(资源管理)中的基本单位。通过几个系统命令(projects,projadd,projmod,projdel)对系统资源进行控制. 基于项目方式设置的资源控制在系统重新启动后也不会丢失.本节将以Oracle在Solaris10上进行安装为例,以project为单位为Oracle用户分配所有与之相关的资源。
step1. 为oracle用户创建新的项目.
# id –p oracle
uid=605(oracle) gid=601(dba) projid=3(default)
# projadd -U oracle -p 1233 -c "oracle parameters setting" user.oracle
其中:
-U: 指定应用到该项目的用户列表.
-c: 项目的描述信息.
-p: 非负整数,项目ID号.
# id –p oracle
uid=605(oracle) gid=601(dba) projid=1233(user.oracle)
如果没有为用户创建特定的项目,则该用户默认的项目为default,可以在项目数据库”/etc/project”中查看到,或者通过”id –p <useraname>”命令查看.
# id –p oracle
uid=605(oracle) gid=601(dba) projid=3(default)
step2. 为项目添加属性.
# projmod -a -K "project.max-shm-memory=(priv,17179869184,deny)" \
user.oracle (设置最大共享内存为12G,系统物理内存为32G,单位为字节.)
# projmod -a -K "project.max-sem-ids=(priv,2000,deny)" user.oracle
# projmod -a -K "process.max-sem-nsems=(priv,2048,deny)" user.oracle
# projmod -a -K "project.max-shm-ids=(priv,256,deny)" user.oracle
其中:
-a: 表示将属性追加到该项目数据库中(-r为删除).
-K: 代表key,用于指定具体的属性,可以一次设置多个属性值,格式为:
-K key1=value1 -K "key2=(value2a),(value2b)"
# cat /etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
user.oracle:1233 racle parameters setting racle::process.max-sem-nsems=(priv,2048,deny);
project.max-sem-ids=(priv,2000,deny);
project.max-shm-ids=(priv,256,deny);
project.max-shm-memory=(priv,17179869184,deny)
step3. 查看项目当前的设定值.
# prctl $$ (查看所有项目的属性)
# prctl -n project.max-shm-memory $$ (查看当前用户的属性值)
process: 16830: -sh
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 7.81GB - deny -
system 16.0EB max deny -
root用户默认可用的共享内存为7.81GB,约为物理内存的1/4.
# prctl -n project.max-shm-memory -i project user.oracle
project: 1233: user.oracle
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 12.0GB - deny -
system 16.0EB max deny -
5.4.2 在运行时动态设定
除了基于Project方式来控制系统的资源之外,系统还通过”prctl”工具提供另一种动态设定资源的方法,但经prctl工具设置的系统资源限制只有在当前的系统生效,在系统重新启动后这些设置将会丢失.
如在系统运行时将oracle用户最大能使用的共享内存由12GB改为10GB:
# prctl -n project.max-shm-memory -r -v 10g -i project user.oracle
-r: 替代数据库中该项目已有的属性值.
-v: 指定新的目标值.
# prctl -n project.max-shm-memory -i project user.oracle
project: 1233: user.oracle
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 10.0GB - deny -
system 16.0EB max deny
5.4.3 附录:IPC简介
IPC(即进程间通信)是Inter Process Communication的简称。系统中的各种服务,用户程序在运行状态都可以看成为进程。一个应用程序执行后可以是一个进程,该进程由一个或多个线程组成,它们共享地址空间协同作业完成任务,比如我们常用的单线程、单进程运行的程序/usr/bin/bash.应用程序也可以由多个进程组成,每个进程也可以为多线程,比如常用数据库Oracle,就由有多个进程组成。而不同的进程之间利用不同的IPC方式实现不同的功能.
System V(如Solaris)内核采用的IPC机制主要有三种方式:
共享内存(Share Memory): 为多个进程间提供共享数据区域.共享内存是速度最快,效率最高的IPC方式。它使得同一物理内存页(RAM)可以被多个进程同时访问。共享内存的模块本身也是由内核动态加载的。实际上,共享内存的实现方式并不是真的把一块内存同时放到两个进程的地址空间中去,而是各进程把同一块物理内存映射到自己的地址空间,使它看起来好像同时为两个进程所用。
消息队列(Message Queues): 是在”消息”传输过程中保存”消息”的容器,主要是为交换数据而设计的, 消息队列及其数据存在于内核空间,进程存取数据开销相对大一些,得到的是从内核空间拷贝出来的数据。
信号灯(Semaphore): 是为了同步对共享资源的访问而存在的一种进程间通信机制。它本身不在进程间交换数据,而是控制不同进程访问同一资源。 |
|