เบเบฒเบเบเบฐเบเบดเบเบฑเบ PostgreSQL เบเบตเปเบเบตเบเบตเปเบชเบธเบเปเบกเปเบเบเบถเปเบเบเบฑเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบญเบเบฅเบฐเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบตเปเบเปเบฒเบเบปเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ. เบเบฒเบเบเบฑเปเบเบเปเบฒ OS kernel เบเบตเปเบเปเปเบเบตเบชเบฒเบกเบฒเบเบชเบปเปเบเบเบปเบเปเบซเปเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเบเปเปเบเบต. เบเบฑเปเบเบเบฑเปเบ, เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบเปเบฒเปเบเบฑเบเบเบตเปเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบซเบผเบปเปเบฒเบเบตเปเบเบทเบเบเบฑเปเบเบเปเบฒเบญเบตเบเบเบฒเบกเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบเบเบฒเบเบเปเปเบกเบนเบเปเบฅเบฐเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบกเบฑเบ. เปเบเบเบปเบเบเบฝเบเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบถเบเบชเบฒเบซเบฒเบฅเบทเบเปเบฝเบงเบเบฑเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบ Linux kernel เบเบตเปเบชเปเบฒเบเบฑเบเบเบฒเบเบขเปเบฒเบเบเบตเปเบชเบฒเบกเบฒเบเบชเบปเปเบเบเบปเบเบเบฐเบเบปเบเบเปเปเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบเบเบฒเบเบเปเปเบกเบนเบเปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบเปเบฒเบเบปเบเบเบงเบเบกเบฑเบ.
SHMMAX / SHMALL
SHMMAX เปเบกเปเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบ kernel เบเบตเปเปเบเปเปเบเบทเปเบญเบเปเบฒเบเบปเบเบเบฐเบซเบเบฒเบเบชเบนเบเบชเบธเบเบเบญเบเบชเปเบงเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเปเบเปเบฎเปเบงเบกเบเบฑเบเบเบฝเบงเบเบตเปเบเบฐเบเบงเบเบเบฒเบ Linux เบชเบฒเบกเบฒเบเบเบฑเบเบชเบฑเบ. เบเปเบญเบเปเบงเบตเบเบฑเบ 9.2, PostgreSQL เปเบเป System V (SysV), เปเบเบดเปเบเบเปเบญเบเบเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒ SHMMAX. เบซเบผเบฑเบเบเบฒเบ 9.2, PostgreSQL เปเบเปเบเปเบฝเบเปเบเปเบเปเบเบงเบฒเบกเบเบปเบเบเปเบฒเบเบตเปเปเบเปเบฎเปเบงเบกเบเบฑเบ POSIX. เบชเบฐเบเบฑเปเบเบเบญเบเบเบตเปเบเปเบญเบเบเบฒเบเบเบงเบฒเบกเบเบณเบเบตเปเปเบเปเบฎเปเบงเบกเบเบฑเบเบเบญเบเบฅเบฐเบเบปเบ V เปเปเบญเบเบฅเบปเบ.
เบเปเบญเบเปเบงเบตเบเบฑเบ 9.3, SHMMAX เปเบกเปเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบ kernel เบเบตเปเบชเปเบฒเบเบฑเบเบเบตเปเบชเบธเบ. เบเปเบฒ SHMMAX เบเบทเบเบฅเบฐเบเบธเปเบเบฑเบเปเบเบเป.
เปเบเบฑเปเบเบเบฝเบงเบเบฑเบ, SHMALL เปเบกเปเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบ kernel เบญเบทเปเบเบเบตเปเปเบเปเปเบเบทเปเบญเบเปเบฒเบเบปเบ
เบเบฐเบฅเบดเบกเบฒเบเบเบปเปเบงเบฅเบฐเบเบปเบเบเบญเบเปเปเบฒเบเบงเบฒเบกเบเบณเบเบตเปเปเบเปเบฎเปเบงเบกเบเบฑเบ. เปเบเบทเปเบญเปเบเบดเปเบเบเปเบฒ 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 เปเบเบทเปเบญเบเบฑเบเบชเบฑเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเบเบตเปเปเบเปเบฎเปเบงเบกเบเบฑเบ. เบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเปเบกเปเบเบซเบเบถเปเบเปเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบ kernel เบเบตเปเบชเปเบฒเบเบฑเบเบเบตเปเบชเบธเบ. เปเบกเบทเปเบญเปเบเบเปเปเบเบฒเบกเบเบตเปเบเปเบฒเบเปเบเปเบฎเบฑเบเบเปเปเบเบงเบฒเบกเบชเบฐเปเบเบเบเปเปเบเบดเบเบเบฒเบเบเปเปเปเบเบเบตเป, เบกเบฑเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเปเบฒเบเบกเบต 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/sysctlconf. เบฅเบฒเบเบฅเบฐเบญเบฝเบเบขเบนเปเบฅเบธเปเบกเบเบตเป.
เบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒ Kernel เปเบ 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
เบเบฒเบเบเปเบฝเบเปเบเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบ Kernel เปเบ 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. เปเปเบฒ Super, เปเบฅเบฐเปเบ Windows - เบซเบเปเบฒเปเบซเบเป. เบซเบเปเบฒเปเบกเปเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบ RAM เบเบตเปเบเบฑเบเบชเบฑเบเปเบซเปเบเบฑเบเบเบฐเบเบงเบเบเบฒเบ. เบเบฐเบเบงเบเบเบฒเบเบชเบฒเบกเบฒเบเบกเบตเบซเบผเบฒเบเบซเบเปเบฒเบเบถเปเบเบเบฑเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ. เบเบฐเบเบงเบเบเบฒเบเบเปเบญเบเบเบฒเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเบซเบผเบฒเบเปเบเบปเปเบฒเปเบ, เบกเบฑเบเบเบฐเบเบทเบเบเบฑเบเบชเบฑเบเบซเบผเบฒเบเปเปเบฒ. OS เบฎเบฑเบเบชเบฒเบเบฒเบเบฐเบฅเบฒเบเบเบฒเบเบเบฑเบเบชเบฑเบเบซเบเปเบฒเบชเปเบฒเบฅเบฑเบเบเบฐเบเบงเบเบเบฒเบ. เบเบฐเบซเบเบฒเบเบเบญเบเบซเบเปเบฒเบเปเบญเบเบฅเบปเบ, เบเบฒเบเบฐเบฅเบฒเบเปเบซเบเปเบเบงเปเบฒ, เบกเบฑเบเปเบเปเปเบงเบฅเบฒเบเบปเบเบเบงเปเบฒเปเบเบทเปเบญเบเบญเบเบซเบฒเบซเบเปเบฒเปเบเบเบฒเบเบฐเบฅเบฒเบเบซเบเปเบฒเบเบฑเปเบ. เบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบฑเปเบเบเบฑเปเบเบเบถเปเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบงเบเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบเบฐเบเบทเบเบเปเบฒเปเบเปเบเบฑเบเบเบฒเบเบซเบผเบธเบเบฅเบปเบ overhead; เบเบฒเบเปเบเบดเปเบเปเปเบฒเปเปเบญเบเบฅเบปเบ, เบเบงเบฒเบกเบเบดเบเบเบญเบเปเปเบฒเปเปเบญเบเบฅเบปเบ, เบเบฒเบเบเบณเปเบเบตเบเบเบฒเบเบญเปเบฒเบ/เบเบฝเบเปเบงเบเบงเปเบฒ buffers เบเบตเปเปเบซเบเปเบเบงเปเบฒ. เบเบปเบเปเบเปเบฎเบฑเบเปเบกเปเบเบเบฒเบเบเบฑเบเบเบธเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ.
PostgreSQL เบฎเบญเบเบฎเบฑเบเบเบฝเบเปเบเปเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเปเบ Linux. เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, Linux เปเบเปเบซเบเปเบฒเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ 4 KB, เบเบฑเปเบเบเบฑเปเบเปเบเบเปเบฅเบฐเบเบตเบเบตเปเบกเบตเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบซเบผเบฒเบเปเบเบตเบเปเบ, เบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฑเปเบเบซเบเปเบฒเปเบซเบเปเบเบงเปเบฒ. เบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบกเปเบเบชเบฑเบเปเบเบเปเบซเบฑเบเปเบกเบทเปเบญเปเบเปเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเป 2 MB เปเบฅเบฐเบชเบนเบเปเบเบดเบ 1 GB. เบเบฐเบซเบเบฒเบเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเบชเบฒเบกเบฒเบเบเบทเบเบเปเบฒเบเบปเบเปเบเปเบงเบฅเบฒเบเบนเบ. เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบงเบเปเบเบดเปเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเปเบฅเบฐเบเบฒเบเบเปเบฒเปเบเปเบเบญเบเบเบงเบเปเบเบปเบฒเปเบเปเบเบทเปเบญเบ Linux เบเบญเบเบเปเบฒเบเปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบเปเบเบเปเบเปเบเปเบฒเบชเบฑเปเบ cat /proc/meminfo | grep -i huge.
เปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเป (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. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบทเบเบเบดเบเบเบฒเบเปเบเปเบเบฒเบ.
Script เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเบเบปเบเบเปเบฒเบเบงเบเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเป
script เบเปเบฒเบเปเบเบตเปเบชเบปเปเบเบเบทเบเบเปเบฒเบเบงเบเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบตเปเบเปเบญเบเบเบฒเบ. เปเบฅเปเบเบชเบฐเบเบฃเบดเบเบขเบนเปเปเบเปเบเบตเบเปเบงเบต 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 เปเบเบฑเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบ kernel เบญเบทเปเบเบเบตเปเบชเบฒเบกเบฒเบเบชเบปเปเบเบเบปเบเบเบฐเบเบปเบเบเปเปเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบ. เบเบปเบงเปเบฅเบทเบญเบเบเบตเปเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเบงเบเบเบธเบกเบเบถเบเบเบดเบเปเบฒเบเบญเบ swappiness (เปเบฅเบเบเปเบฝเบเบซเบเปเบฒเปเบเปเบฅเบฐเบญเบญเบเบเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ) เปเบ Linux. เบกเบนเบเบเปเบฒเบเบฑเปเบเปเบเป 0 เบซเบฒ 100. เบกเบฑเบเบเปเบฒเบเบปเบเบงเปเบฒเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบซเบผเบฒเบเบเบฒเบเปเบเบเบฐเบเบทเบเบเบฑเบเปเบชเปเบซเบเปเบฒเบซเบผเบทเบญเบญเบเบซเบเปเบฒ. เบชเบนเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเปเปเบกเบตเบเบฒเบเปเบฅเบเบเปเบฝเบเปเบฅเบฐ 100 เบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบฒเบเปเบฅเบเบเปเบฝเบเบฎเบธเบเบฎเบฒเบ.
เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบตเปเบเบตเปเบเบเบเบฒเบเบเปเบฒเบเบปเบเบเปเบฒเบเปเปเบฒ.
เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเปเปเบเบฑเบ 0 เปเบเปเบเปเบเปเบซเบกเปเบญเบฒเบเบเบฐเปเบฎเบฑเบเปเบซเป OOM Killer (เบเบฐเบเบงเบเบเบฒเบเบเปเบฒเบเบงเบฒเบกเบชเบฐเบญเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบญเบ Linux) เปเบเบทเปเบญเบเปเบฒเบเบฐเบเบงเบเบเบฒเบ. เบชเบฐเบเบฑเปเบเบกเบฑเบเบเบญเบเปเบเบเบตเปเบเบฐเบเบฑเปเบเบกเบฑเบเปเบเบฑเบ 1 เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบซเบผเบธเบเบเปเบญเบเบเบฒเบเบชเบฐเบซเบผเบฑเบ. เบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเปเบ Linux เปเบกเปเบ 60. เบกเบนเบเบเปเบฒเบเบตเปเบชเบนเบเบเบงเปเบฒเปเบฎเบฑเบเปเบซเป MMU (เบซเบเปเบงเบเบเบฒเบเบเบธเปเบกเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ) เปเบเปเบเบทเปเบเบเบตเป swap เบซเบผเบฒเบเบเบงเปเบฒ RAM, เปเบเบเบฐเบเบฐเบเบตเปเบเปเบฒเบเปเปเบฒเบเบฐเปเบเบฑเบเบเปเปเบกเบนเบ / เบฅเบฐเบซเบฑเบเบซเบผเบฒเบเปเบงเปเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ.
เบกเบนเบเบเปเบฒเบเปเปเบฒเปเบกเปเบเบเบฒเบเปเบเบตเบกเบเบฑเบเบเบตเปเบเบตเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบเบธเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบ PostgreSQL.
vm.overcommit_memory / vm.overcommit_ratio
เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเปเบฎเบฑเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเปเบฅเบฐเบเปเบญเบเบกเบฑเบเปเบกเบทเปเบญเบกเบฑเบเบเปเปเบเปเบฒเปเบเบฑเบ. เปเบเปเปเบเบเบฒเบเบเปเบฅเบฐเบเบต, เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเปเบฎเบฑเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเบซเบผเบฒเบเปเบเบตเบเปเบเปเบฅเบฐเบเปเปเบเปเบญเบเบกเบฑเบ. เบญเบฑเบเบเบตเปเบญเบฒเบเปเบฎเบฑเบเปเบซเปเบเบนเปเบเปเบฒ OOM เปเบเป. เบเบตเปเปเบกเปเบเบเปเบฒเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเปเบเบฑเบเปเบเปเบเป vm.overcommit_memory เบกเบตโเบฅเบฒเบโเบฅเบฐโเบญเบฝเบโเบชเปเบฒโเบฅเบฑเบโเปเบเปโเบฅเบฐโเบเบปเบโ:
- Heuristic overcommit (เบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ); heuristic เบเบตเปเบญเบตเบเปเบชเป kernel
- เบญเบฐเบเบธเบเบฒเบเปเบซเป overcommit เปเบเบงเปเบเบเปเปเบเบฒเบก
- เบขเปเบฒ overdo เบกเบฑเบ, เบเปเปเปเบเบตเบเบญเบฑเบเบเบฒเบชเปเบงเบ overcommit.
เบญเปเบฒเบเบญเบตเบ:
vm.overcommit_ratio โ เบญเบฑเบโเบเบฒโเบชเปเบงเบโเบเบญเบ RAM เบเบตเปโเบกเบตโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบ overloadโ. เบกเบนเบเบเปเบฒเบเบญเบ 50% เปเบเบฅเบฐเบเบปเบเบเบตเปเบกเบต 2 GB เบเบญเบ RAM เบชเบฒเบกเบฒเบเบเบฑเบเบชเบฑเบเปเบเปเปเบเบดเบ 3 GB เบเบญเบ RAM.
เบเปเบฒเบเบญเบ 2 เบชเปเบฒเบฅเบฑเบ vm.overcommit_memory เบชเบฐเบซเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบเบตเบเบงเปเบฒเบชเปเบฒเบฅเบฑเบ PostgreSQL. เบกเบนเบเบเปเบฒเบเบตเปเปเบฎเบฑเบเปเบซเปเบเบฒเบเปเบเป RAM เบเบญเบเบเบฐเบเบงเบเบเบฒเบเปเบเบตเบเปเบงเบตเบชเบนเบเบชเบธเบเปเบเบเบเปเปเบกเบตเบเบงเบฒเบกเบชเปเบฝเบเบเปเปเบเบฒเบเบเบทเบเบเปเบฒเบเบฒเบเปเบเบเบเบฐเบเบงเบเบเบฒเบ OOM killer. เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบฐเบชเบฒเบกเบฒเบเปเบซเบผเบเปเบเป, เปเบเปเบงเปเบฒเบเบฝเบเปเบเปเบขเบนเปเปเบเบเบญเบเปเบเบเบเปเบฒเบเบฑเบเบเบญเบเบเบฒเบ overrun, เปเบเบดเปเบเบซเบผเบธเบเบเปเบญเบเบเบงเบฒเบกเบชเปเบฝเบเบเปเปเบเบฒเบเบเปเบฒ OOM killer เบเบฐเบเบงเบเบเบฒเบ. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบญเบ 2 เปเบซเปเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบตเบเบงเปเบฒเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบ 0. เปเบเบงเปเบเบเปเปเบเบฒเบก, เบเบงเบฒเบกเบซเบเปเบฒเปเบเบทเปเบญเบเบทเบชเบฒเบกเบฒเบเบเบฑเบเบเบธเบเปเบเปเปเบเบเบเบฒเบเบฎเบฑเบเบเบฐเบเบฑเบเบงเปเบฒเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบญเบเบเบญเบเปเบเบเบเปเปเปเบเบตเบ. เบเบตเปเบเปเบฒเบเบฑเบเบเบงเบฒเบกเบชเปเบฝเบเบเบญเบเบเบฐเบเบงเบเบเบฒเบเบเบตเปเบเบทเบเบเปเบฒเบเบฒเบเปเบเบ killer OOM.
เปเบเบฅเบฐเบเบปเบเปเบเบเบเปเปเบกเบตเบเบฒเบเปเบฅเบเบเปเบฝเบ, เบเบฑเบเบซเบฒเบเบฑเบ vm.overcommit_memory เปเบเบปเปเบฒเบเบฑเบ 2 เบญเบฒเบเบเบฐเปเบเบตเบเบเบถเปเบ.
vm.dirty_background_ratio / vm.dirty_background_bytes
vm.dirty_background_ratio เปเบกเปเบเบญเบฑเบเบเบฒเบชเปเบงเบเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเปเบเบฑเบกเปเบเบเปเบงเบเบซเบเปเบฒเปเบเบทเปเบญเบเบเบตเปเบเปเบญเบเบเบฒเบเบเบฝเบเปเบชเปเปเบเปเบ. Flush to disk เปเบเบตเบเบเบถเปเบเปเบเบเบทเปเบเบซเบผเบฑเบ. เบเปเบฒเบเบญเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเบเบฑเปเบเปเบเป 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.
เบเบปเบเปเบเปเบฎเบฑเบ
เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบญเบทเปเบเปเปเบเบทเปเบญเบเบฑเบเบเบธเบเบเบฐเบชเบดเบเบเบดเบเบฒเบ, เปเบเปเบเบฒเบเบเบฑเบเบเบธเบเบเบฐเบซเบเปเบญเบเปเบฅเบฐเบเปเบฒเบเบเบฐเบเปเปเปเบซเบฑเบเบเบปเบเบเบฐเปเบซเบเบเบซเบผเบฒเบ. เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบทเปเปเบงเปเบงเปเบฒเบเปเปเปเบกเปเบเบเบฒเบเปเบฅเบทเบญเบเบเบฑเบเบซเบกเบปเบเบเปเบฒเปเบเปเบเบฑเบเบเบธเบเบเบฐเปเบเบเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ. เบเบฒเบเปเบญเบฑเบเปเบฎเบฑเบเบงเบฝเบเปเบเปเบเบตเบเบงเปเบฒเปเบกเบทเปเบญเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบญเบฑเบ, เปเบฅเบฐเบเบฒเบเบญเบฑเบเบเปเปเปเบฎเบฑเบ. เบเปเบฒเบเบเปเบญเบเบเบญเบเบซเบฒเบเบงเบฒเบกเบชเบปเบกเบเบนเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบซเบผเบปเปเบฒเบเบตเปเบชเปเบฒเบฅเบฑเบเบงเบฝเบเบเบตเปเบเบฒเบเปเบงเปเปเบฅเบฐเบเบฐเปเบเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เปเบฅเบฐเบเปเบฒเบเบเบฑเบเบเปเบญเบเบเบดเบเบฒเบฅเบฐเบเบฒเบเบถเบเบเบดเบเปเบฒเบเบญเบ OS เปเบเปเบงเบฅเบฒเบเบฑเบ. เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบ kernel เบเปเปเปเบกเปเบเปเบฅเบทเปเบญเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเปเปเบกเบนเบ; เบกเบฑเบเบเบฒเบเบเบตเปเบเบฐเปเบเบฐเบเปเบฒ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com