Ошибка сервера CKAN

Время от времени я получаю сообщение об ошибке тайм-аута от моего сервера CKAN. В файле журнала отображается следующее сообщение об ошибке:

TimeoutError: предел переполнения QueuePool размером 5 10 достигнут.

Любая идея, что вызывает это и как это исправить?

PK


person user1380140    schedule 27.11.2013    source источник


Ответы (2)


Я думаю, что QueuePool относится к лимиту подключений к базе данных. Вы не закрываете соединения в расширении или получаете очень большой объем трафика?

person Rufus Pollock    schedule 27.11.2013
comment
Я не уверен, должен ли я закрывать какое-либо соединение, поскольку я не создаю никакого соединения. Я использую действия CKAN API для выполнения любых операций CRUD. Я предполагаю, что API обрабатывает создание и закрытие соединений с БД. Единственное, что я могу предположить, что может быть причиной этой проблемы, это то, что у меня есть фоновый планировщик (отдельный поток), который выполняет некоторые действия типа CRUD в базе данных. Я предполагаю, что для фоновой задачи мне, возможно, придется создать сеанс БД и закрыть его, когда фоновая задача будет выполнена. - person user1380140; 28.11.2013
comment
Я добавил следующую строку перед вызовом фонового задания: session = meta.Session #ckan.model.meta, а затем после вызова фоновой функции добавил эту строку: session.remove() #и это решило проблему. - person user1380140; 09.12.2013

Это SQLAlchemy CKAN, у которого заканчиваются соединения с базой данных. Вы увидите это, когда apache увидит несколько одновременных запросов под небольшой нагрузкой. Вы можете воспроизвести его, используя что-то вроде «ab», чтобы обеспечить одновременную загрузку.

Пул соединений SQLAlchemy совместно используется потоками одного и того же процесса CKAN, но каждый процесс CKAN имеет свой собственный пул.

Вы можете увеличить количество подключений в пуле, но помните, что postgres по умолчанию имеет ограничение в 100 подключений. Таким образом, с несколькими процессами вы достаточно быстро достигнете предела. Или вы можете ограничить количество процессов CKAN. Я полагаю, Ян несколько дней назад заметил одну зависимость CKAN, которая не является потокобезопасной, поэтому пока лучше придерживаться только процессов.

Если вы используете Apache, вы можете запустить mod_wsgi в режиме демона и указать ограничения для процессов/потоков. Если вы используете nginx/uwsgi, то это, естественно, ограничивает количество процессов, что лучше.

Лучшим решением было бы использовать отдельное приложение для хранения пула соединений. Преимущество этого заключается в работе с потоками CKAN. Можно использовать PGPool, но мы выбрали pgbouncer, который, как мне кажется, работает быстрее, и мы им очень довольны.

person D Read    schedule 09.03.2017