Django: CONN_MAX_AGE bağlantılarını sürdürüyor ancak PostgreSQL ile yeniden kullanmıyor


17

Ubuntu 14.04 LTS üzerinde Django 1.6.7 ve Postgres 9.3 kullanıyorum bir django kurulumu var.

Herhangi bir zamanda, site 2.5GHz'de Dört Çekirdekli Xeon E5-2670 olan ve 16GB ram'ye sahip PostgreSQL veritabanına yaklaşık ~ 250 eşzamanlı bağlantı alır. Belirli bir makinedeki gün boyunca yük ortalaması yaklaşık 20 ila 30'dur.

Bazen veritabanına zaman aşımı bağlantıları hakkında nöbetçi e-postalar alacak ve bir çeşit bağlantı havuzu etkinleştirmek bu sorunu hafifletmek yanı sıra veritabanındaki yükü biraz düşürmek yardımcı olacaktır.

Django 1.6 kullandığımızdan, yerleşik havuz oluşturmaya hazırız. Ancak, CONN_MAX_AGE değerini 10 saniyeye veya 60 saniyeye ayarladığımda, hemen hemen eşzamanlı bağlantı sayısı izin verilen maksimum ayara (genellikle gördüğümüzden iki kat daha fazladır) atlar ve bağlantılar reddedilmeye başlar.

Yani, hiç bir neden, bağlantılar için ne görünür ARE devam eden, ancak DEĞİLDİR yeniden ediliyor.

Bunun nedeni ne olabilir?

PS. Ayrıca --worker-class = eventlet ile gunicorn kullanıyoruz. Belki de bu bizim sıkıntılarımızın kaynağıdır?

Yanıtlar:


18

Biraz daha deney yaparak, sorunumuzun nedeninin gerçekten de gunicorn'un olay işçi sınıfı olduğunu buldum. Her mikroişlem kendi kalıcı bağlantısını yaptı ve hiçbirini yeniden kullanmanın hiçbir yolu yoktu.

Etkinliği devre dışı bırakmak, web sunucularımızdaki yükü artırdı (ancak çok fazla değil), ancak postgres yükü şimdi ortalama 3'e düştü.


2
Bize biraz zaman kazandın! Aynı davranışı gözlemliyoruz ve olay kullanıyoruz. Bağlantı havuzuna geçmeye ve nasıl çalışacağını görmeye çalışacaktır.
silentser

3
Güncelleme: pgBouncer ile veritabanı bağlantılarını havuzlamak sorunu çözüyor gibiydi (hala olay kullanıyoruz)
silentser

Görünüşe göre psycogreen de var: pypi.python.org/pypi/psycogreen/1.0 (CONN_MAX_AGE değerini sıfıra ayarladığımda bir kez denemedim, böylece bir DB bağlantısı yapmak sistemimizi 20 ms sürüyor, bu yüzden sadece havuz oluşturmaya gerek yok)
Darren

1
Bu cevabı yaşadığımız problemin aynısına getirmek biraz zaman aldı.
Alper
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.