αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Linux Kernel Options αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– PostgreSQL

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Linux Kernel Options αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– PostgreSQL αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž PostgreSQL αž›αŸ’αž’αž”αŸ†αž•αž»αžαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž™αŸ‰αžΆαž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžαžΊαžŽαŸ‚αž› OS αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž·αž“αž›αŸ’αž’αž’αžΆαž…αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžŸαŸ„αž™αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžœαžΆαž‡αžΆαž€αžΆαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαŸ‚αž›αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ„αž™αž™αŸ„αž„αž‘αŸ…αžαžΆαž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αžšαž”αŸ€αž”αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž–αž½αž€αžœαžΆαŸ”

SHMMAX / SHMALL

SHMMAX αž‚αžΊαž‡αžΆαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαžΊαžŽαŸ‚αž›αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž‘αŸ†αž αŸ†αž’αžαž·αž”αžšαž˜αžΆαž“αŸƒαž•αŸ’αž“αŸ‚αž€αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžαŸ‚αž˜αž½αž™αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΈαž“αž»αž…αž’αžΆαž…αž”αŸ‚αž„αž…αŸ‚αž€αž”αžΆαž“αŸ” αž˜αž»αž“αž–αŸαž›αž€αŸ†αžŽαŸ‚ 9.2 PostgreSQL αž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’ V (SysV) αžŠαŸ‚αž›αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ SHMMAX αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈ 9.2, PostgreSQL αž”αžΆαž“αž”αŸ’αžαžΌαžšαž‘αŸ…αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ POSIX αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž”αŸŠαžΈαžαžαž·αž…αž“αŸƒαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžšαž”αžŸαŸ‹ System V αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαŸ”

αž˜αž»αž“αž€αŸ†αžŽαŸ‚ 9.3 SHMMAX αž‚αžΊαž‡αžΆαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαžΊαžŽαŸ‚αž›αžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αžαŸ” αžαž˜αŸ’αž›αŸƒ SHMMAX αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αžΆαž”αŸƒαŸ”

αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžš SHMALL αž‚αžΊαž‡αžΆαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαžΊαžŽαŸ‚αž›αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹
αž”αžšαž·αž˜αžΆαžŽαž–αŸαž‰αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αŸƒαž‘αŸ†αž–αŸαžšαžŸαžαž·αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αžαž˜αŸ’αž›αŸƒ SHMMAX, SHMALL ឬ SHMMIN αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αžŸαžΌαž˜αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž’αžΆαž™αž—αžΈαž’αŸαžŸ.

SHM * αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž - αž›αžΈαž“αž»αž…

$ 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.shmall
  • MacOS XαŸ– kern.sysv.shmmax, kern.sysv.shmall

αž€αŸ’αžšαž»αž˜αž€αžΆαžšαž„αžΆαžš αž’αŸαžŸαžŸαŸŠαžΈαž› αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαž˜αŸ’αž›αŸƒαž‡αžΆαž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αž›αŸƒαžαŸαžš αž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžαž»αž‘αŸ… /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 αŸ” αž‘αŸ†αž–αŸαžšαž‘αŸ†αž“αžΎαž”αž“αž·αž„αž“αŸ…αž›αžΎ Windows - αž‘αŸ†αž–αŸαžšαž’αŸ†. αž‘αŸ†αž–αŸαžšαž‚αžΊαž‡αžΆαž”αŸ†αžŽαŸ‚αž€αž“αŸƒ RAM αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž½αž™αŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž½αž™αž’αžΆαž…αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž‘αŸ†αž–αŸαžš αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžšαžΌαžœαž€αžΆαžšαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“ αž‘αŸ†αž–αŸαžšαž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αŸ” OS αžšαž€αŸ’αžŸαžΆαžαžΆαžšαžΆαž„αž”αŸ‚αž„αž…αŸ‚αž€αž‘αŸ†αž–αŸαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž‘αŸ†αž αŸ†αž‘αŸ†αž–αŸαžšαž€αžΆαž“αŸ‹αžαŸ‚αžαžΌαž… αžαžΆαžšαžΆαž„αž€αžΆαž“αŸ‹αžαŸ‚αž’αŸ† αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αž™αžΌαžšαžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αžšαž€αž‘αŸ†αž–αŸαžšαž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‘αŸ†αž–αŸαžšαž“αŸ„αŸ‡αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž‘αŸ†αž–αŸαžšαž’αŸ†αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž”αŸ’αžšαžΎαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž…αŸ’αžšαžΎαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž›αžΎαžŸαŸ” αž…αŸ†αž“αž½αž“αž˜αžΎαž›αž‘αŸ†αž–αŸαžšαžαž·αž…αž‡αžΆαž„ αž€αŸ†αž αž»αžŸαž‘αŸ†αž–αŸαžšαžαž·αž…αž‡αžΆαž„ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αžΆαž“/αžŸαžšαžŸαŸαžšαž›αžΏαž“αž‡αžΆαž„αž›αžΎαž”αžŽαŸ’αžαž»αŸ†αž’αŸ†αž‡αžΆαž„αŸ” αž›αž‘αŸ’αž’αž•αž›αž‚αžΊαž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαŸ”

PostgreSQL αž‚αžΆαŸ†αž‘αŸ’αžšαžαŸ‚αž‘αŸ†αž–αŸαžšαž’αŸ†αž“αŸ…αž›αžΎαž›αžΈαž“αž»αž…αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž›αžΈαž“αž»αž…αž”αŸ’αžšαžΎαž‘αŸ†αž–αŸαžšαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† 4 KB αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž…αŸ’αžšαžΎαž“αž–αŸαž€ αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹αž‘αŸ†αž–αŸαžšαž’αŸ†αž‡αžΆαž„αŸ” αž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαž„αŸ’αž€αŸαžαžƒαžΎαž‰αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαž‘αŸ†αž–αŸαžšαž’αŸ† 2 MB αž“αž·αž„αžšαž αžΌαžαžŠαž›αŸ‹ 1 GB αŸ” αž‘αŸ†αž αŸ†αž‘αŸ†αž–αŸαžšαž’αŸ†αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž‘αŸ†αž–αŸαžšαž’αŸ† αž“αž·αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž›αžΈαž“αž»αž…αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž†αŸ’αž˜αžΆ /proc/meminfo | grep - αžαŸ’αž‰αž»αŸ†αž’αŸ†.

αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž‘αŸ†αž–αŸαžšαž’αŸ† (αž›αžΈαž“αž»αž…αžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡)

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 MB) αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αŸ†αž“αž½αž“αž‘αŸ†αž–αŸαžšαž’αŸ†αžŸαžšαž»αž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αŸ… 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 αž‘αŸ… "αž”αžΎαž€" αž“αŸ…αž€αŸ’αž“αž»αž„ $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. Heuristic overcommit (αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜); αžŸαžšαžΈαžšαžœαž·αž‘αŸ’αž™αžΆαž•αŸ’αž’αŸ‚αž€αž›αžΎαžαžΊαžŽαŸ‚αž›
  2. αž’αž“αž»αž‰αŸ’αž‰αžΆαžβ€‹αž±αŸ’αž™β€‹αž›αžΎαžŸβ€‹αž–αžΈβ€‹αž“αŸαŸ‡β€‹αž‘αŸ€αžβ€‹
  3. αž€αž»αŸ†αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž αž½αžŸαž”αŸ’αžšαž˜αžΆαžŽ αž€αž»αŸ†αž±αŸ’αž™αž›αžΎαžŸαž–αžΈαžŸαž˜αžΆαž˜αžΆαžαŸ’αžšαžŠαŸ‚αž›αž›αžΎαžŸαŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαž™αŸ„αž„: https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

vm.overcommit_ratio - αž—αžΆαž‚αžšαž™αž“αŸƒ RAM αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž›αžΎαžŸαž‘αž˜αŸ’αž„αž“αŸ‹αŸ” αžαž˜αŸ’αž›αŸƒ 50% αž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž˜αžΆαž“ RAM 2 GB αž’αžΆαž…αž”αŸ‚αž„αž…αŸ‚αž€ RAM αžšαž αžΌαžαžŠαž›αŸ‹ 3 GB αŸ”

αžαž˜αŸ’αž›αŸƒ 2 αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ vm.overcommit_memory αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž˜αž»αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ PostgreSQL αŸ” αžαž˜αŸ’αž›αŸƒαž“αŸαŸ‡αž”αž„αŸ’αž€αžΎαž“αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ RAM αžšαž”αžŸαŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž αžΆαž“αž·αž—αŸαž™αž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž›αžΆαž”αŸ‹αžŠαŸ„αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžƒαžΆαžαž€αžš OOM αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αžΉαž„αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΎαž„αžœαž·αž‰αž”αžΆαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž“αŸƒαž€αžΆαžšαžšαžαŸ‹αž αž½αžŸαž€αž˜αŸ’αžšαž·αžαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αžŠαŸ‚αž›αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž αžΆαž“αž·αž—αŸαž™αž“αŸƒαžƒαžΆαžαž€αžš 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. αž“αŸαŸ‡αž’αžΆαž“αžΆαžαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αž»αž“αž“αŸαŸ‡ αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ‚αžαž˜αŸ’αžšαžΌαžœαž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αžŸαž˜αžΆαž˜αžΆαžαŸ’αžšαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸαŸ‡ αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž€αžΆαžšαž•αŸ’αž‘αž»αž€ I/O αžšαž”αžŸαŸ‹αžαžΆαžŸαŸ”

αž›αž‘αŸ’αž’αž•αž›

αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž›αž˜αŸ’αž’αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αž“αžΉαž„αž˜αžΆαž“αžαž·αž…αžαž½αž… αž αžΎαž™αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αžƒαžΎαž‰αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž…αŸ’αžšαžΎαž“αž‘αŸαŸ” αž™αžΎαž„αžαŸ’αžšαžΌαžœαžαŸ‚αž…αž„αž…αžΆαŸ†αžαžΆ αž˜αž·αž“αž˜αŸ‚αž“αž‚αŸ’αžšαž”αŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αž“αŸ„αŸ‡αž‘αŸαŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž“αŸ…αž–αŸαž›αž™αžΎαž„αž€αŸ‚αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž αžΎαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αž›αŸ‡αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αžŸαŸ’αžœαŸ‚αž„αžšαž€αžŸαž˜αžαž»αž›αŸ’αž™αžŠαŸαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžšαžœαžΆαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžšαžŠαŸ‚αž›αžšαŸ†αž–αžΉαž„αž‘αž»αž€ αž“αž·αž„αž”αŸ’αžšαž—αŸαž‘αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αž’αŸ’αž“αž€αž€αŸαžαŸ’αžšαžΌαžœαž–αž·αž…αžΆαžšαžŽαžΆαž’αŸ†αž–αžΈαž₯αžšαž·αž™αžΆαž”αžαžšαž”αžŸαŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž•αž„αžŠαŸ‚αžšαž“αŸ…αž–αŸαž›αž›αŸƒαžαž˜αŸ’αžšαžΌαžœαŸ” αž€αžΆαžšβ€‹αž€αŸ†αžŽαžαŸ‹β€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’β€‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšβ€‹αžαžΊαžŽαŸ‚αž›β€‹αž˜αž·αž“β€‹αž„αžΆαž™αžŸαŸ’αžšαž½αž›β€‹αžŠαžΌαž…β€‹αž€αžΆαžšβ€‹αž€αŸ†αžŽαžαŸ‹β€‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšβ€‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αž‘αŸ αžœαžΆβ€‹αž–αž·αž”αžΆαž€β€‹αž‡αžΆαž„β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αžŽαŸ‚αž“αžΆαŸ†αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹