Solaris系统SHM共享内存使用方法

来源:互联网 发布:黑莓passport淘宝 编辑:程序博客网 时间:2024/05/19 16:33
1. 基础知识
系统V共享内存是已知的Unix /Linux系统中最快的进程间通信方式,那么要想采用SHM方式申请共享内存需要做哪些操作呢?


In Solaris 10, you are not required to make changes to the/etc/system file to implement the System V IPC. Solaris 10 uses the resource control facility for its implementation.


即:在Solaris10中,采用project方式管理资源代替之前版本中用/etc/system文件管理。


Solaris10操作系统默认SHM共享大小为1/4物理内存。测试主机内存8G,那么默认SHM共享内存大小为2G左右。
举例:
bl480g1<g-yang>:id -p
uid=61902(g-yang) gid=1(other) projid=100(default)
bl480g1<g-yang>:prctl -n project.max-shm-memory $$
process: 1108: -csh
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 1.97GB - deny -
system 16.0EB max deny -


2. 修改参数
In Solaris 10, you are not required to make changes to the/etc/system file to implement the System V IPC. Solaris 10 uses the resource control facility for its implementation. However,Oracle recommends that you set both resource control and /etc/system/ parameters. Operating system parameters not replaced by resource controls continue to affect performance and security on Solaris 10 systems. For further information, contact your Sun vendor.


在Solaris9中,需要在/etc/system中设置如下参数:
set noexec_user_stack=1
set semsys:seminfo_semmni=100
set semsys:seminfo_semmns=1024
set semsys:seminfo_semmsl=256
set semsys:seminfo_semvmx=32767
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmmni=100


在Solaris10中,部分设置已无效:


其中,
shmsys:shminfo_shmmax 共享内存段(shared memory segment)最大值
shmsys:shminfo_shmmin 共享内存段(shared memory segment)最小值
shmsys:shminfo_shmmni 共享内存标志符(shared memory identifiers)的数量,系统中共享内存段的最大个数。
semsys:seminfo_semmni 系统中semaphore identifierer的最大个数。
semsys:seminfo_semmsl 一个set中semaphore的最大个数。设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。
shmsys:shminfo_shmseg 每个用户进程可以使用的最多的共享内存段的数目。
semsys:seminfo_semopm 每个semop调用的大操作数


project.max-shm-memory是属于同一个project的用户所能够创建的共享内存总和最大值,


1) 修改操作系统参数
bl480g1<g-yang>:su – root
口令:
#vi /etc/system
添加
set shmsys:shminfo_shmmax= 8589934592
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=300
set shmsys:shminfo_shmseg=120
set semsys:seminfo_semmni=3320
set semsys:seminfo_semmsl=256
set semsys:seminfo_semmns=6640
set semsys:seminfo_semopm=100
set semsys:seminfo_semvmx=32767
set noexec_user_stack=1
set noexec_user_stack_log=1


2) 修改用户project参数
bl480g1<g-yang>:su – root
口令:
#projadd -U g-yang user.g-yang
#projmod -a -K "project.max-shm-memory=(priv,4g,deny)" user.g-yang


3) 验证参数
/export/home/g-yang>prctl -n project.max-shm-memory $$
process: 22448: -csh
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 4.0GB - deny -
system 16.0EB max deny -


3. 测试




4. 结论
在2台x86主机中测试后得出结论:
1. shmsys:shminfo_shmmax配置均未生效,即单个共享内存段最大为2G-pagesize;
2. project.max-shm-memory配置默认值为1/4物理内存;设置大于此值后立即生效。


5. 参考文献
1.《系统管理指南:Solaris+Containers-资源管理和Solaris+Zones》


2.《oracle clusterware installation Guide》


3.《solaris10中安装oracle内核参数的调整》
原创粉丝点击