Планировщик 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" это просто заполнитель.

С наилучшими пожеланиями, Клеменс

Другие вопросы по тегам