Solaris 10用计划文件的内核配置
适用版本9.2-10.2,使用的系统
Oracle Solaris on SPARC (64-bit)
Oracle Solaris on x86-64 (64-bit)
Solaris Operating System (SPARC 64-bit)
这是一个Metalink的文档,包括solaris的内核参数安装,如果solaris系统管理员需要帮助实施这些概念,与供应商联系。
基础知识
永久设置内核参数,临时设置内核参数。
1、 修改关于project相关的/etc/project文件。
2、 oracle_oltp:100:Oracle OLTP:oracle:: \
project.max-shm-memory=(privileged,51539607552,deny);\
process.max-sem-nsems=(privileged,300,deny)
oracle_dss:101:Oracle DSS:oracle:: \
project.max-shm-memory=(privileged,17179869184,deny)
3、 推荐定义/etc/project文件用”proj*”命令。例如:
a.) # projadd -c "Oracle" 'user.oracle'
b.) # projmod -s -K "project.max-shm-memory=(privileged,6GB,deny)" 'user.oracle'
4、 资源控制以修改/etc/project文件的方式是永久性的,重启后也将生效。
5、 也有一种方式来修改就是使用prctl来修改
6、 Oracle支持使用id –p命令,它显示了活跃和可用项目,如果一个project中建立的一些限制入内核参数未被激活可以用该命令查看。
问题和答案
Q1:能不能不修改他们?、
A1:实际上是可以的,当然这不是首选的方法,在/etc/system的内核参数指定仍然可以生效,一些注意事项:
*在/etc/system必须比solaris 10默认值要新。
*solaris 10中过时的任何参数将被忽略。
*如果您使用/etc/system中的IPC设置 rctl的值,必须重启系统才能生效。
实际的例子永久设置内核参数
系统从solaris 9升级到solaris 10以后需要对新的IPC进行升级
/etc/system文件中涉及到IPC的信息
% /bin/egrep "semsys:|shmsys:|msgsys:" /etc/system
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_shmmin=1
set shmsys:shminfo_shmmni=256 set shmsys:shminfo_shmseg=10
这些行立即在solaris 10中被忽略
set semsys:seminfo_semmns=1024
set semsys:seminfo_semvmx=32767
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmseg=10
创建一个project的用户:
# projadd -c "Oracle" 'user.oracle'
A:当project创建完成以后我们应该修改/etc/system一个关于资源计划
set semsys:seminfo_semmni=100
B:下一行应该呗修改成以下的资源计划
set semsys:seminfo_semmsl=256
然后进行进一步的资源设置
# projmod -s -K "process.max-sem-nsems=(privileged,256,deny)" 'user.oracle'
C:下一行应该修改成以下:
set shmsys:shminfo_shmmax=4294967295
系统有8gb内存,因此,新的系统中默认值给project.max-shm-memory为1/4大小,用一下命令进行设置
# projmod -s -K "project.max-shm-memory=(privileged,4GB,deny)" 'user.oracle'
D:最后一行西药一下的修改
set shmsys:shminfo_shmmni=256
资源计划需要定义为:
# projmod -s -K "project.max-shm-ids=(privileged,256,deny)" 'user.oracle'
删除一下旧的行:
# /bin/cp /etc/system /etc/system.solaris9
# /bin/egrep -v "semsys:|shmsys:|msgsys:" /etc/system > /etc/system.solaris10
# /bin/mv /etc/system.solaris10 /etc/system
然后我们可以查看/etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
***********************
NOTICE this is ONE LINE!
************************
user.oracle:100:oracle:::process.max-sem-nsems=(privileged,256,deny);project.max-shm-ids=(privileged,256,deny);project.max-shm-memory=(privileged,4294967296,deny) ***********************
NOTICE this is ONE LINE!
************************
临时修改内核参数的实际例子
临时修改内核参数不能用修改/etc/projecg来修改,要用命令prctl(1)修改,重启后就失效,当然用户必须有适当的权限。
首先先介绍一些关于命令的一些介绍
# prctl -i process用来查看进程的资源控制
# prctl -i project用户查看project的资源控制
# prctl -n -i process产看指定名字的进程资源控制
# prctl -n -r -v -i process重置名字为-r的设置
使用-v开关指定可以人性化的方式设置,例如48gb可以用代替为51539607552 bytes。
例如,假设/etc/project下oracle shared memory在oracle_dss
Project中这样设置。
% prctl -n project.max-shm-memory -i project oracle_dss
project: 101: oracle_dss
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 16.0GB - deny -
system 16.0EB max deny -
我们应该临时增长这些设置为24gb:
% prctl -n project.max-shm-memory -r -v 24GB -i project oracle_dss
% prctl -n project.max-shm-memory -i project oracle_dss
project: 101: oracle_dss
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 24.0GB - deny -
system 16.0EB max deny