Имеется скрипт location_import.py. Он с openstreetmap заливает в базу информацию(postgre). Всё это происходит в двух разных контейнерах docker. Далее информация htop и iotop не в контейнерах, а непосредственно в машине:
htop имеет вид: https://ibb.co/Yp1psp2
iotop имеет вид: https://ibb.co/KWnNJDk
Конфиг postgresql в контейнере имеет вид:
max_connections = 9999
shared_buffers = 7936MB
effective_cache_size = 23808MB
maintenance_work_mem = 1984MB
checkpoint_completion_target = 0.7
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
work_mem = 406kB
min_wal_size = 1GB
max_wal_size = 4GB
temp_buffers = 1024MB
wal_writer_delay = 500ms
commit_delay = 10000
max_wal_size = 4880MB
random_page_cost = 1.1
track_activity_query_size = 16384
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02
autovacuum = on
В чём суть проблемы? Скрипт выжирает 30гб озу + 20гб свопа. При этом машина при работе скрипта становится неюзабельной ВООБЩЕ. Консоль открывается по хоткею по 10 секунд. Между нажатием клавиш и отрисовкой в консоли по 20 и более секунд. Курсор мыши заикается. После отработки скрипта машина все так же неюзабельна. Фаерфокс дохнет. Делаю killall -9 firefox-esr, потом опять запускаю его - запускается 10 минут. Некоторое время работает postgresql autovacuum, но после его отработки системе не легчает. Система некоторое время рассвопливается, но после рассвопливания и освобождения озу ей опять не легчает. Тег в dwm может переключаться 30 секунд. Любое действие - начинает таращить винт(что-то свопит что-то рассвопливает). В общем беда :). В скрипте postgresql стоит
rec = cur.fetchall()
возможно в этом причина того, что location_import.py выедает ~40гб(9.6гб выедает postgresql в контейнере). Возможно как-то можно проитерировать результат, чтобы в rec не попадал весь результат, но это одна грань этой печали. С остальными вопросами как быть? Что показать?
sysctl -a –> https://paste.ubuntu.com/p/q5d8smQMwp/