ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ Π·Π° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Π½Π° Linux Π·Π° Π΄Π° сС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° PostgreSQL

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ Π·Π° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Π½Π° Linux Π·Π° Π΄Π° сС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° PostgreSQL ΠžΠΏΡ‚ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° ΠΈΠ·Π²Π΅Π΄Π±Π° Π½Π° 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 со опис Π·Π° сСкоС:

  1. Π₯Суристичко Π½Π°Π΄ΠΌΠΈΠ½ΡƒΠ²Π°ΡšΠ΅ (стандардно); хСуристика Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° Ρ˜Π°Π΄Ρ€ΠΎ
  2. Како ΠΈ Π΄Π° Π΅, Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅ Π³ΠΎ ΠΏΡ€Π΅ΠΊΡƒΠΌΠ΅Ρ€Π½ΠΎΡ‚ΠΎ ΠΎΠ±Π²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅
  3. НС ΠΏΡ€Π΅Ρ‚Π΅Ρ€ΡƒΠ²Π°Ρ˜Ρ‚Π΅, Π½Π΅ Π³ΠΎ Π½Π°Π΄ΠΌΠΈΠ½ΡƒΠ²Π°Ρ˜Ρ‚Π΅ соодносот Π½Π° overcommit.

Бсылка: https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

vm.overcommit_ratio β€” ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΎΠ΄ RAM ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° достапна Π·Π° ΠΏΡ€Π΅ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅. ВрСдноста ΠΎΠ΄ 50% Π½Π° систСм со 2 GB RAM ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ΄Π²ΠΎΠΈ Π΄ΠΎ 3 GB RAM.

ВрСдноста ΠΎΠ΄ 2 Π·Π° vm.overcommit_memory ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ пСрформанси Π·Π° PostgreSQL. Оваа врСдност ја максимизира ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° RAM ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π½Π° процСсот Π½Π° сСрвСрот Π±Π΅Π· Π·Π½Π°Ρ‡Π°Π΅Π½ Ρ€ΠΈΠ·ΠΈΠΊ Π΄Π° Π±ΠΈΠ΄Π΅ ΡƒΠ±ΠΈΠ΅Π½ ΠΎΠ΄ процСсот OOM ΡƒΠ±ΠΈΠ΅Ρ†. ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ќС ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΄Π° сС Π²Ρ‡ΠΈΡ‚Π°, Π½ΠΎ само Π²ΠΎ Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€Π΅Ρ‡Π΅ΠΊΠΎΡ€ΡƒΠ²Π°ΡšΠ΅, ΡˆΡ‚ΠΎ Π³ΠΎ Π½Π°ΠΌΠ°Π»ΡƒΠ²Π° Ρ€ΠΈΠ·ΠΈΠΊΠΎΡ‚ ΡƒΠ±ΠΈΠ΅Ρ†ΠΎΡ‚ Π½Π° 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 Π΅ стандардно Π½Π° ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ систСми Π½Π° Линукс. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ пСрформанситС Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ со ΠΏΠΎΠΌΠ°Π» Ρ„Π°ΠΊΡ‚ΠΎΡ€, ΡˆΡ‚ΠΎ ќС Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€