@redduckrobot

В чем причина того что PostgreSQL сильно нагружает процессор?

Есть сайт на Джанго, бд соответственно, в день чуть меньше 100 посетителей, хостинг vps у digitalocean (515). Не могу понять по какой причине PostgreSQL так сильно нагружает процессор, причем это происходит как по накоплению чего-то, вот сейчас ребутнул сервер и при заходе на сайт htop показывает нагрузку 1-3%, до ребута было 40+% за одно обращение. Поскольку сайт раньше падал из-за этого (PostgreSQL не хватало памяти и она отключалась), я внес настройки рекомендованные pgtune, сайт не падает, но дико виснет.
В логах PostgreSQL видно что не хватает памяти, но куда она девается я не могу понять и из-за чего.
2015-12-09 12:28:40 EST LOG:  could not fork autovacuum worker process: Cannot allocate memory


По логам nginx-access не вижу никаких особых нагрузок.

Вероятней всего это из-за моей не опытности, но я даже не могу понять как найти дырку, подскажите, пожалуйста, на что обратить внимание и как найти причину из-за которой возникает такая нагрузка?

htop в тихом состоянии:
673dd0c383074f0683d14bb924b020b6.png

htop siege -b -c 1 -r 1000 (аналогичный результат и для других проектов):
a1e7a07eed304b53b933339d7513f592.png
Transactions:                   1000 hits
Availability:                 100.00 %
Elapsed time:                  88.91 secs
Data transferred:               5.10 MB
Response time:                  0.09 secs
Transaction rate:              11.25 trans/sec
Throughput:                     0.06 MB/sec
Concurrency:                    1.00
Successful transactions:        1000
Failed transactions:               0
Longest transaction:            0.60
Shortest transaction:           0.06


Конфиг pg дефолтный, за исключением:
max_connections = 100
shared_buffers = 128GB
effective_cache_size = 384GB
work_mem = 1342177kB
maintenance_work_mem = 2GB
checkpoint_segments = 32
checkpoint_completion_target = 0.7
wal_buffers = 16MB
default_statistics_target = 100


Сейчас все работает нормально, когда оно еще раз выстелет я не знаю.
  • Вопрос задан
  • 7506 просмотров
Пригласить эксперта
Ответы на вопрос 6
romy4
@romy4
Exception handler
ну тут пальцем в небо потыкать можно будет долго
1. нагрузка на винт? проверить. свапинг
2. наличие ключей на полях
3. найти кто "ест" память
Ответ написан
Комментировать
@kshvakov
настройки постгреса выложите, что у вас там по памяти/диску/cpu ?
дайте pg_stat_bgwriter и pg_stat_database
Ответ написан
Комментировать
FeNUMe
@FeNUMe
Проблема явно в коде или преждевременной бездумной оптимизации настроек бд. У меня есть аналогичный(Django+Postres9.1) проект на DO и ни разу похожих проблем не было за несколько лет.
Еще вариант что вас взломали и запустили какого-то зловреда нагружающего систему. В любом случае без логов, топа, конфигов определить что там у вас не так сложно.
Ответ написан
opium
@opium
Просто люблю качественно работать
у вас поди самый мелкий дроплет и нет свапа, а в постгресе много данных и ему не хватает памяти автовакуумнуться.
Ответ написан
Комментировать
reli
@reli
Python-devel
Можно посмотреть в сторону large_page в sysctl, конфиг postgres.conf с его оптимизацией и разумеется VACUUM.
Ответ написан
Комментировать
@neuronic
1. Замените GB на MB в параметрах и измените work_mem, чтобы стало так:
shared_buffers = 128MB
effective_cache_size = 384MB
work_mem = 4MB
maintenance_work_mem = 32MB

Конкретно по ошибке из лога: VACUUM использует maintenance_work_mem параметр, а он у вас 2GB.
2. Также, по выводу htop видно, что в системе нет свопа. Cоздать своп.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект