á¡áá±á¬ááºážáá¯á¶áž PostgreSQL á áœááºážáá±á¬ááºáááºááẠááŸááºáááºá áœá¬ áááºááŸááºáá¬ážáá±á¬ áááºáááºááŸá¯á áá Ạáá±á¬ááºáá»á¬ážáá±á«áºááœáẠáá°áááºáááºá áá¶á·áá»ááºážáá±á¬ OS kernel áááºáááºáá»á¬ážááẠáá±áá¬áá±á·á áºáá¬áá¬á áœááºážáá±á¬ááºáááºááᯠáá¶á·áá»ááºážá á±ááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áºá á€áááºáááºáá»á¬ážááᯠáá±áá¬áá±á·á áºáá¬áá¬ááŸáá·áº áááºážááá¯ááºáááºážáá¬áááºáá»á¬ážá¡ááá¯áẠááŒááºáááºáááºááŸááºááẠááá¯á¡ááºáá«áááºá á€ááá¯á·á áºááœááºá áá±áá¬áá±á·á áºáá¬áá¬á áœááºážáá±á¬ááºáááºááᯠááááá¯ááºá á±ááá¯ááºáá±á¬ á¡áá±ážááŒá®ážáá±á¬ Linux kernel áá±á¬ááºá¡áá»áá¯á·ááᯠááœá±ážááœá±ážááŒá®áž áááºážááá¯á·ááᯠáááºááá¯á·ááŒááºáááºááááºááᯠááœá±ážááœá±ážáá«áááºá
SHMMAX / SHMALL
SHMMAX Linux áá¯ááºáááºážá ááºáá áºáá¯á០ááœá²áá±áá±ážááá¯ááºááá·áº áá»áŸáá±áá¬ážáá±á¬ áááºááá¯áá®á¡ááá¯ááºážáá áºáá¯á á¡áá»á¬ážáá¯á¶ážá¡ááœááºá¡á á¬ážááᯠáá¯á¶ážááŒááºááẠá¡áá¯á¶ážááŒá¯ááá·áº kernel áá±á¬ááºáá áºáá¯ááŒá áºáááºá áá¬ážááŸááºáž 9.2 áááá¯ááºáá®á PostgreSQL ááẠSHMMAX áááºáááºááá¯á¡ááºááá·áº System V (SysV) ááᯠá¡áá¯á¶ážááŒá¯áá²á·áááºá 9.2 ááŒá®ážáá±á¬ááºá PostgreSQL ááẠPOSIX shared memory ááá¯á· ááŒá±á¬ááºážááœá¬ážáááºá ááá¯á·ááŒá±á¬áá·áº ááá¯á¡áá« System V áá»áŸáá±áá¬ážáá±á¬ áááºááá¯áá®á ááá¯ááºá¡áááºážáááºáᬠááá¯á¡ááºáá«áááºá
áá¬ážááŸááºáž 9.3 áááá¯ááºáá®á SHMMAX ááẠá¡áá±ážá¡ááŒá®ážáá¯á¶áž kernel ááá·áºáááºáá»ááºááŒá
áºáááºá SHMMAX áááºááá¯ážááᯠbytes ááŒáá·áº áááºááŸááºáááºá
á¡áá¬ážáá°ááẠáá±ážáááºáá±á¬ áá¯á¶ážááŒááºáááºá¡áá¯á¶ážááŒá¯áá±á¬ á¡ááŒá¬áž kernel parameter áá
áºáá¯ááŒá
áºáááºá
áá»áŸáá±áá¬ážáá±á¬ ááŸááºáá¬ááºá
á¬áá»ááºááŸá¬áá»á¬ážá á
áá
áºáá
áºáá¯áá¯á¶áž ááá¬áá áááºááŸá 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 ááá¯á¡áá¯á¶ážááŒá¯áááºá System 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/sysctl.conf. á¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážááá¯á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáááºá
MacOS X ááœáẠKernel áááºáááºáá»á¬ážááᯠááŒá±á¬ááºážáá²ááŒááºážá
# 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 ááŸá Kernel Parameters ááá¯ááŒá±á¬ááºážáá²ááŒááºážá
# 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 á¡ááá¯ááºážáá áºáá¯ááŒá áºáááºá áá¯ááºáááºážá ááºáá áºáá¯ááẠááŸááºáá¬ááºááá¯á¡ááºáá»ááºáá±á«áºáá°áááºá á á¬áá»ááºááŸá¬áá»á¬ážá áœá¬ááŸáááá¯ááºáááºá áá¯ááºáááºážá ááºáá áºáá¯á¡ááœáẠmemory áá»á¬ážáá»á¬ážááá¯á¡ááºáá±á áááºážááᯠá á¬áá»ááºááŸá¬áá»á¬áž ááœá²áá±áá±ážáá±áá±ááŒá áºáááºá OS ááẠáá¯ááºáááºážá ááºáá»á¬ážá¡ááœáẠá á¬áá»ááºááŸá¬ááœá²áá±ááŸá¯ááá¬ážááᯠááááºážááááºážáá¬ážáááºá á á¬áá»ááºááŸá¬á¡ááœááºá¡á á¬áž áá±ážáááºáá±á ááá¬ážááá¯ááŒá®ážáá±á ááá¯á á¬áá»ááºááŸá¬ááá¬ážááŸá á á¬áá»ááºááŸá¬áá áºáá¯ááᯠááŸá¬ááœá±ááẠááŒá¬áá±ááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº ááŒá®ážáá¬ážáá±á¬ á á¬áá»ááºááŸá¬áá»á¬ážááẠááá¬áááᯠáá»áŸá±á¬á·áá»áá±ážááŒááºážááŒáá·áº memory á¡áá»á¬ážá¡ááŒá¬ážááᯠá¡áá¯á¶ážááŒá¯ááœáá·áºáá±ážáááºá á á¬áá»ááºááŸá¬ááŒáá·áºááŸá¯ááŸá¯ áááºážáá«ážááŒááºážá á á¬áá»ááºááŸá¬ á¡ááŸá¬ážá¡ááœááºážáá»á¬áž áááºážáá«ážááŒááºážá ááá¯ááá¯ááŒá®ážáá¬ážáá±á¬ ááŒá¬ážáá¶áá»á¬ážááẠááá¯ááá¯ááŒááºáááºá áœá¬ áááºááŸá¯ááŒááºáž/áá±ážááŒááºáž áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá ááááºááá±á¬á· á áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºáá±ážáá«áááºá
PostgreSQL ááẠLinux ááŸá á á¬áá»ááºááŸá¬ááŒá®ážáá»á¬ážááá¯áᬠáá¶á·ááá¯ážáá±ážáááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá Linux ááẠ4 KB áááºááá¯áá®á á¬áá»ááºááŸá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá ááá¯á·ááŒá±á¬áá·áº áááºááá¯áá®áá¯ááºáá±á¬ááºááŸá¯áá»á¬áž á¡ááœááºáá»á¬ážáá±á¬ááá á¹á áá»á¬ážááœáẠááá¯ááŒá®ážáá±á¬á á¬áá»ááºááŸá¬áá»á¬ážááᯠáááºááŸááºááẠááá¯á¡ááºáááºá 2 MB ááŸáá·áº 1 GB á¡áá ááŒá®ážáá¬ážáá±á¬ á á¬áá»ááºááŸá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá±á¬á¡áá« á áœááºážáá±á¬ááºááẠááá¯ážáá¬áááºááᯠááœá±á·ááááºá ááŒá®ážáá¬ážáá±á¬ á á¬áá»ááºááŸá¬á¡ááœááºá¡á á¬ážááᯠá áááºáá»áááºá áááºááŸááºááá¯ááºáááºá command ááᯠá¡áá¯á¶ážááŒá¯á áááºá 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 áá¯áááºááŸááºáá¬ážáááºá ááá¯ááá¯áááºááŸá¬ ááŒá®ážáá¬ážáá±á¬á á¬áá»ááºááŸá¬áá»á¬ážááá¯ááááºáá¬ážáááºáá¯ááá¯ááá¯áááºá
ááŒá®ážáá¬ážáá±á¬á á¬áá»ááºááŸá¬á¡áá±á¡ááœááºááá¯áá¯á¶ážááŒááºááẠScript
á€ááá¯ážááŸááºážáá±á¬ script ááẠááá¯á¡ááºáá±á¬ á á¬áá»ááºááŸá¬ á¡áá»á¬ážá¡ááŒá¬ážááᯠááŒááºáá±ážáááºá PostgreSQL áá¯ááºáá±á¬ááºáá±áá»áááºááœáẠááá·áº Linux áá¬áá¬ááœáẠscript ááá¯ááœáá·áºáá«á áááºâáááºážáá»ááºââááŒá±á¬ááºážáá²ááá¯ááºâáááºâááᯠâáá±áá»á¬âá á±áá«á $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
script output ááẠá€áá²á·ááá¯á· ááŒá áºáááº-
áá¬ááºááœáŸááºážá¡ááœááº
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 parameter ááᯠ$PGDATA/postgresql.conf ááœáẠ"on" áᯠáááºááŸááºááŒá®áž áá¬áá¬ááᯠááŒááºáááºá áááºáá«á
áá áºáááºá ááŒá®ážáá¬ážáá±á¬ á á¬áá»ááºááŸá¬áá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡ááẠ(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 parameter áá áºáá¯ááŒá áºáááºá Linux ááŸá swappiness (ááŸááºáá¬ááºá¡ááœááºážááŸáá·áº á á¬áá»ááºááŸá¬áá»á¬ážááᯠáá²ááŸááºááŒááºáž) áá¡ááŒá¯á¡áá°ááᯠááááºážáá»á¯ááºáááºá¡ááœáẠá€ááœá±ážáá»ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá áááºááá¯ážááẠ0 á០100 á¡áá ááœá¬ááááºá áááºážááẠááŸááºáá¬ááºáááºáá»áŸ á á¬áá»ááºááŸá¬ááẠááá¯á·ááá¯áẠá á¬áá»ááºááŸá¬áá¯ááºáááºááᯠáá¯á¶ážááŒááºáááºá áá¯áááá¯áááºááŸá¬ áá²ááŸááºááŒááºážáááŸááááᯠ100 ááẠááŒááºážáááºáá±á¬ áá²ááŸááºááŸá¯ááᯠááá¯ááá¯áááºá
áááá·áºáá±á¬áááºááá¯ážáá»á¬ážááᯠáááºááŸááºááŒááºážááŒáá·áº áá±á¬ááºážááœááºáá±á¬ á áœááºážáá±á¬ááºáááºááᯠáááŸáááá¯ááºáááºá
áááºážááᯠá¡áá áºáá±á¬ kernels áá»á¬ážááœáẠ0 ááá¯á· áááºááŸááºááŒááºážááẠOOM Killer (Linux á ááŸááºáá¬áẠááá·áºááŸááºážáá±áž áá¯ááºáááºážá ááº) áá¯ááºáááºážá ááºááᯠáááºáá áºááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº áá²ááŸááºááŒááºážááᯠáá»áŸá±á¬á·áá»ááá¯áá«á áááºážááᯠ1 áᯠáááºááŸááºááẠáá±ážáááºážáá«áááºá Linux ááœáẠáá°áááºážáááºááá¯ážááẠ60 ááŒá áºáááºá ááŒáá·áºáá¬ážáá±á¬áááºááá¯ážááẠMMU (memory management unit) ááẠRAM ááẠswap space ááá¯áá»á¬ážááŒá®áž áááºááá¯ážáááá·áºááẠmemory áá²ááœáẠdata/code ááá¯áá»á¬ážáá±áá«áááºá
ááá¯áááºážáá±á¬áááºááá¯ážááẠPostgreSQL ááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ á áœááºážáá±á¬ááºáááºá¡ááœáẠáá±á¬ááºážáá±á¬á¡áá±á¬ááºážá¡á á¬ážááŒá áºáááºá
vm.overcommit_memory / vm.overcommit_ratio
á¡ááá®áá±ážááŸááºážáá»á¬ážááẠáááºááá¯áá®ááᯠááá°ááŒá®áž áááá¯á¡ááºáá±á¬á·ááá·áºá¡áá« áááºážááᯠáá¯ááºááœáŸááºáááºá ááá¯á·áá±á¬áº á¡áá»áá¯á·ááá á¹á áá»á¬ážááœááºá á¡ááá®áá±ážááŸááºážááẠáááºááá¯áá®á¡ááœááºá¡áá»áœá¶áááŸáááŒá®áž áááºážááᯠááá¯ááºááœáŸááºáá«á áááºážááẠOOM áá°áááºááá¬ážááᯠááŒá áºá á±ááá¯ááºáááºá á€áááºááŸá¬ ááŒá áºááá¯ááºááá·áº á¡ááá¯ááºážá¡áá¬áááºááá¯ážáá»á¬ážááŒá áºáááºá vm.overcommit_memory áá áºáá¯áá»ááºážá á®á¡ááœáẠáá±á¬áºááŒáá»ááºááŸáá·áºá¡áá°
- Heuristic overcommit (áá°á); kernel-based heuristic
- áá¬áá²ááŒá áºááŒá Ạáá»á±á¬áºááœáŸá¬ážááœáá·áºááŒá¯áá«á
- ááœááºááœááºáá²áá² ááá¯ááºáá«ááŸáá·áºá ááœááºáá²áá±á¬ á¡áá»áá¯ážááᯠááá»á±á¬áºááœááºáá«á á±ááŸáá·áºá
áááºá·ááº:
vm.overcommit_ratio - áááºááá¯á¡ááœááºáááá¯ááºáá±á¬ RAM áá¬ááá¯ááºááŸá¯ááºážá 50 GB RAM áá«áá±á¬ á áá áºáá áºáá¯ááœáẠ2% áááºááá¯ážááẠRAM 3 GB á¡áá ááœá²áá±áá±ážááá¯ááºáááºá
vm.overcommit_memory á¡ááœáẠ2 áááºááá¯ážááẠPostgreSQL á¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ á áœááºážáá±á¬ááºáááºááᯠáá±ážáá«áááºá á€áááºááá¯ážááẠOOM áá°áááºááá¬ážááŒá áºá ááºááŒá±á¬áá·áº áááºáá áºááá·áºá¡áá¹ááá¬ááºáááŸááá² áá¬áá¬áá¯ááºáááºážá ááºá RAM áá¯á¶ážá áœá²ááŸá¯ááᯠá¡ááŒáá·áºáá¯á¶ážááŒá áºá á±áááºá á¡ááá®áá±ážááŸááºážááẠááŒááºáááºá áááºááá¯ááºáááºááŒá áºááŒá®ážá ááŒá áºá ááºááᯠOOM áá°áááºááá¬ážáá¡áá¹ááá¬ááºááᯠáá»áŸá±á¬á·áá»áá±ážááá·áº overrun ááá·áºáááºáá»ááºáá»á¬ážá¡ááœááºážáᬠááŒááºáááºá áááºááá¯ááºáááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá 2 áááºááá¯ážááẠ0 á áá¯á¶áá±áááºááá¯ážááẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ á áœááºážáá±á¬ááºáááºááᯠáá±ážáááºá ááá¯á·áá±á¬áº ááŒááºááááºááá¯áá®ááᯠááœááºááœááºáá²áá²áááŒá áºá á±ááẠáá±áá»á¬á á±ááŒááºážááŒáá·áº áá¯á¶ááŒááºá áááºáá»áááŸá¯ááᯠááŒáŸáá·áºáááºááá¯ááºáá«áááºá áááºážááẠOOM áá°áááºááá¬ážá០áááºááá·áºááŒá áºá ááºáá¡áá¹ááá¬ááºááᯠáááºááŸá¬ážáá±ážáááºá
áá²ááŸááºááŒááºážáááŒá¯áá² á áá áºáá»á¬ážááœááºá 2 ááŸáá·áº áá®áá»áŸáá±á¬ vm.overcommit_memory ááŒá¿áá¬áá áºáᯠááŒá áºáá±á«áºááá¯ááºáááºá
vm.dirty_background_ratio / vm.dirty_background_bytes
vm.dirty_background_ratio áá áºááºááá¯á· á á¬áá±ážááẠááá¯á¡ááºáá±á¬ áá áºáááºáá±á¬ á á¬áá»ááºááŸá¬áá»á¬ážááŒáá·áº ááŒáá·áºáá±ááá·áº áááºááá¯áá® áá¬ááá¯ááºááŸá¯ááºážááŒá áºáááºá flush to disk ááẠáá±á¬ááºáá¶ááœáẠááŒá áºáá±á«áºáááºá á€ááá·áºáááºáá»ááºááááºááá¯ážááẠ0 á០100 á¡ááááŸááá«áááº; ááá¯á·áá±á¬áºá 5 á¡á±á¬ááºáááºááá¯ážááẠáááá±á¬ááºááŸá¯áááŸáááá¯ááºáá±á¬áºáááºáž á¡áá»áá¯á·áá±á¬ kernel áá»á¬ážá áááºážááᯠááá¶á·ááá¯ážááá¯ááºáá«á 10 ááẠLinux á áá áºá¡áá»á¬ážá á¯ááœáẠáá¯á¶áá±ááŒá áºáááºá áá±ážáááºáá±á¬á¡áá»ááºááŒáá·áº áá±ážáááºá¡áá±ážáá±ážáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠá áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬ Linux ááẠáá áºáááºáá±á¬á á¬áá»ááºááŸá¬áá»á¬ážááᯠáá±á¬ááºáá¶ááœáẠáááºááŸá¬ážáá áºáááºáᯠááá¯ááá¯áááºá
áááºááá¯ážáááºááŸááºááẠááá¯á¡ááºáá«áááºá vm.dirty_background_bytes áááºá drive áá¡ááŒááºááŸá¯ááºážáá±á«áº áá°áááº.
ááŸá áºáá¯áá¯á¶ážááẠáá¬á·ááºáá²ááᯠááŸá®ááá¯áá±áá±á¬ááŒá±á¬áá·áº á€áá±á¬ááºááŸá áºáá¯á¡ááœáẠ"áá±á¬ááºážáá±á¬" áááºááá¯ážáá»á¬áž áááŸááá«á ááá¯á·áá±á¬áºá vm.dirty_background_ratio ááᯠ5 ááá¯á· áááºááŸááºááŒááºážááŸáá·áº vm.dirty_background_bytes á 25% ááá¯á· disk speed ááẠááá á¹á á¡áá»á¬ážá á¯ááœáẠá áœááºážáá±á¬ááºáááºááᯠ~25% ááá¯á· ááá¯ážáááºá á±áááºá
vm.dirty_ratio/dirty_bytes
áá«ááá°áá°áá«áá² vm.dirty_background_ratio/dirty_background_bytesá¡ááá®áá±ážááŸááºážááᯠááááºááá¯á·ááŒááºážááŸááœá²á ááŒááºáááºáááºááŸááºááŒááºážá¡á¬áž á¡áá¯ááºááá¬ážá ááºááŸááºááœáẠáá¯ááºáá±á¬ááºáá«áááºá ááá¯á·ááŒá±á¬áá·áº vm.dirty_ratio ááẠááá¯ááŒáá·áºááá·áºáááºá vm.dirty_background_ratio. áááºážááẠá¡ááá®áá±ážááŸááºážááᯠáááºááá¯ááºááá»áŸ ááááºááá¯á·ááŒááºážá០ááŸá±á¬ááºááŸá¬ážááẠáá±á¬ááºáá¶áá¯ááºáááºážá ááºáá»á¬ážááᯠá á±á¬á á±á¬á áááºááŒá±á¬ááºáž áá±áá»á¬á á±áá«áááºá disk I/O load áá±á«áºáá°áááºá á€á¡áá»áá¯ážááŸá áºáá¯ááŒá¬áž ááœá¬ááŒá¬ážáá»ááºááᯠáááºáá»áááºááŸáááá¯ááºáááºá
ááááº
á
áœááºážáá±á¬ááºááẠááŒáŸáá·áºáááºááẠá¡ááŒá¬ážáááºáááºáá»á¬ážááᯠááẠááŒááºáááºááá¯ááºáá±á¬áºáááºáž ááá¯ážáááºááŸá¯ á¡áááºážáááºáᬠááŸááááºááŒá
áºááŒá®áž áááºááẠáá»á¬ážá
áœá¬ á¡áá»áá¯ážááŸááááºááá¯ááºáá«á ááœá±ážáá»ááºááŸá¯á¡á¬ážáá¯á¶ážááẠá¡ááá®áá±ážááŸááºážá¡áá»áá¯ážá¡á
á¬ážá¡á¬ážáá¯á¶ážááŸáá·áºáááºááá¯ááºáááºááá¯ááºááŒá±á¬ááºáž ááŸááºáá¬ážáá¬ážááá«áááºá á¡áá»áá¯á·áá±á¬ áááºáááºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· áá»áááºááŸááá±á¬á¡áá«ááœáẠá¡áá»áá¯á·á¡ááºááºáá»á¬ážá ááá¯áá±á¬ááºážááŒá®áž á¡áá»áá¯á·áá±á¬ á¡ááºááºáá»á¬ážááẠá¡áá¯ááºááá¯ááºáá«á ááá·áºáá»áŸá±á¬áºááŸááºážáá¬ážáá±á¬ á¡áá¯ááºáá¬áááºááŸáá·áº á¡ááá®áá±ážááŸááºážá¡áá»áá¯ážá¡á
á¬ážá¡ááœáẠá€áááºáááºáá»á¬ážááᯠááŒááºáááºáááºááŸááºááŒááºážááŒá¬áž ááŸááºáááºáá»áŸááá±á¬ áá»áááºááœááºáá»áŸá¬ááᯠááŸá¬ááœá±ááááºááŒá
áºááŒá®áž áá»áááºááŸáááá·áºá¡áá« OS á¡ááŒá¯á¡áá°ááá¯áááºáž ááá·áºááœááºážá
ááºážá
á¬ážááá«áááºá kernel parameters áá»á¬ážááᯠconfiguration ááẠdatabase parameters áá»á¬ážááᯠconfigure áá¯ááºááá²á·ááá¯á· áááœááºáá°áá«á á¡ááŒá¶ááŒá¯áá»ááºáá»á¬áž ááŒá¯áá¯ááºááẠááá¯ááá¯áááºáá²áá«áááºá
source: www.habr.com