ΠΠΏΡΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΠΈΠ·Π²Π΅Π΄Π±Π° Π½Π° PostgreSQL Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΎΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ Π½Π° ΠΠ‘ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ°Π°Ρ ΡΠΎ ΡΠ»Π°Π±ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ°ΡΠΎΠ°, ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ² Π΅ ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π°Ρ ΡΠΏΠΎΡΠ΅Π΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ ΠΎΠ±Π΅ΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ°. ΠΠΎ ΠΎΠ²ΠΎΡ ΠΏΠΎΡΡ, ΡΠ΅ ΡΠ°Π·Π³ΠΎΠ²Π°ΡΠ°ΠΌΠ΅ Π·Π° Π½Π΅ΠΊΠΎΠΈ Π²Π°ΠΆΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ Π½Π° ΠΠΈΠ½ΡΠΊΡ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π²Π»ΠΈΡΠ°Π°Ρ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π°Ρ.
SHMMAX / SHMALL
SHMMAX Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π°ΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° Π΅Π΄Π΅Π½ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ Π΄ΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° Linux. ΠΡΠ΅Π΄ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° 9.2, PostgreSQL ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ System V (SysV), Π·Π° ΡΡΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π° ΠΏΠΎΡΡΠ°Π²ΠΊΠ° SHMMAX. ΠΠΎ 9.2, PostgreSQL ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»ΠΈ Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π½Π° POSIX. Π’Π°ΠΊΠ°, ΡΠ΅Π³Π° ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΠΏΠΎΠΌΠ°Π»ΠΊΡ Π±Π°ΡΡΠΈ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π½Π° System V.
ΠΡΠ΅Π΄ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° 9.3, SHMMAX Π±Π΅ΡΠ΅ Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π° ΡΠ°Π΄ΡΠΎΡΠΎ. ΠΡΠ΅Π΄Π½ΠΎΡΡΠ° SHMMAX Π΅ Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ Π±Π°ΡΡΠΈ.
Π‘Π»ΠΈΡΠ½ΠΎ Π½Π° ΡΠΎΠ° SHMALL Π΅ ΡΡΡΠ΅ Π΅Π΄Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π° ΡΠ°Π΄ΡΠΎΡΠΎ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅
Π²ΠΎΠ»ΡΠΌΠ΅Π½ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ Π·Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π½ΠΈΠ· ΡΠ΅Π»ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠ° Π΄Π° Π³ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ SHMMAX, SHMALL ΠΈΠ»ΠΈ SHMMIN, ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ipcs.
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 ΠΊΠΎΡΠΈΡΡΠΈ Π‘ΠΈΡΡΠ΅ΠΌ 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:
- 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. Π‘ΡΠΏΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΠΈΠΈ Π½Π° Windows - ΠΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ. Π‘ΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π΅ Π΄Π΅Π» ΠΎΠ΄ RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π΄ΠΎΠ΄Π΅Π»Π΅Π½Π° Π½Π° ΠΏΡΠΎΡΠ΅Ρ. ΠΡΠΎΡΠ΅ΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ Π±Π°ΡΠ°ΡΠ°ΡΠ° Π·Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°. ΠΠΎΠ»ΠΊΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π±Π°ΡΠ° Π΅Π΄Π΅Π½ ΠΏΡΠΎΡΠ΅Ρ, ΡΠΎΠ»ΠΊΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠ΅ Π΄ΠΎΠ΄Π΅Π»ΡΠ²Π°Π°Ρ. ΠΠ‘ ΠΎΠ΄ΡΠΆΡΠ²Π° ΡΠ°Π±Π΅Π»Π° Π·Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π±Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅. ΠΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΠΌΠ°Π»Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°, ΡΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠ° ΡΠ°Π±Π΅Π»Π°ΡΠ°, ΡΠΎΠ»ΠΊΡ ΠΏΠΎΠ΄ΠΎΠ»Π³ΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ ΡΡΡΠ°Π½ΠΈΡΠ° Π²ΠΎ ΡΠ°Π° ΡΠ°Π±Π΅Π»Π° ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠΈ. ΠΠ°ΡΠΎΠ°, Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°Π°Ρ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ»ΠΈΡΠΈΠ½ΠΈ Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΡΠΎ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΈ ΡΡΠΎΡΠΎΡΠΈ; ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΏΡΠ΅Π³Π»Π΅Π΄ΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ, ΠΏΠΎΠΌΠ°Π»ΠΊΡ Π³ΡΠ΅ΡΠΊΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°, ΠΏΠΎΠ±ΡΠ·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° ΡΠΈΡΠ°ΡΠ΅/Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΡΠ΅ΠΊΡ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ Π±Π°ΡΠ΅ΡΠΈ. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΎΡ Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ.
PostgreSQL ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΠ°ΠΌΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π½Π° Linux. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, Linux ΠΊΠΎΡΠΈΡΡΠΈ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΎΠ΄ 4 KB, ΡΠ°ΠΊΠ° ΡΡΠΎ Π²ΠΎ ΡΠ»ΡΡΠ°ΠΈ ΠΊΠΎΠ³Π° ΠΈΠΌΠ° ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π°Ρ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ. ΠΠΎΠ±ΠΈΠ²ΠΊΠΈΡΠ΅ Π²ΠΎ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΡΠ²Π°Π°Ρ ΠΊΠΎΠ³Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΎΠ΄ 2 MB ΠΈ Π΄ΠΎ 1 GB. ΠΠΎΠ»Π΅ΠΌΠ°ΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈ ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΈΠ³Π°ΡΠ΅. ΠΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΈ Π½ΠΈΠ²Π½Π°ΡΠ° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° Π²Π°ΡΠ°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° ΠΠΈΠ½ΡΠΊΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΌΠ°ΡΠΊΠ° /proc/meminfo | Π³ΡΠ΅ΠΏ -ΠΈ ΠΎΠ³ΡΠΎΠΌΠ΅Π½.
ΠΠΎΠ±ΠΈΠ²Π°ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ (ΡΠ°ΠΌΠΎ Π·Π° ΠΠΈΠ½ΡΠΊΡ)
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. ΠΠ²Π° Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠ΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΈ.
Π‘ΠΊΡΠΈΠΏΡΠ° Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π±ΡΠΎΡΠΎΡ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ
ΠΠ²Π°Π° Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΡΠΊΡΠΈΠΏΡΠ° Π³ΠΎ Π²ΡΠ°ΡΠ° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΠΎΡ Π±ΡΠΎΡ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ. ΠΠ·Π²ΡΡΠ΅ΡΠ΅ ΡΠ° ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° Π½Π° Π²Π°ΡΠΈΠΎΡ Linux ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠΈ 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).
ΠΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ (ΡΠ°ΠΌΠΎ Linux)
$ 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
Π‘Π΅Π³Π° ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ large_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.Π·Π°ΠΌΠ΅Π½Π°
vm.Π·Π°ΠΌΠ΅Π½Π° Π΅ ΡΡΡΠ΅ Π΅Π΄Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π° ΡΠ°Π΄ΡΠΎΡΠΎ ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π»ΠΈΡΠ°Π΅ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ²Π°Π° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π·Π°ΠΌΠ΅Π½Π° (Π·Π°ΠΌΠ΅Π½Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ Π²ΠΎ ΠΈ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°) Π½Π° Linux. ΠΡΠ΅Π΄Π½ΠΎΡΡΠ° ΡΠ΅ Π΄Π²ΠΈΠΆΠΈ ΠΎΠ΄ 0 Π΄ΠΎ 100. ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ²Π° ΠΊΠΎΠ»ΠΊΠ°Π²Π° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΡΠ΅ ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ° ΠΈΠ»ΠΈ ΠΈΡΡΡΠ»ΠΈ. ΠΡΠ»Π° Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° Π½Π΅ΠΌΠ° ΡΠ°Π·ΠΌΠ΅Π½Π°, Π° 100 Π·Π½Π°ΡΠΈ Π°Π³ΡΠ΅ΡΠΈΠ²Π½Π° ΡΠ°Π·ΠΌΠ΅Π½Π°.
ΠΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ Π΄ΠΎΠ±ΡΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ ΡΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ½ΠΈΡΠΊΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ.
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΎΠ²Π° Π½Π° 0 Π½Π° ΠΏΠΎΠ½ΠΎΠ²ΠΈΡΠ΅ ΠΊΠ΅ΡΠ½Π΅Π»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° OOM Killer (ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π½Π° ΠΠΈΠ½ΡΠΊΡ) Π΄Π° Π³ΠΎ ΡΠ±ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ. ΠΠ½Π°ΡΠΈ, Π±Π΅Π·Π±Π΅Π΄Π½ΠΎ Π΅ Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π½Π° 1 Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ΡΠΎ. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π²ΠΎ Linux Π΅ 60. ΠΠΎΠ²ΠΈΡΠΎΠΊΠ°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΡΠ²Π° MMU (Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°) Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎΡ Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π° ΠΎΠ΄ RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, Π΄ΠΎΠ΄Π΅ΠΊΠ° ΠΏΠΎΠ½ΠΈΡΠΊΠ°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π·Π°Π΄ΡΠΆΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ/ΠΊΠΎΠ΄ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°.
ΠΠΎΠ½ΠΈΡΠΊΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π΅ Π΄ΠΎΠ±Π°Ρ Π·Π°Π»ΠΎΠ³ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ Π²ΠΎ PostgreSQL.
vm.overcommit_memory / vm.overcommit_ratio
ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈ ΡΠ° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π°Π°Ρ ΠΊΠΎΠ³Π° Π²Π΅ΡΠ΅ Π½Π΅ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π°. ΠΠΎ, Π²ΠΎ Π½Π΅ΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π΄ΠΎΠ±ΠΈΠ²Π° ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈ Π½Π΅ ΡΠ° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π°. ΠΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΡΠ±ΠΈΠ΅Ρ Π½Π° OOM. ΠΠ²Π΅ Π³ΠΈ ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ vm.overcommit_memory ΡΠΎ ΠΎΠΏΠΈΡ Π·Π° ΡΠ΅ΠΊΠΎΠ΅:
- Π₯Π΅ΡΡΠΈΡΡΠΈΡΠΊΠΎ Π½Π°Π΄ΠΌΠΈΠ½ΡΠ²Π°ΡΠ΅ (ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ); Ρ Π΅ΡΡΠΈΡΡΠΈΠΊΠ° Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΡΠ°Π΄ΡΠΎ
- ΠΠ°ΠΊΠΎ ΠΈ Π΄Π° Π΅, Π΄ΠΎΠ·Π²ΠΎΠ»Π΅ΡΠ΅ Π³ΠΎ ΠΏΡΠ΅ΠΊΡΠΌΠ΅ΡΠ½ΠΎΡΠΎ ΠΎΠ±Π²ΡΠ·ΡΠ²Π°ΡΠ΅
- ΠΠ΅ ΠΏΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΡΠ΅, Π½Π΅ Π³ΠΎ Π½Π°Π΄ΠΌΠΈΠ½ΡΠ²Π°ΡΡΠ΅ ΡΠΎΠΎΠ΄Π½ΠΎΡΠΎΡ Π½Π° overcommit.
Π‘ΡΡΠ»ΠΊΠ°:
vm.overcommit_ratio β ΠΏΡΠΎΡΠ΅Π½Ρ ΠΎΠ΄ RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π΄ΠΎΡΡΠ°ΠΏΠ½Π° Π·Π° ΠΏΡΠ΅ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅. ΠΡΠ΅Π΄Π½ΠΎΡΡΠ° ΠΎΠ΄ 50% Π½Π° ΡΠΈΡΡΠ΅ΠΌ ΡΠΎ 2 GB RAM ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ΄Π²ΠΎΠΈ Π΄ΠΎ 3 GB RAM.
ΠΡΠ΅Π΄Π½ΠΎΡΡΠ° ΠΎΠ΄ 2 Π·Π° vm.overcommit_memory ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ Π·Π° PostgreSQL. ΠΠ²Π°Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΡΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΠ° ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π±Π΅Π· Π·Π½Π°ΡΠ°Π΅Π½ ΡΠΈΠ·ΠΈΠΊ Π΄Π° Π±ΠΈΠ΄Π΅ ΡΠ±ΠΈΠ΅Π½ ΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΠΎΡ OOM ΡΠ±ΠΈΠ΅Ρ. ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π²ΡΠΈΡΠ°, Π½ΠΎ ΡΠ°ΠΌΠΎ Π²ΠΎ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅ΡΠ΅ΠΊΠΎΡΡΠ²Π°ΡΠ΅, ΡΡΠΎ Π³ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΡΠΈΠ·ΠΈΠΊΠΎΡ ΡΠ±ΠΈΠ΅ΡΠΎΡ Π½Π° OOM Π΄Π° Π³ΠΎ ΡΠ±ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ. ΠΠ°ΡΠΎΠ°, Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° 2 Π΄Π°Π²Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ ΠΎΠ΄ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΎΠ΄ 0. Π‘Π΅ΠΏΠ°ΠΊ, Π΄ΠΎΠ²Π΅ΡΠ»ΠΈΠ²ΠΎΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ Π°ΠΊΠΎ ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠ° Π΄Π΅ΠΊΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π΅ Π΅ ΠΏΡΠ΅ΠΎΠΏΡΠΎΠ²Π°ΡΠ΅Π½Π°. ΠΠ²Π° Π³ΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ° ΡΠΈΠ·ΠΈΠΊΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π΄Π° Π±ΠΈΠ΄Π΅ ΡΠ±ΠΈΠ΅Π½ ΠΎΠ΄ ΡΠ±ΠΈΠ΅Ρ Π½Π° OOM.
ΠΠ° ΡΠΈΡΡΠ΅ΠΌΠΈ Π±Π΅Π· Π·Π°ΠΌΠ΅Π½Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΎ vm.overcommit_memory Π΅Π΄Π½Π°ΠΊΠΎΠ² Π½Π° 2.
vm.dirty_background_ratio / vm.dirty_background_bytes
vm.dirty_background_ratio Π΅ ΠΏΡΠΎΡΠ΅Π½ΡΠΎΡ Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈΡΠΏΠΎΠ»Π½Π΅ΡΠ° ΡΠΎ Π²Π°Π»ΠΊΠ°Π½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ Π½Π° Π΄ΠΈΡΠΊΠΎΡ. ΠΡΠΏΠ»Π°ΠΊΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠΎΡ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π²ΠΎ Π·Π°Π΄Π½ΠΈΠ½Π°. ΠΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ ΡΠ΅ Π΄Π²ΠΈΠΆΠΈ ΠΎΠ΄ 0 Π΄ΠΎ 100; ΡΠ΅ΠΏΠ°ΠΊ, Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° ΠΏΠΎΠ΄ 5 ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π½Π΅Π΅ΡΠΈΠΊΠ°ΡΠ½Π° ΠΈ Π½Π΅ΠΊΠΎΠΈ ΠΊΠ΅ΡΠ½Π΅Π»ΠΈ Π½Π΅ ΡΠ° ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°Π°Ρ. 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. ΠΠ²Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π΄Π΅ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π²ΠΎ Π·Π°Π΄Π½ΠΈΠ½Π° Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π°Π°Ρ ΠΏΠΎΡΠ°Π½ΠΎ Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ ΠΎΠ²ΠΈΠ΅ Π΄Π²Π° ΡΠΎΠΎΠ΄Π½ΠΎΡΠΈ Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π/Π Π½Π° Π΄ΠΈΡΠΊΠΎΡ.
ΠΠΊΡΠΏΠ½ΠΎ
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π·Π° Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΡΠ΅ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅, Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ°ΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΈ Π½Π΅ΠΌΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΊΠΎΡΠΈΡΡ. ΠΠΎΡΠ°ΠΌΠ΅ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° Π½Π΅ ΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π²Π°ΠΆΠ°Ρ Π·Π° ΡΠΈΡΠ΅ Π²ΠΈΠ΄ΠΎΠ²ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠ΅ΠΊΠΎΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ ΠΊΠΎΠ³Π° ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±ΡΠ²Π°ΠΌΠ΅ Π½Π΅ΠΊΠΎΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ, Π° Π½Π΅ΠΊΠΎΠΈ Π½Π΅. ΠΠΎΡΠ° Π΄Π° ΡΠ° ΠΏΡΠΎΠ½Π°ΡΠ΄Π΅ΡΠ΅ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠ°ΡΠ° ΡΠ°ΠΌΠ½ΠΎΡΠ΅ΠΆΠ° ΠΏΠΎΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π·Π° ΠΎΡΠ΅ΠΊΡΠ²Π°Π½ΠΈΠΎΡ ΠΎΠ±Π΅ΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΠΈ ΡΠΈΠΏΠΎΡ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΌΠΎΡΠ° Π΄Π° Π³ΠΎ Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΠ‘ ΠΏΡΠΈ ΠΏΠΎΠ΄Π΅ΡΡΠ²Π°ΡΠ΅. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π΄ΡΠΎΡΠΎ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΡ Π»Π΅ΡΠ½ΠΎ ΠΊΠ°ΠΊΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ; ΠΏΠΎΡΠ΅ΡΠΊΠΎ Π΅ Π΄Π° ΡΠ΅ Π΄Π°Π²Π°Π°Ρ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΠΊΠΈ.
ΠΠ·Π²ΠΎΡ: www.habr.com