Context: server web găzduit pe DigitalOcean cu o bază de date PostgreSQL.
Am întâmpinat blocări recurente ale bazei de date din motive necunoscute. În cele din urmă, am găsit o interogare defectuoasă care supraîncărca sistemul și sunt aproape sigur că aceasta este problema.
Cu toate acestea, în timp ce investigam erori postgres, am dat peste un post menționând modificarea sistemului nucleu.shmmax
deoarece este legat de setarea postgres shared_buffer
.
Se dovedește când fug cat /proc/sys/kernel/shmmax
valoarea sa este 18446744073692774399
! Habar nu am de ce, dar asta pare o nebunie.
Oricum, de ce ar putea această valoare să fie atât de mare și care ar trebui să fie?
Utilizarea memoriei în picăturile noastre (în total 16 GB) era în jur de 87%. După ce am remediat interogarea, când serverul a repornit, a rămas mai scăzut la aproximativ 47% și, în timp, a revenit la aproximativ 84% după câteva ore. Nu există administrator de sistem, dar am presupus că ar putea fi implicată valoarea mare a sshmax?
Alte setări relevante postgres sunt:
shared_buffers = 4 GB
max_connections = 300
max_wal_size = 2 GB
checkpoint_timeout = 15min
checkpoint_timeout = 15min
checkpoint_completion_target = 0,9
Întrebarea mea este despre valoarea shmmax mare și cum ar putea fi legată de setările defectuoase ale postgres și de ce utilizarea memoriei crește așa.