PostgreSQL เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ Linux เช•เชฐเซเชจเชฒ เชตเชฟเช•เชฒเซเชชเซ‹เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‡

PostgreSQL เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ Linux เช•เชฐเซเชจเชฒ เชตเชฟเช•เชฒเซเชชเซ‹เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‡ เชถเซเชฐเซ‡เชทเซเช  PostgreSQL เช•เชพเชฎเช—เซ€เชฐเซ€ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡. เช–เชฐเชพเชฌ เชฐเซ€เชคเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค OS เช•เชฐเซเชจเชฒ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช–เชฐเชพเชฌ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐ เชชเซเชฐเชฆเชฐเซเชถเชจเชฎเชพเช‚ เชชเชฐเชฟเชฃเชฎเซ€ เชถเช•เซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€, เชคเซ‡ เช†เชตเชถเซเชฏเช• เช›เซ‡ เช•เซ‡ เช† เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชตเชฐเซเช•เชฒเซ‹เชก เช…เชจเซเชธเชพเชฐ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡. เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚, เช…เชฎเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ Linux เช•เชฐเซเชจเชฒ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเซ€เชถเซเช‚ เช•เซ‡ เชœเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐ เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซ‡ เช…เชธเชฐ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเชตเซเช‚.

SHMMAX / SHMALL

SHMMAX เช•เชฐเซเชจเชฒ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เช›เซ‡ เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชธเชฟเช‚เช—เชฒ เชถเซ‡เชฐเซเชก เชฎเซ‡เชฎเชฐเซ€ เชธเซ‡เช—เชฎเซ‡เชจเซเชŸเชจเซเช‚ เชฎเชนเชคเซเชคเชฎ เชฎเชพเชช เชจเช•เซเช•เซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡ เช•เซ‡ เชœเซ‡ Linux เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชซเชพเชณเชตเซ€ เชถเช•เซ‡ เช›เซ‡. เชธเช‚เชธเซเช•เชฐเชฃ 9.2 เชชเชนเซ‡เชฒเชพ, PostgreSQL เช เชธเชฟเชธเซเชŸเชฎ V (SysV) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เชนเชคเซ‹, เชœเซ‡เชจเซ‡ SHMMAX เชธเซ‡เชŸเชฟเช‚เช—เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. 9.2 เชชเช›เซ€, PostgreSQL เช POSIX เชถเซ‡เชฐเซเชก เชฎเซ‡เชฎเชฐเซ€ เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซเชฏเซเช‚. เชคเซ‡เชฅเซ€ เชนเชตเซ‡ เชธเชฟเชธเซเชŸเชฎ V เชถเซ‡เชฐ เช•เชฐเซ‡เชฒเซ€ เชฎเซ‡เชฎเชฐเซ€เชจเชพ เช“เช›เชพ เชฌเชพเช‡เชŸเซเชธ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡.

เช†เชตเซƒเชคเซเชคเชฟ 9.3 เชชเชนเซ‡เชฒเชพ, SHMMAX เช เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช•เชฐเซเชจเชฒ เชชเชฐเชฟเชฎเชพเชฃ เชนเชคเซเช‚. SHMMAX เชฎเซ‚เชฒเซเชฏ เชฌเชพเช‡เชŸเซเชธเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช›เซ‡.

เชคเซ‡เชตเซ€ เชœ เชฐเซ€เชคเซ‡ SHMALL เชจเช•เซเช•เซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชชเชฐเชพเชคเซเช‚ เชฌเซ€เชœเซเช‚ เช•เชฐเซเชจเชฒ เชชเชฐเชฟเชฎเชพเชฃ เช›เซ‡
เชตเชนเซ‡เช‚เชšเชพเชฏเซ‡เชฒ เชฎเซ‡เชฎเชฐเซ€ เชชเซƒเชทเซเช เซ‹เชจเซเช‚ เชธเชฟเชธเซเชŸเชฎ-เชตเซเชฏเชพเชชเซ€ เชตเซ‹เชฒเซเชฏเซเชฎ. เชตเชฐเซเชคเชฎเชพเชจ SHMMAX, SHMALL, เช…เชฅเชตเชพ SHMMIN เชฎเซ‚เชฒเซเชฏเซ‹ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡, เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช†เชˆเชชเซ€เชธเซ€.

SHM* เชตเชฟเช—เชคเซ‹ - Linux

$ 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 เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชธเชฟเชธเซเชŸเชฎ เชตเซ€ เช†เชˆเชชเซ€เชธเซ€ เชตเชนเซ‡เช‚เชšเชพเชฏเซ‡เชฒ เชฎเซ‡เชฎเชฐเซ€ เชซเชพเชณเชตเชตเชพ เชฎเชพเชŸเซ‡. เช† เชชเชฐเชฟเชฎเชพเชฃ เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช•เชฐเซเชจเชฒ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชฎเชพเช‚เชจเซเช‚ เชเช• เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชชเชฃ เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถเชพเช“ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ‹ เช›เซ‹, เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ 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.

เชตเซเชฏเชพเช–เซเชฏเชพเช“เชฎเชพเช‚ เชคเชซเชพเชตเชคเซ‹เชจเซ‡ เชธเชฎเชœเชตเซเช‚

Linux เช…เชจเซ‡ MacOS X เชชเชฐ SHMMAX/SHMALL เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเซเช‚ เชฅเซ‹เชกเซเช‚ เช…เชฒเช— เช›เซ‡:

  • Linux: kernel.shmmax, kernel.shmall
  • 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

Linux เชชเชฐ เช•เชฐเซเชจเชฒ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเซเชธ เชฌเชฆเชฒเชตเซเช‚

# 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 เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹

เชตเชฟเชถเชพเชณ เชชเซƒเชทเซเช เซ‹

Linux เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ 4 KB เชฎเซ‡เชฎเชฐเซ€ เชชเซƒเชทเซเช เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, BSD XNUMX KB เชฎเซ‡เชฎเชฐเซ€ เชชเซƒเชทเซเช เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เชธเซเชชเชฐ เชชเชพเชจเชพ, เช…เชจเซ‡ เชตเชฟเชจเซเชกเซ‹เช เชชเชฐ - เชฎเซ‹เชŸเชพ เชชเชพเชจเชพ. เชชเซƒเชทเซเช  เช เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชซเชพเชณเชตเซ‡เชฒ RAM เชจเซ‹ เชเช• เชญเชพเช— เช›เซ‡. เชฎเซ‡เชฎเชฐเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹เชจเซ‡ เช†เชงเชพเชฐเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เชฌเชนเซเชตเชฟเชง เชชเซƒเชทเซเช เซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชœเซ‡เชŸเชฒเซ€ เชตเชงเซ เชฎเซ‡เชฎเชฐเซ€เชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡, เชคเซ‡เชŸเชฒเชพ เชตเชงเซ เชชเซƒเชทเซเช เซ‹ เชซเชพเชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. OS เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชฎเชพเชŸเซ‡ เชชเซƒเชทเซเช  เชซเชพเชณเชตเชฃเซ€ เช•เซ‹เชทเซเชŸเช• เชœเชพเชณเชตเซ€ เชฐเชพเช–เซ‡ เช›เซ‡. เชชเซƒเชทเซเช เชจเซเช‚ เช•เชฆ เชœเซ‡เชŸเชฒเซเช‚ เชจเชพเชจเซเช‚ เช›เซ‡, เชŸเซ‡เชฌเชฒ เชœเซ‡เชŸเชฒเซเช‚ เชฎเซ‹เชŸเซเช‚ เช›เซ‡, เชคเซ‡ เชชเซƒเชทเซเช  เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชชเซƒเชทเซเช  เชถเซ‹เชงเชตเชพเชฎเชพเช‚ เชคเซ‡เชŸเชฒเซ‹ เชตเชงเซ เชธเชฎเชฏ เชฒเซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€ เชฎเซ‹เชŸเชพ เชชเซƒเชทเซเช เซ‹ เช“เช›เซ€ เช“เชตเชฐเชนเซ‡เชก เชธเชพเชฅเซ‡ เชฎเซ‹เชŸเซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ เชฎเซ‡เชฎเชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡; เช“เช›เชพ เชชเซƒเชทเซเช  เชฆเซƒเชถเซเชฏเซ‹, เช“เช›เชพ เชชเซƒเชทเซเช  เช–เชพเชฎเซ€เช“, เชฎเซ‹เชŸเชพ เชฌเชซเชฐเซเชธ เชชเชฐ เชเชกเชชเซ€ เชตเชพเช‚เชšเชจ/เชฒเซ‡เช–เชตเชพเชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€. เชชเชฐเชฟเชฃเชพเชฎ เชธเซเชงเชพเชฐเซ‡เชฒ เชชเซเชฐเชฆเชฐเซเชถเชจ เช›เซ‡.

PostgreSQL เชซเช•เซเชค Linux เชชเชฐ เชฎเซ‹เชŸเชพ เชชเซ‡เชœเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡. เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, Linux 4 KB เชฎเซ‡เชฎเชฐเซ€ เชชเซƒเชทเซเช เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชเชตเชพ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เช•เซ‡ เชœเซเชฏเชพเช‚ เช˜เชฃเซ€ เชฌเชงเซ€ เชฎเซ‡เชฎเชฐเซ€ เช‘เชชเชฐเซ‡เชถเชจ เชนเซ‹เชฏ, เชฎเซ‹เชŸเชพ เชชเซƒเชทเซเช เซ‹ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. 2 MB เช…เชจเซ‡ 1 GB เชธเซเชงเซ€เชจเชพ เชฎเซ‹เชŸเชพ เชชเซƒเชทเซเช เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชจ เชฒเชพเชญ เชœเซ‹เชตเชพ เชฎเชณเซ‡ เช›เซ‡. เชฎเซ‹เชŸเชพ เชชเซƒเชทเซเช เชจเซเช‚ เช•เชฆ เชฌเซเชŸ เชธเชฎเชฏเซ‡ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชคเชฎเซ‡ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเชฎเชพเชฐเชพ Linux เชฎเชถเซ€เชจ เชชเชฐ เชฎเซ‹เชŸเชพ เชชเซƒเชทเซเช  เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชตเชชเชฐเชพเชถเชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชšเช•เชพเชธเซ€ เชถเช•เซ‹ เช›เซ‹ 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 MB) เชชเชฐ เชธเซ‡เชŸ เชนเซ‹เชตเชพ เช›เชคเชพเช‚, เชฎเซ‹เชŸเชพ เชชเซƒเชทเซเช เซ‹เชจเซ€ เช•เซเชฒ เชธเช‚เช–เซเชฏเชพ 0 เชชเชฐ เชธเซ‡เชŸ เช›เซ‡. เช†เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชฎเซ‹เชŸเชพ เชชเซƒเชทเซเช เซ‹ เช…เช•เซเชทเชฎ เช›เซ‡.

เชฎเซ‹เชŸเชพ เชชเซƒเชทเซเช เซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชจเช•เซเช•เซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸ

เช† เชธเชฐเชณ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชœเชฐเซ‚เชฐเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชฎเซ‹เชŸเชพ เชชเชพเชจเชพ เช†เชชเซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ PostgreSQL เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเชพ Linux เชธเชฐเซเชตเชฐ เชชเชฐ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเซ‹. เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒ เชฎเชพเชŸเซ‡ $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

เชนเชตเซ‡ $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 เช…เชจเซเชฏ เช•เชฐเซเชจเชฒ เชชเชฐเชฟเชฎเชพเชฃ เช›เซ‡ เชœเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเซเชฐเชญเชพเชตเชจเซ‡ เช…เชธเชฐ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เชตเชฟเช•เชฒเซเชชเชจเซ‹ เช‰เชชเชฏเซ‹เช— Linux เชฎเชพเช‚ เช…เชฆเชฒเชพเชฌเชฆเชฒเซ€ (เชฎเซ‡เชฎเชฐเซ€เชฎเชพเช‚เชฅเซ€ เช…เชจเซ‡ เชฌเชนเชพเชฐ เชชเซƒเชทเซเช เซ‹ เชธเซเชตเซ‡เชชเชฟเช‚เช—) เชจเชพ เชตเชฐเซเชคเชจเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เช•เชฟเช‚เชฎเชค 0 เชฅเซ€ 100 เชธเซเชงเซ€เชจเซ€ เช›เซ‡. เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เช•เซ‡เชŸเชฒเซ€ เชฎเซ‡เชฎเชฐเซ€ เชชเซ‡เชœ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชฅเชตเชพ เชชเซ‡เชœ เช†เช‰เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชถเซ‚เชจเซเชฏ เชเชŸเชฒเซ‡ เช•เซ‹เชˆ เชตเชฟเชจเชฟเชฎเชฏ เชจเชนเซ€เช‚ เช…เชจเซ‡ 100 เชเชŸเชฒเซ‡ เช†เช•เซเชฐเชฎเช• เชตเชฟเชจเชฟเชฎเชฏ.

เชคเชฎเซ‡ เชจเซ€เชšเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เชธเซ‡เชŸ เช•เชฐเซ€เชจเซ‡ เชธเชพเชฐเซเช‚ เชชเซเชฐเชฆเชฐเซเชถเชจ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹.

เชจเชตเชพ เช•เชฐเซเชจเชฒ เชชเชฐ เช†เชจเซ‡ 0 เชชเชฐ เชธเซ‡เชŸ เช•เชฐเชตเชพเชฅเซ€ OOM เช•เชฟเชฒเชฐ (เชฒเชฟเชจเช•เซเชธเชจเซ€ เชฎเซ‡เชฎเชฐเซ€ เช•เซเชฒเชฟเชจเชฟเช‚เช— เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ) เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€ เชœเซ‹ เชคเชฎเซ‡ เชธเซเชตเซ‡เชชเชฟเช‚เช—เชจเซ‡ เช“เช›เซเช‚ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹เชต เชคเซ‹ เชคเซ‡เชจเซ‡ 1 เชชเชฐ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เชธเชฒเชพเชฎเชค เช›เซ‡. Linux เชฎเชพเช‚ เชกเชฟเชซเซ‹เชฒเซเชŸ เชฎเซ‚เชฒเซเชฏ 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 GB RAM เชงเชฐเชพเชตเชคเซ€ เชธเชฟเชธเซเชŸเชฎ เชชเชฐ 2% เชจเซเช‚ เชฎเซ‚เชฒเซเชฏ 3 GB เชธเซเชงเซ€เชจเซ€ RAM เชซเชพเชณเชตเซ€ เชถเช•เซ‡ เช›เซ‡.

vm.overcommit_memory เชฎเชพเชŸเซ‡ 2 เชจเซเช‚ เชฎเซ‚เชฒเซเชฏ PostgreSQL เชฎเชพเชŸเซ‡ เชตเชงเซ เชธเชพเชฐเซเช‚ เชชเซเชฐเชฆเชฐเซเชถเชจ เชชเซ‚เชฐเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡. เช† เชฎเซ‚เชฒเซเชฏ OOM เช•เชฟเชฒเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชฎเชพเชฐเซเชฏเชพ เชœเชตเชพเชจเชพ เช•เซ‹เชˆเชชเชฃ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชœเซ‹เช–เชฎ เชตเชฟเชจเชพ เชธเชฐเซเชตเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเชพ RAM เชตเชชเชฐเชพเชถเชจเซ‡ เชฎเชนเชคเซเชคเชฎ เช•เชฐเซ‡ เช›เซ‡. เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชซเชฐเซ€เชฅเซ€ เชฒเซ‹เชก เช•เชฐเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชนเชถเซ‡, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ เช“เชตเชฐเชฐเชจเชจเซ€ เชฎเชฐเซเชฏเชพเชฆเชพเชฎเชพเช‚, เชœเซ‡ OOM เช•เชฟเชฒเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชฎเชพเชฐเซ€ เชจเชพเช–เชตเชพเชจเชพ เชœเซ‹เช–เชฎเชจเซ‡ เช˜เชŸเชพเชกเซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€, 2 เชจเซเช‚ เชฎเซ‚เชฒเซเชฏ 0 เชจเซ€ เชกเชฟเชซเซ‹เชฒเซเชŸ เชฎเซ‚เชฒเซเชฏ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เชชเซเชฐเชฆเชฐเซเชถเชจ เช†เชชเซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชฐเซ‡เชจเซเชœเชจเซ€ เชฌเชนเชพเชฐเชจเซ€ เชฎเซ‡เชฎเชฐเซ€ เช“เชตเชฐเชฒเซ‹เชก เชจเชฅเซ€ เชคเซ‡เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเซ€เชจเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏเชคเชพ เชธเซเชงเชพเชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช† OOM เช•เชฟเชฒเชฐ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชฎเชพเชฐเชตเชพเชจเชพ เชœเซ‹เช–เชฎเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ‡ เช›เซ‡.

เช…เชฆเชฒเชพเชฌเชฆเชฒเซ€ เชตเชฟเชจเชพ เชธเชฟเชธเซเชŸเชฎเซ‹ เชชเชฐ, 2 เชจเซ€ เชฌเชฐเชพเชฌเชฐ vm.overcommit_memory เชธเชพเชฅเซ‡ เชธเชฎเชธเซเชฏเชพ เช†เชตเซ€ เชถเช•เซ‡ เช›เซ‡.

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 เชจเซ€ เชจเซ€เชšเซ‡เชจเซเช‚ เชฎเซ‚เชฒเซเชฏ เชฌเชฟเชจเช…เชธเชฐเช•เชพเชฐเช• เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เช•เชฐเซเชจเชฒ เชคเซ‡เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเชคเชพ เชจเชฅเซ€. เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ Linux เชธเชฟเชธเซเชŸเชฎเซ‹ เชชเชฐ 10 เช เชกเชฟเชซเซ‹เชฒเซเชŸ เช›เซ‡. เชคเชฎเซ‡ เชจเชพเชจเชพ เชชเชฐเชฟเชฌเชณ เชฆเซเชตเชพเชฐเชพ เชฒเซ‡เช–เชจ-เชธเช˜เชจ เช•เชพเชฎเช—เซ€เชฐเซ€ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชจ เชธเซเชงเชพเชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช เชฅเชถเซ‡ เช•เซ‡ Linux เชชเซƒเชทเซเช เชญเซ‚เชฎเชฟเชฎเชพเช‚ เช—เช‚เชฆเชพ เชชเซƒเชทเซเช เซ‹เชจเซ‡ เชซเซเชฒเชถ เช•เชฐเชถเซ‡.

เชคเชฎเชพเชฐเซ‡ เชฎเซ‚เชฒเซเชฏ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ 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 เชฒเซ‹เชกเชจเชพ เช†เชงเชพเชฐเซ‡ เช† เชฌเซ‡ เช—เซเชฃเซ‹เชคเซเชคเชฐ เชตเชšเซเชšเซ‡เชจเชพ เชคเชซเชพเชตเชคเชจเซ‡ เชธเชฎเชพเชฏเซ‹เชœเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชชเชฐเชฟเชฃเชพเชฎ

เชคเชฎเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซ‡ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชจเซเชฏ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเช‚เชคเซ เชธเซเชงเชพเชฐเชพเช“ เชจเซเชฏเซ‚เชจเชคเชฎ เชนเชถเซ‡ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชตเชงเซ เชฒเชพเชญ เชฆเซ‡เช–เชพเชถเซ‡ เชจเชนเซ€เช‚. เช†เชชเชฃเซ‡ เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เชœเซ‹เชˆเช เช•เซ‡ เชคเชฎเชพเชฎ เชตเชฟเช•เชฒเซเชชเซ‹ เชคเชฎเชพเชฎ เชชเซเชฐเช•เชพเชฐเชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹เชจเซ‡ เชฒเชพเช—เซ เชชเชกเชคเชพ เชจเชฅเซ€. เชœเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเซ‡ เชธเชฎเชพเชฏเซ‹เชœเชฟเชค เช•เชฐเซ€เช เช›เซ€เช เชคเซเชฏเชพเชฐเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ เชตเชงเซ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชจเชฅเซ€. เชคเชฎเชพเชฐเซ‡ เชคเชฎเชพเชฐเชพ เช…เชชเซ‡เช•เซเชทเชฟเชค เชตเชฐเซเช•เชฒเซ‹เชก เช…เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเซเชฐเช•เชพเชฐ เชฎเชพเชŸเซ‡ เช† เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชตเชšเซเชšเซ‡ เชฏเซ‹เช—เซเชฏ เชธเช‚เชคเซเชฒเชจ เชฎเซ‡เชณเชตเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡, เช…เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เชŸเซเชฏเซเชจเชฟเช‚เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ OS เชตเชฐเซเชคเชจเชจเซ‡ เชชเชฃ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡. เช•เชฐเซเชจเชฒ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเชตเซเช‚ เช เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเชตเชพ เชœเซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เชจเชฅเซ€; เชญเชฒเชพเชฎเชฃเซ‹ เช•เชฐเชตเซ€ เชคเซ‡ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹