ื”ื’ื“ืจืช ืืคืฉืจื•ื™ื•ืช ืœื™ื‘ืช ืœื™ื ื•ืงืก ืœืžื™ื˜ื•ื‘ PostgreSQL

ื”ื’ื“ืจืช ืืคืฉืจื•ื™ื•ืช ืœื™ื‘ืช ืœื™ื ื•ืงืก ืœืžื™ื˜ื•ื‘ PostgreSQL ื‘ื™ืฆื•ืขื™ PostgreSQL ืื•ืคื˜ื™ืžืœื™ื™ื ืชืœื•ื™ื™ื ื‘ืคืจืžื˜ืจื™ื ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉื”ื•ื’ื“ืจื• ื›ื”ืœื›ื”. ื”ื’ื“ืจื•ืช ื’ืจืขื™ืŸ ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื‘ืฆื•ืจื” ื’ืจื•ืขื” ืขืœื•ืœื•ืช ืœื’ืจื•ื ืœื‘ื™ืฆื•ืขื™ื ื’ืจื•ืขื™ื ืฉืœ ืฉืจืช ืžืกื“ ื”ื ืชื•ื ื™ื. ืœื›ืŸ, ื”ื›ืจื—ื™ ืฉื”ื’ื“ืจื•ืช ืืœื• ื™ื•ื’ื“ืจื• ื‘ื”ืชืื ืœืฉืจืช ืžืกื“ ื”ื ืชื•ื ื™ื ื•ืœืขื•ืžืก ื”ืขื‘ื•ื“ื” ืฉืœื•. ื‘ืคื•ืกื˜ ื–ื”, ื ื“ื•ืŸ ื‘ื›ืžื” ืคืจืžื˜ืจื™ื ื—ืฉื•ื‘ื™ื ืฉืœ ืœื™ื‘ืช ืœื™ื ื•ืงืก ืฉื™ื›ื•ืœื™ื ืœื”ืฉืคื™ืข ืขืœ ื‘ื™ืฆื•ืขื™ ืฉืจืช ืžืกื“ ื”ื ืชื•ื ื™ื ื•ื›ื™ืฆื“ ืœื”ื’ื“ื™ืจ ืื•ืชื.

SHMMAX / SHMALL

SHMMAX ื”ื•ื ืคืจืžื˜ืจ ืœื™ื‘ื” ื”ืžืฉืžืฉ ืœืงื‘ื™ืขืช ื”ื’ื•ื“ืœ ื”ืžืจื‘ื™ ืฉืœ ืžืงื˜ืข ื–ื™ื›ืจื•ืŸ ืžืฉื•ืชืฃ ื™ื—ื™ื“ ืฉืชื”ืœื™ืš ืœื™ื ื•ืงืก ื™ื›ื•ืœ ืœื”ืงืฆื•ืช. ืœืคื ื™ ื’ืจืกื” 9.2, PostgreSQL ื”ืฉืชืžืฉ ื‘ืžืขืจื›ืช V (SysV), ื”ื“ื•ืจืฉืช ืืช ื”ื’ื“ืจืช SHMMAX. ืœืื—ืจ 9.2, PostgreSQL ืขื‘ืจ ืœื–ื™ื›ืจื•ืŸ ืžืฉื•ืชืฃ POSIX. ืื– ืขื›ืฉื™ื• ื ื“ืจืฉื™ื ืคื—ื•ืช ื‘ืชื™ื ืฉืœ ื–ื™ื›ืจื•ืŸ ืžืฉื•ืชืฃ ืฉืœ System V.

ืœืคื ื™ ื’ืจืกื” 9.3, SHMMAX ื”ื™ื” ืคืจืžื˜ืจ ื”ืœื™ื‘ื” ื”ื—ืฉื•ื‘ ื‘ื™ื•ืชืจ. ืขืจืš SHMMAX ืžืฆื•ื™ืŸ ื‘ื‘ืชื™ื.

ื‘ืื•ืคืŸ ื“ื•ืžื” SHMALL ื”ื•ื ืคืจืžื˜ืจ ืงืจื ืœ ื ื•ืกืฃ ื”ืžืฉืžืฉ ืœืงื‘ื™ืขืช
ื ืคื— ื›ืœืœ ื”ืžืขืจื›ืช ืฉืœ ื“ืคื™ ื–ื™ื›ืจื•ืŸ ืžืฉื•ืชืคื™ื. ื›ื“ื™ ืœื”ืฆื™ื’ ืืช ืขืจื›ื™ SHMMAX, SHMALL ืื• SHMMIN ื”ื ื•ื›ื—ื™ื™ื, ื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” ipcs.

ืฉ.ืž.* ืคืจื˜ื™ื - ืœื™ื ื•ืงืก

$ ipcs -lm

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 1073741824
max total shared memory (kbytes) = 17179869184
min seg size (bytes) = 1

ืคืจื˜ื™ SHM* - MacOS X

$ ipcs -M
IPC status from  as of Thu Aug 16 22:20:35 PKT 2018
shminfo:
	shmmax: 16777216	(max shared memory segment size)
	shmmin:       1	(min shared memory segment size)
	shmmni:      32	(max number of shared memory identifiers)
	shmseg:       8	(max shared memory segments per process)
	shmall:    1024	(max amount of shared memory in pages)

ืžืฉืชืžืฉ ื‘-PostgreSQL ืžืขืจื›ืช V IPC ื›ื“ื™ ืœื”ืงืฆื•ืช ื–ื™ื›ืจื•ืŸ ืžืฉื•ืชืฃ. ืคืจืžื˜ืจ ื–ื” ื”ื•ื ืื—ื“ ืžืคืจืžื˜ืจื™ ื”ืงืจื ืœ ื”ื—ืฉื•ื‘ื™ื ื‘ื™ื•ืชืจ. ื‘ื›ืœ ืคืขื ืฉืืชื” ืžืงื‘ืœ ืืช ื”ื•ื“ืขื•ืช ื”ืฉื’ื™ืื” ื”ื‘ืื•ืช, ื–ื” ืื•ืžืจ ืฉื™ืฉ ืœืš ื’ืจืกื” ื™ืฉื ื” ื™ื•ืชืจ ืฉืœ PostgreSQL ื•ืขืจืš SHMMAX ืฉืœืš ื ืžื•ืš ืžืื•ื“. ืžืฉืชืžืฉื™ื ืฆืคื•ื™ื™ื ืœื”ืชืื™ื ื•ืœื”ื’ื“ื™ืœ ืืช ื”ืขืจืš ื‘ื”ืชืื ืœื–ื™ื›ืจื•ืŸ ื”ืžืฉื•ืชืฃ ืฉื‘ื• ื”ื ืžืชื›ื•ื•ื ื™ื ืœื”ืฉืชืžืฉ.

ืฉื’ื™ืื•ืช ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ืฉื’ื•ื™ื•ืช ืืคืฉืจื™ื•ืช

ืื SHMMAX ืื™ื ื• ืžื•ื’ื“ืจ ื›ื”ืœื›ื”, ื™ื™ืชื›ืŸ ืฉืชืงื‘ืœ ืฉื’ื™ืื” ื‘ืขืช ื ื™ืกื™ื•ืŸ ืœืืชื—ืœ ืืฉื›ื•ืœ PostgreSQL ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” initdb.

initdb ื›ืฉืœ
DETAIL: Failed system call was shmget(key=1, size=2072576, 03600).

HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. 
You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 2072576 bytes),
reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.

If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter,
in which case raising the request size or reconfiguring SHMMIN is called for.

The PostgreSQL documentation contains more information about shared memory configuration. child process exited with exit code 1

ื‘ืื•ืคืŸ ื“ื•ืžื”, ื™ื™ืชื›ืŸ ืฉืชืงื‘ืœ ืฉื’ื™ืื” ื‘ืขืช ื”ืคืขืœืช ืฉืจืช PostgreSQL ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” pg_ctl.

pg_ctl ื›ืฉืœ
DETAIL: Failed system call was shmget(key=5432001, size=14385152, 03600).

HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.

You can either reduce the request size or reconfigure the kernel with larger SHMMAX.; To reduce the request size (currently 14385152 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.

If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter,
in which case raising the request size or reconfiguring SHMMIN is called for.

The PostgreSQL documentation contains more information about shared memory configuration.

ื”ื‘ื ืช ื”ื”ื‘ื“ืœื™ื ื‘ื”ื’ื“ืจื•ืช

ื”ื’ื“ืจืช ื”ืคืจืžื˜ืจื™ื SHMMAX/SHMALL ืฉื•ื ื” ื‘ืžืงืฆืช ื‘-Linux ื•ื‘-MacOS X:

  • ืœื™ื ื•ืงืก: kernel.shmmax, kernel.shmal
  • MacOS X: kern.sysv.shmmax, kern.sysv.shmall

ืงื‘ื•ืฆื” sysctl ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœืฉื ื•ืช ืืช ื”ืขืจืš ื‘ืื•ืคืŸ ื–ืžื ื™. ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืขืจื›ื™ื ืงื‘ื•ืขื™ื, ื”ื•ืกืฃ ืขืจืš ืœ /etc/sysctl.conf. ืคืจื˜ื™ื ื‘ื”ืžืฉืš.

ืฉื™ื ื•ื™ ื”ื’ื“ืจื•ืช ืœื™ื‘ื” ื‘-MacOS X

# Get the value of SHMMAX
sudo sysctl kern.sysv.shmmax
kern.sysv.shmmax: 4096

# Get the value of SHMALL
sudo sysctl kern.sysv.shmall 
kern.sysv.shmall: 4096

# Set the value of SHMMAX
sudo sysctl -w kern.sysv.shmmax=16777216
kern.sysv.shmmax: 4096 -> 16777216

# Set the value of SHMALL 
sudo sysctl -w kern.sysv.shmall=16777216
kern.sysv.shmall: 4096 -> 16777216

ืฉื™ื ื•ื™ ืคืจืžื˜ืจื™ ืœื™ื‘ื” ื‘ืœื™ื ื•ืงืก

# Get the value of SHMMAX
sudo sysctl kernel.shmmax
kernel.shmmax: 4096

# Get the value of SHMALL
sudo sysctl kernel.shmall
kernel.shmall: 4096

# Set the value of SHMMAX
sudo sysctl -w kernel.shmmax=16777216
kernel.shmmax: 4096 -> 16777216

# Set the value of SHMALL 
sudo sysctl -w kernel.shmall=16777216
kernel.shmall: 4096 -> 16777216

ืืœ ืชืฉื›ื—: ื›ื“ื™ ืœื”ืคื•ืš ืฉื™ื ื•ื™ื™ื ืงื‘ื•ืขื™ื, ื”ื•ืกืฃ ืืช ื”ืขืจื›ื™ื ื”ืืœื” ืœ- /etc/sysctl.conf

ื“ืคื™ื ืขื ืงื™ื™ื

ืœื™ื ื•ืงืก ืžืฉืชืžืฉืช ื‘ื“ืคื™ ื–ื™ื›ืจื•ืŸ ืฉืœ 4 KB ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, BSD ืžืฉืชืžืฉ ื‘ื“ืคื™ ื–ื™ื›ืจื•ืŸ ืฉืœ XNUMX KB. ื“ืคื™ ืกื•ืคืจ, ื•ื‘ื—ืœื•ื ื•ืช - ื“ืคื™ื ื’ื“ื•ืœื™ื. ืขืžื•ื“ ื”ื•ื ื—ืชื™ื›ืช ื–ื™ื›ืจื•ืŸ RAM ื”ืžื•ืงืฆื” ืœืชื”ืœื™ืš. ืชื”ืœื™ืš ื™ื›ื•ืœ ืœื›ืœื•ืœ ืžืกืคืจ ืขืžื•ื“ื™ื ื‘ื”ืชืื ืœื“ืจื™ืฉื•ืช ื”ื–ื™ื›ืจื•ืŸ. ื›ื›ืœ ืฉืชื”ืœื™ืš ื“ื•ืจืฉ ื™ื•ืชืจ ื–ื™ื›ืจื•ืŸ, ื›ืš ื”ื•ื ืžื•ืงืฆื” ื™ื•ืชืจ ืขืžื•ื“ื™ื. ืžืขืจื›ืช ื”ื”ืคืขืœื” ืžืงื™ื™ืžืช ื˜ื‘ืœืช ื”ืงืฆืืช ืขืžื•ื“ื™ื ืœืชื”ืœื™ื›ื™ื. ื›ื›ืœ ืฉื’ื•ื“ืœ ื”ืขืžื•ื“ ืงื˜ืŸ ื™ื•ืชืจ, ื”ื˜ื‘ืœื” ื’ื“ื•ืœื” ื™ื•ืชืจ, ื›ืš ืœื•ืงื— ื™ื•ืชืจ ื–ืžืŸ ืœืžืฆื•ื ืขืžื•ื“ ื‘ื˜ื‘ืœืช ื”ื“ืคื™ื ื”ื–ื•. ืœื›ืŸ, ื“ืคื™ื ื’ื“ื•ืœื™ื ืžืืคืฉืจื™ื ืฉื™ืžื•ืฉ ื‘ื›ืžื•ื™ื•ืช ื’ื“ื•ืœื•ืช ืฉืœ ื–ื™ื›ืจื•ืŸ ืขื ืชืงื•ืจื” ืžื•ืคื—ืชืช; ืคื—ื•ืช ืฆืคื™ื•ืช ื‘ืขืžื•ื“, ืคื—ื•ืช ืชืงืœื•ืช ื‘ืขืžื•ื“, ืคืขื•ืœื•ืช ืงืจื™ืื”/ื›ืชื™ื‘ื” ืžื”ื™ืจื•ืช ื™ื•ืชืจ ืขืœ ืคื ื™ ืžืื’ืจื™ื ื’ื“ื•ืœื™ื ื™ื•ืชืจ. ื”ืชื•ืฆืื” ื”ื™ื ืฉื™ืคื•ืจ ื‘ื‘ื™ืฆื•ืขื™ื.

PostgreSQL ืชื•ืžืš ืจืง ื‘ื“ืคื™ื ื’ื“ื•ืœื™ื ื‘ืœื™ื ื•ืงืก. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืœื™ื ื•ืงืก ืžืฉืชืžืฉืช ื‘ื“ืคื™ ื–ื™ื›ืจื•ืŸ ืฉืœ 4 KB, ื›ืš ืฉื‘ืžืงืจื™ื ื‘ื”ื ื™ืฉ ื™ื•ืชืจ ืžื“ื™ ืคืขื•ืœื•ืช ื–ื™ื›ืจื•ืŸ, ื™ืฉ ืฆื•ืจืš ืœื”ื’ื“ื™ืจ ื“ืคื™ื ื’ื“ื•ืœื™ื ื™ื•ืชืจ. ืฉื™ืคื•ืจื™ ื‘ื™ืฆื•ืขื™ื ื ืฆืคื™ื ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ื“ืคื™ื ื’ื“ื•ืœื™ื ืฉืœ 2 MB ื•ืขื“ 1 GB. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืืช ื’ื•ื“ืœ ื”ืขืžื•ื“ ื”ื’ื“ื•ืœ ื‘ื–ืžืŸ ื”ืืชื—ื•ืœ. ืืชื” ื™ื›ื•ืœ ืœื‘ื“ื•ืง ื‘ืงืœื•ืช ืืช ืคืจืžื˜ืจื™ ื”ืขืžื•ื“ ื”ื’ื“ื•ืœื™ื ื•ืืช ื”ืฉื™ืžื•ืฉ ื‘ื”ื ื‘ืžื—ืฉื‘ ื”ืœื™ื ื•ืงืก ืฉืœืš ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” cat /proc/meminfo | grep -i ืขื ืง.

ืงื‘ืœืช ืžื™ื“ืข ืขืœ ื“ืคื™ื ื’ื“ื•ืœื™ื (ืœื™ื ื•ืงืก ื‘ืœื‘ื“)

Note: This is only for Linux, for other OS this operation is ignored$ cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

ื‘ื“ื•ื’ืžื” ื–ื•, ืœืžืจื•ืช ืฉื’ื•ื“ืœ ื”ืขืžื•ื“ ื”ื’ื“ื•ืœ ืžื•ื’ื“ืจ ืœ-2048 (2 ืžื’ื”-ื‘ื™ื™ื˜), ื”ืžืกืคืจ ื”ื›ื•ืœืœ ืฉืœ ืขืžื•ื“ื™ื ื’ื“ื•ืœื™ื ืžื•ื’ื“ืจ ืœ-0. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉืขืžื•ื“ื™ื ื’ื“ื•ืœื™ื ืžื•ืฉื‘ืชื™ื.

ืกืงืจื™ืคื˜ ืœืงื‘ื™ืขืช ืžืกืคืจ ื”ืขืžื•ื“ื™ื ื”ื’ื“ื•ืœื™ื

ื”ืกืงืจื™ืคื˜ ื”ืคืฉื•ื˜ ื”ื–ื” ืžื—ื–ื™ืจ ืืช ื”ืžืกืคืจ ื”ื ื“ืจืฉ ืฉืœ ืขืžื•ื“ื™ื ื’ื“ื•ืœื™ื. ื”ืคืขืœ ืืช ื”ืกืงืจื™ืคื˜ ื‘ืฉืจืช ื”ืœื™ื ื•ืงืก ืฉืœืš ื‘ื–ืžืŸ ืฉ-PostgreSQL ืคื•ืขืœ. ื•ื“ื ื›ื™ ืขื‘ื•ืจ ืžืฉืชื ื” ื”ืกื‘ื™ื‘ื” $PGDATA ืฆื•ื™ื ื” ืกืคืจื™ื™ืช ื”ื ืชื•ื ื™ื ืฉืœ PostgreSQL.

ืงื‘ืœืช ืžืกืคืจ ื”ื“ืคื™ื ื”ื’ื“ื•ืœื™ื ื”ื ื“ืจืฉื™ื

#!/bin/bash
pid=`head -1 $PGDATA/postmaster.pid`
echo "Pid:            $pid"
peak=`grep ^VmPeak /proc/$pid/status | awk '{ print $2 }'`
echo "VmPeak:            $peak kB"
hps=`grep ^Hugepagesize /proc/meminfo | awk '{ print $2 }'`
echo "Hugepagesize:   $hps kB"
hp=$((peak/hps))
echo Set Huge Pages:     $hp

ืคืœื˜ ื”ืกืงืจื™ืคื˜ ื ืจืื” ื›ืš:

ืคืœื˜ ืกืงืจื™ืคื˜

Pid:            12737
VmPeak:         180932 kB
Hugepagesize:   2048 kB
Set Huge Pages: 88

ื”ืขืจืš ื”ืžื•ืžืœืฅ ืขื‘ื•ืจ ื“ืคื™ื ื’ื“ื•ืœื™ื ื”ื•ื 88, ืื– ื›ื“ืื™ ืœื”ื’ื“ื™ืจ ืื•ืชื• ืœ-88.

ื”ืชืงื ืช ื“ืคื™ื ื’ื“ื•ืœื™ื

sysctl -w vm.nr_hugepages=88

ื‘ื“ื•ืง ื›ืขืช ื“ืคื™ื ื’ื“ื•ืœื™ื, ืชืจืื” ืฉืœื ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื“ืคื™ื ื’ื“ื•ืœื™ื (HugePages_Free = HugePages_Total).

ื“ืคื™ื ื’ื“ื•ืœื™ื ืฉื ื‘ื“ืงื• ืžื—ื“ืฉ (ืœื™ื ื•ืงืก ื‘ืœื‘ื“)

$ cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:      88
HugePages_Free:       88
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

ื›ืขืช ื”ื’ื“ืจ ืืช ื”ืคืจืžื˜ืจ huge_pages ืœ-"on" ื‘-$PGDATA/postgresql.conf ื•ื”ืคืขืœ ืžื—ื“ืฉ ืืช ื”ืฉืจืช.

ืฉื•ื‘, ืžื™ื“ืข ืขืœ ื“ืคื™ื ื’ื“ื•ืœื™ื (ืœื™ื ื•ืงืก ื‘ืœื‘ื“)

$ cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:      88
HugePages_Free:       81
HugePages_Rsvd:       64
HugePages_Surp:        0
Hugepagesize:       2048 kB

ื›ืขืช ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืฉืžืฉืชืžืฉื™ื ื‘ืžืขื˜ ืžืื•ื“ ื“ืคื™ื ื’ื“ื•ืœื™ื. ื›ืขืช ื ื ืกื” ืœื”ื•ืกื™ืฃ ื›ืžื” ื ืชื•ื ื™ื ืœืžืกื“ ื”ื ืชื•ื ื™ื.

ื—ืœืง ืžืคืขื•ืœื•ืช ืžืกื“ ื”ื ืชื•ื ื™ื ืœืžื™ื—ื–ื•ืจ ื“ืคื™ื ื’ื“ื•ืœื™ื

postgres=# CREATE TABLE foo(a INTEGER);
CREATE TABLE
postgres=# INSERT INTO foo VALUES(generate_Series(1,10000000));
INSERT 0 10000000

ื‘ื•ื ื ืจืื” ืื โ€‹โ€‹ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื™ื•ืชืจ ื‘ื“ืคื™ื ื’ื“ื•ืœื™ื ืขื›ืฉื™ื• ืžื‘ืขื‘ืจ.

ืžื™ื“ืข ื ื•ืกืฃ ื‘ื“ืคื™ื ื’ื“ื•ืœื™ื (ืœื™ื ื•ืงืก ื‘ืœื‘ื“)

$ cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:      88
HugePages_Free:       18
HugePages_Rsvd:        1
HugePages_Surp:        0
Hugepagesize:       2048 kB

ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืฉืจื•ื‘ ื”ื“ืคื™ื ื”ื’ื“ื•ืœื™ื ื ืžืฆืื™ื ื‘ืฉื™ืžื•ืฉ.

ื”ืขืจื”: ื”ืขืจืš ื”ืžืฉื•ืขืจ ืขื‘ื•ืจ HugePages ื”ืžืฉืžืฉ ื›ืืŸ ื”ื•ื ื ืžื•ืš ืžืื•ื“, ื•ื–ื” ืœื ืขืจืš ื ื•ืจืžืœื™ ืขื‘ื•ืจ ืžื›ื•ื ื” ืฉืžืคืขื™ืœื” ืกื‘ื™ื‘ืช ืžื•ืฆืจ. ืื ื ื”ืขืจืš ืืช ืžืกืคืจ ื”ื“ืคื™ื ื”ื ื“ืจืฉ ืขื‘ื•ืจ ื”ืžืขืจื›ืช ืฉืœืš ื•ื”ื’ื“ืจ ืื•ืชื ื‘ื”ืชืื ืขืœ ืกืžืš ืขื•ืžืก ื•ืžืฉืื‘ื™ื.

vm.swappiness

vm.swappiness ื”ื•ื ืคืจืžื˜ืจ ืœื™ื‘ื” ื ื•ืกืฃ ืฉื™ื›ื•ืœ ืœื”ืฉืคื™ืข ืขืœ ื‘ื™ืฆื•ืขื™ ืžืกื“ ื”ื ืชื•ื ื™ื. ืืคืฉืจื•ืช ื–ื• ืžืฉืžืฉืช ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ื”ืชื ื”ื’ื•ืช ื”ื—ืœืคื” (ื”ื—ืœืคืช ื“ืคื™ื ื‘ื–ื™ื›ืจื•ืŸ ื•ืžื—ื•ืฆื” ืœื•) ื‘ืœื™ื ื•ืงืก. ื”ืขืจืš ื ืข ื‘ื™ืŸ 0 ืœ-100. ื”ื•ื ืงื•ื‘ืข ื›ืžื” ื–ื™ื›ืจื•ืŸ ื™ื“ืคื•ืฃ ืื• ื™ืขื‘ื•ืจ. ืืคืก ืคื™ืจื•ืฉื• ืœืœื ื”ื—ืœืคื” ื•-100 ืื•ืžืจ ื”ื—ืœืคื” ืื’ืจืกื™ื‘ื™ืช.

ืืชื” ื™ื›ื•ืœ ืœื”ืฉื™ื’ ื‘ื™ืฆื•ืขื™ื ื˜ื•ื‘ื™ื ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช ืขืจื›ื™ื ื ืžื•ื›ื™ื ื™ื•ืชืจ.

ื”ื’ื“ืจืช ื–ื” ืœ-0 ืขืœ ื’ืจืขื™ื ื™ื ื—ื“ืฉื™ื ื™ื•ืชืจ ืขืœื•ืœื” ืœื’ืจื•ื ืœ- OOM Killer (ืชื”ืœื™ืš ื ื™ืงื•ื™ ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ืœื™ื ื•ืงืก) ืœื”ืจื•ื’ ืืช ื”ืชื”ืœื™ืš. ืื– ื–ื” ื‘ื˜ื•ื— ืœื”ื’ื“ื™ืจ ืื•ืชื• ืœ-1 ืื ืืชื” ืจื•ืฆื” ืœืžื–ืขืจ ืืช ื”ื”ื—ืœืคื”. ืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื‘ืœื™ื ื•ืงืก ื”ื•ื 60. ืขืจืš ื’ื‘ื•ื” ื™ื•ืชืจ ื’ื•ืจื ืœ-MMU (ื™ื—ื™ื“ืช ื ื™ื”ื•ืœ ื–ื™ื›ืจื•ืŸ) ืœื”ืฉืชืžืฉ ื™ื•ืชืจ ื‘ืฉื˜ื— ื”ื—ืœืคื” ืž-RAM, ื‘ืขื•ื“ ืฉืขืจืš ื ืžื•ืš ื™ื•ืชืจ ืฉื•ืžืจ ื™ื•ืชืจ ื ืชื•ื ื™ื/ืงื•ื“ ื‘ื–ื™ื›ืจื•ืŸ.

ืขืจืš ื ืžื•ืš ื™ื•ืชืจ ื”ื•ื ื”ื™ืžื•ืจ ื˜ื•ื‘ ืœืฉื™ืคื•ืจ ื”ื‘ื™ืฆื•ืขื™ื ื‘-PostgreSQL.

vm.overcommit_memory / vm.overcommit_ratio

ื™ื™ืฉื•ืžื™ื ืจื•ื›ืฉื™ื ื–ื™ื›ืจื•ืŸ ื•ืžืฉื—ืจืจื™ื ืื•ืชื• ื›ืืฉืจ ืื™ืŸ ื‘ื• ืขื•ื“ ืฆื•ืจืš. ืื‘ืœ ื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื, ื”ื™ื™ืฉื•ื ืžืงื‘ืœ ื™ื•ืชืจ ืžื“ื™ ื–ื™ื›ืจื•ืŸ ื•ืื™ื ื• ืžืฉื—ืจืจ ืื•ืชื•. ื–ื” ืขืœื•ืœ ืœื’ืจื•ื ืœืจื•ืฆื— OOM. ืœื”ืœืŸ ืขืจื›ื™ ื”ืคืจืžื˜ืจื™ื ื”ืืคืฉืจื™ื™ื vm.overcommit_memory ืขื ืชื™ืื•ืจ ืœื›ืœ ืื—ื“:

  1. ื”ืชื—ื™ื™ื‘ื•ืช ื™ืชืจ ื”ื™ื•ืจื™ืกื˜ื™ืช (ื‘ืจื™ืจืช ืžื—ื“ืœ); ื™ื•ืจื™ืกื˜ื™ืงื” ืžื‘ื•ืกืกืช ื’ืจืขื™ืŸ
  2. ืืคืฉืจ ื”ืชื—ื™ื™ื‘ื•ืช ื™ืชืจ ื‘ื›ืœ ืžืงืจื”
  3. ืืœ ืชื’ื–ื™ื, ืืœ ืชื—ืจื•ื’ ืžื™ื—ืก ื”ืชื—ื™ื™ื‘ื•ืช ื™ืชืจ.

ะกัั‹ะปะบะฐ: https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

vm.overcommit_ratio - ืื—ื•ื– ื–ื™ื›ืจื•ืŸ RAM ื–ืžื™ืŸ ืœืขื•ืžืก ื™ืชืจ. ืขืจืš ืฉืœ 50% ื‘ืžืขืจื›ืช ืขื 2 GB ืฉืœ ื–ื™ื›ืจื•ืŸ RAM ื™ื›ื•ืœ ืœื”ืงืฆื•ืช ืขื“ 3 GB ืฉืœ ื–ื™ื›ืจื•ืŸ RAM.

ืขืจืš ืฉืœ 2 ืขื‘ื•ืจ vm.overcommit_memory ืžืกืคืง ื‘ื™ืฆื•ืขื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืขื‘ื•ืจ PostgreSQL. ืขืจืš ื–ื” ืžืžืงืกื ืืช ื”ืฉื™ืžื•ืฉ ื‘-RAM ืฉืœ ืชื”ืœื™ืš ื”ืฉืจืช ืœืœื ื›ืœ ืกื™ื›ื•ืŸ ืžืฉืžืขื•ืชื™ ืœื”ื™ื”ืจื’ ืขืœ ื™ื“ื™ ืชื”ืœื™ืš ื”-OOM Killer. ื”ืืคืœื™ืงืฆื™ื” ืชื•ื›ืœ ืœื”ื™ื˜ืขืŸ ืžื—ื“ืฉ, ืืš ืจืง ื‘ื’ื‘ื•ืœื•ืช ื”ื—ืจื™ืคื”, ืžื” ืฉืžืคื—ื™ืช ืืช ื”ืกื™ื›ื•ืŸ ืฉืœ ืจื•ืฆื— OOM ืœื”ืจื•ื’ ืืช ื”ืชื”ืœื™ืš. ืœื›ืŸ, ืขืจืš ืฉืœ 2 ื ื•ืชืŸ ื‘ื™ืฆื•ืขื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืžืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ 0. ืขื ื–ืืช, ื ื™ืชืŸ ืœืฉืคืจ ืืช ื”ืžื”ื™ืžื ื•ืช ืขืœ ื™ื“ื™ ื”ื‘ื˜ื—ืช ื–ื™ื›ืจื•ืŸ ืžื—ื•ืฅ ืœื˜ื•ื•ื— ืœื ืขื•ืžืก ื™ืชืจ ืขืœ ื”ืžื™ื“ื”. ื–ื” ืžื‘ื˜ืœ ืืช ื”ืกื™ื›ื•ืŸ ืฉื”ืชื”ืœื™ืš ื™ื™ื”ืจื’ ืขืœ ื™ื“ื™ ืจื•ืฆื— OOM.

ื‘ืžืขืจื›ื•ืช ืœืœื ื”ื—ืœืคื”, ืขืœื•ืœื” ืœื”ืชืจื—ืฉ ื‘ืขื™ื” ืขื vm.overcommit_memory ื”ืฉื•ื•ื” ืœ-2.

https://www.postgresql.org/docs/current/static/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT

vm.dirty_background_ratio / vm.dirty_background_bytes

vm.dirty_background_ratio ื”ื•ื ืื—ื•ื– ื”ื–ื™ื›ืจื•ืŸ ื”ืžืœื ื‘ื“ืคื™ื ืžืœื•ื›ืœื›ื™ื ืฉืฆืจื™ืš ืœื›ืชื•ื‘ ืœื“ื™ืกืง. ื”ื”ื“ื—ื” ืœื“ื™ืกืง ืžืชืจื—ืฉืช ื‘ืจืงืข. ื”ืขืจืš ืฉืœ ืคืจืžื˜ืจ ื–ื” ื ืข ื‘ื™ืŸ 0 ืœ-100; ืขื ื–ืืช, ืขืจืš ืžืชื—ืช ืœ-5 ืขืœื•ืœ ืœื”ื™ื•ืช ืœื ื™ืขื™ืœ ื•ื›ืžื” ื’ืจืขื™ื ื™ื ืœื ืชื•ืžื›ื™ื ื‘ื•. 10 ื”ื•ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื‘ืจื•ื‘ ืžืขืจื›ื•ืช ืœื™ื ื•ืงืก. ืืชื” ื™ื›ื•ืœ ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื ืขื‘ื•ืจ ืคืขื•ืœื•ืช ืขืชื™ืจื•ืช ื›ืชื™ื‘ื” ืขืœ ื™ื“ื™ ื’ื•ืจื ืงื˜ืŸ ื™ื•ืชืจ, ืžื” ืฉืื•ืžืจ ืฉืœื™ื ื•ืงืก ืชืฉื˜ื•ืฃ ื“ืคื™ื ืžืœื•ื›ืœื›ื™ื ื‘ืจืงืข.

ืืชื” ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืืช ื”ืขืจืš vm.dirty_background_bytes ื‘ื”ืชืื ืœืžื”ื™ืจื•ืช ื”ื ืกื™ืขื” ืฉืœืš.

ืื™ืŸ ืขืจื›ื™ื "ื˜ื•ื‘ื™ื" ืขื‘ื•ืจ ืฉื ื™ ื”ืคืจืžื˜ืจื™ื ื”ืœืœื• ืžื›ื™ื•ื•ืŸ ืฉืฉื ื™ื”ื ืชืœื•ื™ื™ื ื‘ื—ื•ืžืจื”. ืขื ื–ืืช, ื”ื’ื“ืจืช vm.dirty_background_ratio ืœ-5 ื•-vm.dirty_background_bytes ืœ-25% ืžืžื”ื™ืจื•ืช ื”ื“ื™ืกืง ืžืฉืคืจืช ืืช ื”ื‘ื™ืฆื•ืขื™ื ืœ-~25% ื‘ืจื•ื‘ ื”ืžืงืจื™ื.

vm.dirty_ratio/dirty_bytes

ื–ื” ืื•ืชื• ื“ื‘ืจ ื›ืžื• vm.dirty_background_ratio/dirty_background_bytes, ืคืจื˜ ืœื›ืš ืฉื”ืื™ืคื•ืก ืžื‘ื•ืฆืข ื‘ื”ืคืขืœืช ืขื•ื‘ื“, ื—ื•ืกื ืืช ื”ืืคืœื™ืงืฆื™ื”. ืœื›ืŸ vm.dirty_ratio ืฆืจื™ืš ืœื”ื™ื•ืช ื’ื‘ื•ื” ืž vm.dirty_background_ratio. ื–ื” ืžื‘ื˜ื™ื— ืฉืชื”ืœื™ื›ื™ ืจืงืข ื™ืชื—ื™ืœื• ืžื•ืงื“ื ื™ื•ืชืจ ื›ื“ื™ ืœืžื ื•ืข ื—ืกื™ืžืช ื”ืืคืœื™ืงืฆื™ื” ื›ื›ืœ ื”ืืคืฉืจ. ืืชื” ื™ื›ื•ืœ ืœื”ืชืื™ื ืืช ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ืฉื ื™ ื”ื™ื—ืกื™ื ื”ืœืœื• ื‘ื”ืชืื ืœืขื•ืžืก ื”ืงืœื˜/ืคืœื˜ ืฉืœ ื”ื“ื™ืกืง.

ืกืš ื”ื›ืœ

ืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ื”ื’ื“ืจื•ืช ืื—ืจื•ืช ื›ื“ื™ ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื, ืื‘ืœ ื”ืฉื™ืคื•ืจื™ื ื™ื”ื™ื• ืžื™ื ื™ืžืœื™ื™ื ื•ืœื ืชืจืื” ืชื•ืขืœืช ืจื‘ื”. ืขืœื™ื ื• ืœื–ื›ื•ืจ ืฉืœื ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ื—ืœื•ืช ืขืœ ื›ืœ ืกื•ื’ื™ ื”ืืคืœื™ืงืฆื™ื•ืช. ื—ืœืง ืžื”ืืคืœื™ืงืฆื™ื•ืช ืคื•ืขืœื•ืช ื˜ื•ื‘ ื™ื•ืชืจ ื›ืืฉืจ ืื ื• ืžืฉื ื™ื ื—ืœืง ืžื”ื”ื’ื“ืจื•ืช, ื•ื—ืœืง ืœื. ืขืœื™ืš ืœืžืฆื•ื ืืช ื”ืื™ื–ื•ืŸ ื”ื ื›ื•ืŸ ื‘ื™ืŸ ืงื‘ื™ืขืช ื”ืชืฆื•ืจื” ืฉืœ ื”ื’ื“ืจื•ืช ืืœื” ืœืขื•ืžืก ื”ืขื‘ื•ื“ื” ื”ืฆืคื•ื™ ืฉืœืš ื•ืกื•ื’ ื”ื™ื™ืฉื•ื, ื•ื›ืŸ ืขืœื™ืš ืœืฉืงื•ืœ ืืช ื”ืชื ื”ื’ื•ืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ื‘ืขืช ื›ื•ื•ื ื•ืŸ. ื”ื’ื“ืจืช ืคืจืžื˜ืจื™ ืœื™ื‘ื” ืื™ื ื” ืงืœื” ื›ืžื• ื”ื’ื“ืจืช ืคืจืžื˜ืจื™ื ืฉืœ ืžืกื“ ื ืชื•ื ื™ื; ืงืฉื” ื™ื•ืชืจ ืœื”ืžืœื™ืฅ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”