Linux shmmax 和 shmall - 如何设置正确的单位?

Fra*_*iou 4 linux postgresql ubuntu sysctl

我有一台内存为 16 GB 的服务器。

现在我需要设置我的shmmaxshmall,因为服务器默认值是(用 进行检查ipcs -l

------ Messages Limits --------
max queues system wide = 32000
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398509465599
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 32000
max semaphores per array = 32000
max semaphores system wide = 1024000000
max ops per semop call = 500
semaphore max value = 32767
Run Code Online (Sandbox Code Playgroud)

看起来很糟糕,shmall而且shmmax比我的 16 GB 还大。

所以我想将设置更改为

------ Messages Limits --------
max queues system wide = 32000
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398509465599
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 32000
max semaphores per array = 32000
max semaphores system wide = 1024000000
max ops per semop call = 500
semaphore max value = 32767
Run Code Online (Sandbox Code Playgroud)

但我不确定我设置的单位是什么

shmmax -> 16GB/4
shmall -> 16GB/2
Run Code Online (Sandbox Code Playgroud)

但这个单位是我的号码吗?字节还是KB?因为ipcs -l正在显示 KB....

shmmax --> 4420960256 
shmall --> 8620960256
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,但是 postgresql 昨天崩溃并被杀死,它显示:

This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently 4420960256 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
Run Code Online (Sandbox Code Playgroud)

我的设置=>

shared_buffers = 4GB
effective_cache_size = 12GB
Run Code Online (Sandbox Code Playgroud)

adr*_*rhc 5

只需使用:

lsipc
Run Code Online (Sandbox Code Playgroud)

在我的 Ubuntu 16.04 LTS 上我得到:

RESOURCE DESCRIPTION                                    LIMIT USED  USE%
MSGMNI   Number of message queues                       32000    0 0.00%
MSGMAX   Max size of message (bytes)                     8192    -     -
MSGMNB   Default max size of queue (bytes)              16384    -     -
SHMMNI   Shared memory segments                          4096   20 0.49%
SHMALL   Shared memory pages                          2097152 4915 0.23%
SHMMAX   Max size of shared memory segment (bytes) 4294967296    -     -
SHMMIN   Min size of shared memory segment (bytes)          1    -     -
SEMMNI   Number of semaphore identifiers                  128    0 0.00%
SEMMNS   Total number of semaphores                     32000    0 0.00%
SEMMSL   Max semaphores per semaphore set.                250    -     -
SEMOPM   Max number of operations per semop(2)            100    -     -
SEMVMX   Semaphore max value                            32767    -     -
Run Code Online (Sandbox Code Playgroud)

它清楚地说明了我在 中指定的值的测量单位/etc/sysctl.conf。所以对我来说,SHMMAX 以字节为单位,而 SHMALL 以页为单位(请参阅 参考资料getconf PAGE_SIZE)。