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:id -p
uid=61902(g-yang) gid=1(other) projid=100(default)
bl480g1: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: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: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内核参数的调整》
阅读(1423) | 评论(0) | 转发(0) |