ΠΠΏΡΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° PostgreSQL Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠΎΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΠΠ‘ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π°Ρ Π΄ΠΎ Π»ΠΎΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° ΡΡΡΠ²ΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π΅ Π½Π°Π»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅Π·ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ ΡΠΏΠΎΡΠ΅Π΄ ΡΡΡΠ²ΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅. Π ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π½ΡΠΊΠΎΠΈ Π²Π°ΠΆΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅.
SHMMAX / SHMALL
SHMMAX Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° Π΅Π΄ΠΈΠ½ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΎΡ ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΊΠΎΠΉΡΠΎ Linux ΠΏΡΠΎΡΠ΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈ. ΠΡΠ΅Π΄ΠΈ Π²Π΅ΡΡΠΈΡ 9.2 PostgreSQL ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° System V (SysV), ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° SHMMAX. Π‘Π»Π΅Π΄ 9.2 PostgreSQL ΠΏΡΠ΅ΠΌΠΈΠ½Π° ΠΊΡΠΌ POSIX ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ. Π’Π°ΠΊΠ° ΡΠ΅ ΡΠ΅Π³Π° ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π±Π°ΠΉΡΠΎΠ²Π΅ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π½Π° System V.
ΠΡΠ΅Π΄ΠΈ Π²Π΅ΡΡΠΈΡ 9.3 SHMMAX Π±Π΅ΡΠ΅ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ. Π‘ΡΠΎΠΉΠ½ΠΎΡΡΡΠ° SHMMAX Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½Π° Π² Π±Π°ΠΉΡΠΎΠ²Π΅.
ΠΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½, ΠΠΠΠΠ Π΅ Π΄ΡΡΠ³ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅
ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΎΠ±Π΅ΠΌ ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΡΡ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ. ΠΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° 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. ΠΠΎΠ»Π΅ΠΌΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅. ΠΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΈ ΡΡΡ Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π²Π°ΡΠ°ΡΠ° Linux ΠΌΠ°ΡΠΈΠ½Π°, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΊΠΎΡΠΊΠ° /proc/meminfo | grep -i ΠΎΠ³ΡΠΎΠΌΠ΅Π½.
ΠΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ (ΡΠ°ΠΌΠΎ Π·Π° Linux)
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
Π‘Π΅Π³Π° Π·Π°Π΄Π°ΠΉΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° huge_pages Π½Π° "on" Π² $PGDATA/postgresql.conf ΠΈ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΡΡΡΠ²ΡΡΠ°.
ΠΡΠ΅ Π²Π΅Π΄Π½ΡΠΆ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ (ΡΠ°ΠΌΠΎ Π·Π° Linux)
$ 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
ΠΠ΅ΠΊΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π΄Π°Π»ΠΈ ΡΠ΅Π³Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈ.
ΠΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ (ΡΠ°ΠΌΠΎ Π·Π° Linux)
$ 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 Π΅ Π΄ΡΡΠ³ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ²Π»ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. Π’Π°Π·ΠΈ ΠΎΠΏΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° swappiness (ΡΠ°Π·ΠΌΡΠ½Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ Π² ΠΈ ΠΈΠ·Π²ΡΠ½ ΠΏΠ°ΠΌΠ΅ΡΡΠ°) Π² Linux. Π‘ΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π²Π°ΡΠΈΡΠ° ΠΎΡ 0 Π΄ΠΎ 100. Π’Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠ°ΠΌΠ΅Ρ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΡΠ°Π½ΠΈΡΠ°Π½Π° ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΈΡΠ°Π½Π°. ΠΡΠ»Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π»ΠΈΠΏΡΠ° Π½Π° ΠΎΠ±ΠΌΠ΅Π½, Π° 100 ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π°Π³ΡΠ΅ΡΠΈΠ²Π΅Π½ ΠΎΠ±ΠΌΠ΅Π½.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄ΠΎΠ±ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΠΎ-Π½ΠΈΡΠΊΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ.
ΠΠ°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ²Π° Π½Π° 0 Π½Π° ΠΏΠΎ-Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΄ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΊΠ°ΡΠ° OOM Killer (ΠΏΡΠΎΡΠ΅ΡΡΡ Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° Linux) Π΄Π° ΡΠ±ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ°. Π’Π°ΠΊΠ° ΡΠ΅ Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π΄Π° Π³ΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π½Π° 1, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΠ²Π΅Π΄Π΅ΡΠ΅ Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ°Π·ΠΌΡΠ½Π°ΡΠ°. Π‘ΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π² Linux Π΅ 60. ΠΠΎ-Π²ΠΈΡΠΎΠΊΠ°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΊΠ°ΡΠ° MMU (Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°) Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π° ΡΡΠ°ΠΏ ΠΎΡ RAM, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΏΠΎ-Π½ΠΈΡΠΊΠ°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π·Π°ΠΏΠ°Π·Π²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ/ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°.
ΠΠΎ-Π½ΠΈΡΠΊΠ°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π΅ Π΄ΠΎΠ±ΡΡ Π·Π°Π»ΠΎΠ³ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π² PostgreSQL.
vm.overcommit_memory / vm.overcommit_ratio
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Ρ ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Ρ, ΠΊΠΎΠ³Π°ΡΠΎ Π²Π΅ΡΠ΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°. ΠΠΎ Π² Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΠ²ΡΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π½Π΅ Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΡΠΈΠ½ΠΈ OOM ΡΠ±ΠΈΠ΅Ρ. ΠΡΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ vm.overcommit_memory Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π° Π²ΡΠ΅ΠΊΠΈ:
- ΠΠ²ΡΠΈΡΡΠΈΡΠ΅Π½ ΠΏΡΠ΅ΠΊΠΎΠΌΠ΅ΡΠ΅Π½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅); Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π΅Π²ΡΠΈΡΡΠΈΠΊΠ°
- ΠΡΠ΅ ΠΏΠ°ΠΊ ΡΠ°Π·ΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΡΠ΅ΠΊΠΎΠΌΠ΅ΡΠ½ΠΎ Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅
- ΠΠ΅ ΠΏΡΠ΅ΠΊΠ°Π»ΡΠ²Π°ΠΉΡΠ΅, Π½Π΅ ΠΏΡΠ΅Π²ΠΈΡΠ°Π²Π°ΠΉΡΠ΅ ΠΊΠΎΠ΅ΡΠΈΡΠΈΠ΅Π½ΡΠ° Π½Π° ΠΏΡΠ΅ΠΊΠΎΠΌΠ΅ΡΠ½ΠΎ Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅.
Π·Π° Π²ΡΡΠ·ΠΊΠ°:
vm.overcommit_ratio β ΠΏΡΠΎΡΠ΅Π½Ρ Π½Π° RAM, Π½Π°Π»ΠΈΡΠ΅Π½ Π·Π° ΠΏΡΠ΅ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅. Π‘ΡΠΎΠΉΠ½ΠΎΡΡ ΠΎΡ 50% Π·Π° ΡΠΈΡΡΠ΅ΠΌΠ° Ρ 2 GB RAM ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈ Π΄ΠΎ 3 GB RAM.
Π‘ΡΠΎΠΉΠ½ΠΎΡΡ 2 Π·Π° vm.overcommit_memory ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π·Π° PostgreSQL. Π’Π°Π·ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° RAM Π½Π° ΡΡΡΠ²ΡΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π±Π΅Π· Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ ΡΠΈΡΠΊ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ±ΠΈΡ ΠΎΡ OOM killer ΠΏΡΠΎΡΠ΅ΡΠ°. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π·Π°ΡΠ΅ΠΆΠ΄Π°, Π½ΠΎ ΡΠ°ΠΌΠΎ Π² Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅Π²ΠΈΡΠ°Π²Π°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΡΠΈΡΠΊΠ° OOM killer Π΄Π° ΡΠ±ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡ 2 Π΄Π°Π²Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ 0. ΠΠ°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡΡΠ° ΠΎΠ±Π°ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ, ΠΊΠ°ΡΠΎ ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈΠ·Π²ΡΠ½ ΠΎΠ±Ρ Π²Π°ΡΠ° Π½Π΅ Π΅ ΠΏΡΠ΅ΡΠΎΠ²Π°ΡΠ΅Π½Π°. Π’ΠΎΠ²Π° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ° ΡΠΈΡΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΡ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ±ΠΈΡ ΠΎΡ OOM killer.
ΠΡΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π±Π΅Π· ΡΡΠ°ΠΏΠΈΠ½Π³ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ vm.overcommit_memory ΡΠ°Π²Π½ΠΎ Π½Π° 2.
vm.dirty_background_ratio / vm.dirty_background_bytes
vm.dirty_background_ratio Π΅ ΠΏΡΠΎΡΠ΅Π½ΡΡΡ ΠΏΠ°ΠΌΠ΅Ρ, Π·Π°ΠΏΡΠ»Π½Π΅Π½Π° Ρ ΠΌΡΡΡΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Π΄ΠΈΡΠΊΠ°. ΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π²ΡΠ² ΡΠΎΠ½ΠΎΠ² ΡΠ΅ΠΆΠΈΠΌ. Π‘ΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²Π°ΡΠΈΡΠ° ΠΎΡ 0 Π΄ΠΎ 100; Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΏΠΎΠ΄ 5 ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Π½Π΅Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π° ΠΈ Π½ΡΠΊΠΎΠΈ ΡΠ΄ΡΠ° Π½Π΅ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ. 10 Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π² ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Linux ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎ ΠΏΠΈΡΠ°Π½Π΅ Ρ ΠΏΠΎ-ΠΌΠ°Π»ΡΠΊ ΠΊΠΎΠ΅ΡΠΈΡΠΈΠ΅Π½Ρ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ 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 Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ°.
ΠΠ±ΡΠΎ
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, Π·Π° Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΈ Π½ΡΠΌΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π³ΠΎΠ»ΡΠΌΠ° ΠΏΠΎΠ»Π·Π°. Π’ΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ΅ Π½Π΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΠΏΡΠΈΠΈ ΡΠ΅ ΠΎΡΠ½Π°ΡΡΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΊΠΎΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡΡ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, Π° Π΄ΡΡΠ³ΠΈ Π½Π΅. Π’ΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠΎΡΠ½ΠΈΡ Π±Π°Π»Π°Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° Π²Π°ΡΠ΅ΡΠΎ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ ΠΈ ΡΠΈΠΏ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠ²Π°ΡΠ΅. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π»Π΅ΡΠ½ΠΎ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ; ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π΄Π°Π²Π°Ρ ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com