共享内存和信号量

共享内存:

可以通过ipcs -lm命令查看目前系统共享内存的参数限制:

# ipcs -lm

—— Shared Memory Limits ——–

max number of segments = 4096

max seg size (kbytes) = 1048576

max total shared memory (pages) = 2097152

min seg size (bytes) = 1

这里涉及到3个于共享内存相关的参数:SHMMAXSHMMNISHMALL


SHMMAX

含义:每个共享内存段的最大字节数

设置:比SGA略大

查看:cat /proc/sys/kernel/shmmax

$ cat /proc/sys/kernel/shmmax

1073741824

修改:

sysctl -w kernel.shmmax=1073741824

echo “kernel.shmmax = 1073741824” >> /etc/sysctl.conf


SHMMIN

含义:每个共享内存段的最小字节数


SHMSEG

含义:每进程最大共享内存段数量


SHMMNI

含义:系统范围最大共享内存段的数量

设置:至少4096

查看:cat /proc/sys/kernel/shmmni

# cat /proc/sys/kernel/shmmni

4096

修改:

# sysctl -w kernel.shmmni=4096

# echo “kernel.shmmni = 4096” >> /etc/sysctl.conf


SHMALL

含义:系统中共享内存页总数

设置:至少ceil(shmmax/PAGE_SIZE)ORACLE DOC 默认值:2097152*4096=8GB

查看:cat /proc/sys/kernel/shmall

$ getconf PAGE_SIZE

4096

# cat /proc/sys/kernel/shmall

2097152

修改:

# sysctl -w kernel.shmall=2097152

# echo kernel.shmall = 2097152 >> /etc/sysctl.conf



信号量:

当前系统信号量限制:

$ ipcs -ls

—— Semaphore Limits ——–

max number of arrays = 128

max semaphores per array = 250

max semaphores system wide = 32000

max ops per semop call = 32(设置成100比较好)

semaphore max value = 32767


SEMMNI

含义:信号灯标识符的最小数量(也就是说,套)

设置:最少128


SEMMSL

含义:每套信号灯最小信号灯数量

设置:最小250;对于processes参数设置较大的系统建议设置为processes+10

一套信号灯里可以有多少信号灯,对于Postgres而言应该至少是 17


SEMMNS

含义:linux系统中信号量最大个数

设置:至少32000SEMMNI *SEMMSL


SEMOPM

含义:semop系统调用允许的信号量最大个数

设置:至少100;或者等于SEMMSL

查看信号量设置:cat /proc/sys/kernel/sem


SEMVMX
信号灯的最大值(semaphore max value = 32767

orderSEMMSL, SEMMNS, SEMOPM, SEMMNI

$ cat /proc/sys/kernel/sem

250    32000    100    128

修改:

sysctl -w kernel.sem=”250 32000 100 128

echo kernel.sem = 250 32000 100 128 >> /etc/sysctl.conf

ORACLE提供了sysresv工具管理共享内存以及信号量,操作系统级别可以通过ipcs管理。

kernel.shmall = 2097152 # 可以使用的共享内存的总量,单位:页。

kernel.shmmax = 2147483648 # 最大单个共享内存段大小。取物理内存大小的一半,单位为字节

kernel.shmmni = 4096 # 整个系统共享内存段的最大数目。

kernel.sem = 250 32000 100 128 # 每个信号对象集的最大信号对象数;系统范围内最大信号对象数;每个信号对象支持的最大操作数;系统范围内最大信号对象集数。

fs.file-max = 65536 # 系统中所允许的文件句柄最大数目。

net.ipv4.ip_local_port_range = 1024 65000 # 应用程序可使用的IPv4端口范围。

net.core.rmem_default = 1048576 # 套接字接收缓冲区大小的缺省值

net.core.rmem_max = 1048576 # 套接字接收缓冲区大小的最大值

net.core.wmem_default = 262144 # 套接字发送缓冲区大小的缺省值

net.core.wmem_max = 262144 # 套接字发送缓冲区大小的最大值

Leave a Reply

Your email address will not be published.