Linux和Unix下核心参数的调整

2019年6月28日

 


核心参数说明
shmmax - 共享内存段.
shmmin - 最小的共享内存段.
shmmni - 共享内存标志符的数量.
shmseg - 一个进程可分配的最大内存段数.
shmall - 最大可允许的内存数.
semmns - 信号量.
semmsl - 一个信号灯集中最大的信号量数.

共享内存
SHMMAX:单个共享内存段的最大字节数.
SHMSEG:每个进程可链接的最多共享内存段数
SHMALL:操作系统内全部共享内存的大小,应大于SHMMAX*SHMSEG.
消息队列
MSGTQL:一个队列中可存放消息的个数
MSGMAX:一个消息队列的最大字节数, 大于消息个数×一个消息的字节数.
MSGMNB:一个消息队列的最大字节数,大于消息个数*一个消息的字节数.
信号灯
SEMMNI:信号灯集的个数.
SEMMSL:每个信号灯集中信号灯的最大个数

SEMMNS:操作系统中信号灯的总数

一、Linux下核心参数的调整
1)操作
对于正在运行内核 2.4 或更高版本的 Linux 系统,作为 root 用户在命令行上发出下列命令:
sysctl -w kernel.msgmni=2048
sysctl -w kernel.shmmax=1073741824
sysctl -w fs.file-max=32768

sysctl -w kernel.sem="512 32000 32 1024"
   512是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。
   32000是参数semmns的值,表示系统内可允许的信号量最大数目。
   32是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。
   1024是参数semmni的值,表示系统信号量集合总数。

要自动执行命令,编辑 /etc/rc.d/rc.local 文件,并将上述命令放在文件末尾.在后续的每次系统引导时,就会自动设置这些值.

二.Solaris下核心参数的调整
修改Solaris里/etc/system,设置格式如下:
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=15
set semsys:seminfo_semmns=200
set semsys:seminfo_semmni=70
set ulimit=3000000
set semsys:seminfo_semmni=315
set semsys:seminfo_semmsl=300
set semsys:seminfo_semmns=630
set semsys:seminfo_semopm=315
set semsys:seminfo_semvmx=32767
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmmni=315
set shmsys:shminfo_shmseg=10
set shmsys:shminfo_shmmin=1
set maxusers = <以MB为单位计的可用物理内存数量>
set max_nprocs = 10 + 16 * maxusers
//set max_nprocs=1200 系统所允许的最大进程数,通常最多30000
set maxuprc = max_nprocs – 10
//每个用户可以拥有的最大进程数(为超级用户保留10个)
set rlim_fd_max=2048    
set rlim_fd_cur=1024
solaris 7下select()可以使用最多达65536的文件句柄,64-bit应用程序缺省情况如此.如果是32-bit应用程序,需要指定给FD_SETSIZE一个更大的值.
在修改任何内核参数之后,重新引导系统以使内核设置生效.
sysdef | sed -n '/System Configuration/,$p'   查看系统的IPC资源

三.HP Unix下核心参数的调整
HP11.23修改如下:(注,别的系统没有试过.)
1.    用root用户登陆,执行sam,出现图形界面
2.    选择进入Kernel Configuration-> Kernel configuration -> Tunables
3.    找到semume一项,将当前修改值改为2048
4.    选择reboot system 重新链接核心,使设置生效

四.Sco Unix下核心参数的调整
修改
1、    通过界面的方式:
通过命令:scoadmin进入配置参数的界面进行修改:
Hardware/Kernel Manager-> Kernel-> Tune Parameters 进行调整,然后“Relink Kernel” 菜单项重新连接核心,重启系统 (reboot)

2、    通过修改核心文件的方式:
核心参数文件在:/etc/conf/cf.d目录下的mtune两个文件,然后通过./link_unix命令重新连接核心.
其中:
mtune 文件格式:
第一列 :最大值
第二列: 最小值
第三列: 当前值(其中0是不限制)
SEMMSL           150    25      600
SEMMNS           150    25      800

五.AIX 下核心参数的调整
AIX,一般无需调整操作系统核心参数,如果运行后报共享内存或信号量不足,将maxuproc调大即可(用命令smitty system或chdev).
AIX,一般无需调整操作系统核心参数,如果运行后报共享内存或信号量不足,将maxuproc调大即可(用命令smitty system或chdev).
$su – root
#chdev –l sys0 –a maxuproc=1000

内核可调参数
以下是内核参数,分组成下列几部分:
『调度程序和内存装入控制可调参数』
『虚拟内存管理器可调参数』
『同步 I/O 可调参数』
『异步 I/O 可调参数』
『磁盘和磁盘适配器可调参数』
『进程间通信可调参数』
调度程序和内存装入控制可调参数
大部分调度程序和内存装入控制可调参数在 schedo 手册页中有详细描述.以下是几个其他的相关参数:
maxuproc 用途: 指定每个用户标识的最大进程数目.
值: 缺省值:40;范围:1 到 131072
显示: lsattr -E -l sys0 -a maxuproc
更改: chdev -l sys0 -a maxuproc=NewValue
更改会立即有效而且在引导期间保存下来.如果值减小了,那么它只有在系统引导后才有效.
诊断: 用户不可以派生任何附加进程.
调整: 这是为了防止用户创建过多进程的安全措施.
ncargs 用途: 指定运行 exec() 子例程时,ARG/ENU 列表(大小为 4 KB 的块)允许的最大大小.
值: 缺省值:6;范围:6 到 1024
显示: lsattr -E -l sys0 -a ncargs
更改: chdev -l sys0 -a ncargs=NewValue
更改会立即有效而且在引导期间保存下来.
诊断: 用户不可以执行任何附加的进程,因为传递给 exec() 系统调用的变元表太长.低缺省值可能造成一些程序失败并出现幅角列表太长错误消息,在这种情况下,您可以尝试使用以上的 chdev 命令增加 ncargs 值,然后重新运行该程序.
调整: 这是为了防止变元表过长引起 exec() 子例程失败的一种机制.请注意,调整到一个较高 ncargs 值会对系统内存资源加一些额外的限制.
 
虚拟内存管理器可调参数
全部虚拟内存管理器可调参数的列表位于 vmo 手册页.
同步 I/O 可调参数
在 ioo 手册页中完全描述了大部分同步 I/O 可调参数.以下是几个其他的相关参数:
maxbuf 用途: 在 block-I/O 高速缓存中的(4 KB)页数.
值: 缺省值:20;范围:20 到 1000
显示: lsattr -E -l sys0 -a maxbuf
更改: chdev -l sys0 -a maxbuf=NewValue
更改立即有效,而且是永久有效.如果使用了标志 -T,更改会立即有效,而且持续到下次引导.如果使用了标志 -P,更改推迟到下次引导,但这个更改是永久的.
诊断: 如果命令 sar —b 显示 breads 或 bwrites,且 %rcache 和 %wcache 很低,您可能需要调整这个参数.
调整: 这个参数一般对系统的性能影响很小,其中普通 I/O 不使用 block-I/O 高速缓存.
请参考:『调整异步磁盘 I/O』
maxpout 用途: 对文件指定未决 I/O 的最大数目.
值: 缺省值:0(不检查);范围:0 到 n(n 应该是 4 的倍数加 1)
显示: lsattr -E -l sys0 -a maxpout
更改: chdev -l sys0 -a maxpout=NewValue
更改立即有效,而且是永久有效.如果使用了标志 -T,更改会立即有效,而且持续到下次引导.如果使用了标志 -P,更改推迟到下次引导,但这个更改是永久的.
诊断: 如果前台响应时间有时在运行具有大量连续磁盘输出的程序时恶化,则需要对连续输出调步.
调整: 设置 maxpout 为 33 以及 minpout 为 16.如果连续的性能难以接受地恶化,增加上述一个或两个参数的值.如果前台性能仍然不可接受,则两个都减小.
minpout 用途: 指定一个基点,在该基点处,已达到 maxpout 的程序可以继续写入文件.
值: 缺省值:0(不检查);范围:0 到 n(n 应该是 4 的倍数,且大于或等于 4 小于 maxpout)
显示: lsattr -E -l sys0 -a minpout
更改: chdev -l sys0 -a minpout=NewValue
更改立即有效,而且是永久有效.如果使用了标志 -T,更改会立即有效,而且持续到下次引导.如果使用了标志 -P,更改推迟到下次引导,但这个更改是永久的.
诊断: 如果前台响应时间有时在运行具有大量连续磁盘输出的程序时恶化,则需要对连续输出调步.
调整: 设置 maxpout 为 33 以及 minpout 为 16.如果连续的性能难以接受地恶化,增加上述一个或两个参数的值.如果前台性能仍然不可接受,则两个都减小.
mount -o nointegrity 用途: 一个新的 mount 选项(nointegrity)可以增强某些写密集应用程序的本地文件系统性能.这种优化基本上避免了写入 JFS 日志.注意:增强的性能是以元数据的完整性的损失为代价而达到的.因而,使用这个选项要十分谨慎,因为系统崩溃可能使随这个选项安装的文件系统不可恢复.尽管如此,某些应用程序的类在系统崩溃后不需要文件数据来保持一致性,这些可能得益于使用了 nointegrity 选项.不完全文件系统可能有利的两个示例是用于编译器临时文件和用来执行非迁移或 mksysb 安装.
调页空间大小 用途: 保存工作存储器页面需要的磁盘空间大小.
值: 缺省值:configuration-dependent;范围:对于 hd6 是 32 MB 到 n MB,对于非 hd6 是 16 MB 到 n MB
显示: lsps -a mkps 或 chps 或 smitty pgsp
更改: 更改立即有效,而且是永久有效的.但调页空间不一定立即投入使用.
诊断: 运行:lsps -a.如果进程因为缺少调页空间而杀死,就要用子例程 psdanger() 监视状态.
调整: 如果看起来没有足够调页空间来处理正常的工作量,在另一个物理卷上添加一个新的调页空间或加大已存在的调页空间.
syncd Interval 用途: sync() 被 syncd 调用的间隔时间.
值: 缺省值:60;范围:1 到任何正整数
显示: grep syncd /sbin/rc.boot 或 vi /sbin/rc.boot
更改: 更改在下次引导后有效,而且是永久有效.备用方法是使用命令 kill 来终止守护程序 syncd 并用命令 /usr/sbin/syncd interval 从命令行重新启动它.
诊断: 当 syncd 正在运行时,文件的 I/O 被阻塞了.
调整: 在缺省级别上,这个参数几乎不影响性能.不推荐对这个参数进行更改.为了保持数据完整性(对于 HACMP?)而使 syncd interval 明显缩小,会导致性能下降.
异步 I/O 可调参数
maxreqs 用途: 指定异步 I/O 的最大请求数,这些请求可能在任何时候都是未完成的.
值: 缺省值:4096;范围:1 到 AIO_MAX(/usr/include/sys/limits.h)
显示: lsattr -E -l aio0 -a maxreqs
更改: chdev -l aio0 -a maxreqs=NewValue
更改在重新引导后生效并且永久有效.
诊断: N/A
调整: 这包括进行中的请求,还有等待开始的请求.异步 I/O 的最大请求数不能小于 AIO_MAX 的值(该值在文件 /usr/include/sys/limits.h 中定义),但可以大于它.对于拥有大量异步 I/O 的系统来说,使异步 I/O 的最大请求数大于 AIO_MAX 是适当的.
请参考:『调整异步磁盘 I/O』
maxservers 用途: 指定每个处理器的 AIO kprocs 最大数目.
值: 缺省值:10(每个处理器)
显示: lsattr -E -l aio0 -a maxservers
更改: chdev -l aio0 -a maxservers=NewValue
更改在重新引导后生效并且永久有效.
诊断: N/A
调整: 这个值限制了同时提出的异步 I/O 需求的最大数.这个值应该与期望的同时发生的 AIO 需求数基本一致.这个可调参数仅影响 JFS 文件系统(或在 AIX 4.3.2 之前的 Virtual Shared Disks(VSD))上的 AIO.
请参考:『调整异步磁盘 I/O』
minservers 用途: 当 AIO 内核扩展被装入时,设定要创建的 AIO kprocs 的值.
值: 缺省值:1
显示: lsattr -E -l aio0 -a maxservers
更改: chdev -l aio0 -a minservers=NewValue
更改在重新引导后生效并且永久有效.
诊断: N/A
调整: 建议不要把这个设为一个较大数,因为每个进程要占用一些内存.让这个数较小在很多情况下是可接受的,因为 AIO 会根据需要创建附加的 kprocs 达到 maxservers.这种调整仅对 JFS 文件系统(或 AIX 4.3.2 之前的 VSD)上的 AIO 有效.
请参考:『调整异步磁盘 I/O』
磁盘和磁盘适配器可调参数
磁盘适配器未完成请求的限制 用途: SCSI 总线上可能未完成的请求的最大数.(仅用于 SCSI-2 快速/宽带适配器.)
值: 缺省值:40;范围:40 到 128
显示: lsattr -E -l scsin -a num_cmd_elems
更改: chdev -l scsin -a num_cmd_elems=NewValue
更改立即有效,而且是永久有效.如果使用了标志 -T,更改会立即有效,而且持续到下次引导.如果使用了标志 -P,更改推迟到下次引导,但这个更改是永久的.
诊断: 执行大量写入到条形未加工逻辑卷的应用程序不会获得需要的吞吐率.
调整: 值应该等于 SCSI 总线上的物理驱动器(包括磁盘阵列里的驱动器)数乘以单独驱动器的队列深度.
磁盘驱动器队列深度 用途: 可以在磁盘设备队列中保存的最大请求数.
值: 缺省值:IBM? 磁盘=3;非 IBM 磁盘=0;范围:由制造商指定
显示: lsattr -E -l hdiskn
更改: chdev -l hdiskn -a q_type=simple -a queue_depth=NewValue
更改立即有效,而且是永久有效.如果使用了标志 -T,更改会立即有效,而且持续到下次引导.如果使用了标志 -P,更改推迟到下次引导,但这个更改是永久的.
诊断: N/A
调整: 如果非 IBM 的磁盘驱动器能够排队请求,那就执行此更改来确保操作系统利用此功能.
请参考:『设置 SCSI 适配器和磁盘设备的队列限制』
进程间通信可调参数
msgmax 用途: 指定最大消息大小.
值: 最大值为 4MB 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
msgmnb 用途: 指定队列中的最大字节数
值: 最大值为 4MB 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
msgmni 用途: 指定消息队列标识的最大数
值: 最大值为 131072 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
msgmnm 用途: 指定每个队列中的最大消息数
值: 最大值为 524288 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
semaem 用途: 指定退出时调整的最大值
值: 最大值为 16384 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
semmni 用途: 指定信号标识的最大数
值: 最大值为 131072 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
semmsl 用途: 指定每个标识的信号的最大数
值: 最大值为 65535 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
semopm 用途: 指定每个 semop() 调用中的最大操作数.
值: 最大值为 1024 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
semume 用途: 指定每个进程中撤销条目的最大数.
值: 最大值为 1024 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
semvmx 用途: 指定信号的最大值.
值: 最大值为 32767 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
shmmax 用途: 指定共享内存段大小的最大值.
值: 最大值为 256 MB(32 位进程)和 0x80000000u(64 位进程)条件下动态变化.
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
shmmin 用途: 指定共享内存段大小的最小值.
值: 最小值为 1 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.
shmmni 用途: 指定共享内存标识的最大数
值: 最大值为 131072 条件下动态变化
显示: N/A
更改: N/A
诊断: N/A
调整: 不需要调整,因为它根据内核要求动态调整.

六.UNIXWARE 下核心参数的调整
对UNIXWARE,以root登录,使用/etc/conf/bin/idtune命令调整此参数,调整完成后,重编译核心(/etc/conf/bin/idbuild -B),并重启(不要使用reboot,用init 6重启).
  查看当前值为idtune –g SEMMSL或者idtune –g SEMMNS
或得idtune –g SHMMAX
注:(在修改/etc/conf/mtune.d/下的任何文件的值时,不能在/etc/conf/mtune.d目录下做任何的备份)
$su – root
#idtune –f SHMMAX 134217728
#vi /etc/conf/mtune.d/ipc
  找到“SEMMSL           150    25      300” 一行,将300改为600; 找到“SEMMNS  60   60   300”一行,将最后的300改为800,分别如下所示:
SEMMSL           150    25      600
SEMMNS           150    25      800
再存盘退出.执行下列命令
#idtune –f SEMMSL 600
#idtune –f SEMMNS 800
#idbuild –B
#init 6
 

 

没有评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注