Планировщик Web2py создает процесс "Idle in Transaction" с PostgreSQL
Этот вопрос относится к планировщику в Web2py Framework.
Я использую планировщик в качестве службы Linux.
Я создал файл /etc/systemd/system/web2py-sched.service
[Unit]
Description=Web2Py scheduler service
[Service]
ExecStart=/usr/bin/python /home/www-data/web2py/web2py.py -K myApp
Type=simple
Restart=always
[Install]
WantedBy=multi-user.target
Затем установите сервис, позвонив:
sudo systemctl enable /etc/systemd/system/web2py-sched.service
systemctl start /etc/systemd/system/web2py-sched
Когда я проверил свой статус Postgres, я вижу, что есть процессы со статусом "Idle in Transaction".
may@myApp:/home/www-data/web2py/scmyAppts$ sudo systemctl status postgresql@9.5-main
● postgresql@9.5-main.service - PostgreSQL Cluster 9.5-main
Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2018-10-16 15:39:25 PDT; 1 weeks 1 days ago
Main PID: 28202 (postgres)
CGroup: /system.slice/system-postgresql.slice/postgresql@9.5-main.service
├─10956 postgres: may mydb ::1(60654) idle in transaction
├─10957 postgres: may mydb ::1(60656) idle in transaction
├─13421 postgres: may mydb 10.5.77.35(51998) idle
├─13422 postgres: may mydb 10.5.77.35(52004) idle
├─13423 postgres: may postgres 10.5.77.35(52005) idle
├─13425 postgres: may mydb 10.5.77.35(52007) idle
├─13433 postgres: may mydb 10.5.77.35(52332) idle
├─28202 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c config_file=/etc/postgresql/9.5/main/postgresql.conf
├─28204 postgres: checkpointer process
├─28205 postgres: writer process
├─28206 postgres: wal writer process
├─28207 postgres: autovacuum launcher process
├─28208 postgres: stats collector process
├─30475 postgres: may mydb ::1(59838) idle
├─30476 postgres: may mydb ::1(59840) idle in transaction
└─30500 postgres: may mydb ::1(59842) idle
Когда я заметил, что некоторые процессы простаивают, транзакции и мои запросы к БД истекают, я проверил, какая таблица получает блокировки.
SELECT relation, pid, mode, granted, relname
FROM pg_locks
INNER JOIN pg_stat_user_tables
ON pg_locks.relation = pg_stat_user_tables.relid
WHERE pg_locks.pid='30476';
relation pid mode granted relname
16553 30476 AccessShareLock TRUE scheduler_task
Пожалуйста, помогите мне в этом, я тщательно изучил код планировщика, и после каждой транзакции вызывается db.commit().
Версия:
Version
2.17.2-stable+timestamp.2018.10.06.18.54.02
(Running on nginx/1.10.3, Python 2.7.12)
web2py is up to date
1 ответ
Ваше приложение действительно называется myApp, как вы настроили при запуске службы ExecStart=/usr/bin/python /home/www-data/web2py/web2py.py -K myApp
?
Вы должны указать свою заявку по имени. "myapp" это просто заполнитель.
С наилучшими пожеланиями, Клеменс