Настройка Π½Π° ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ Π½Π° ядрото Π½Π° Linux Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° PostgreSQL

Настройка Π½Π° ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ Π½Π° ядрото Π½Π° Linux Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° PostgreSQL ΠžΠΏΡ‚ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° производитСлност Π½Π° 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 с описаниС Π·Π° всСки:

  1. ЕвристичСн ΠΏΡ€Π΅ΠΊΠΎΠΌΠ΅Ρ€Π΅Π½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅); Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° ядрото Свристика
  2. ВсС ΠΏΠ°ΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΊΠΎΠΌΠ΅Ρ€Π½ΠΎ Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π΅
  3. НС прСкалявайтС, Π½Π΅ ΠΏΡ€Π΅Π²ΠΈΡˆΠ°Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚Π° Π½Π° ΠΏΡ€Π΅ΠΊΠΎΠΌΠ΅Ρ€Π½ΠΎ Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π΅.

Π·Π° Π²Ρ€ΡŠΠ·ΠΊΠ°: 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 killer процСса. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅Π·Π°Ρ€Π΅ΠΆΠ΄Π°, Π½ΠΎ само Π² Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€Π΅Π²ΠΈΡˆΠ°Π²Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ намалява риска OOM killer Π΄Π° ΡƒΠ±ΠΈΠ΅ процСса. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ стойност 2 Π΄Π°Π²Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π° производитСлност ΠΎΡ‚ стойността ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ 0. НадСТдността ΠΎΠ±Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ, ΠΊΠ°Ρ‚ΠΎ сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° извън ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π΅ Π΅ ΠΏΡ€Π΅Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½Π°. Π’ΠΎΠ²Π° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° риска ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π΄Π° бъдС ΡƒΠ±ΠΈΡ‚ ΠΎΡ‚ OOM killer.

ΠŸΡ€ΠΈ систСми Π±Π΅Π· суапинг ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с 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 систСми. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ производитСлността Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ писанС с ΠΏΠΎ-малък ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€