2010-06-15 84 views
2

我在Postgresql 8.1.21上運行Django項目(使用Django 1.1.1,Python2.5,psycopg2,Apache2和mod_wsgi 3.2)。我們最近遇到了這個可愛的錯誤:Django ORM和PostgreSQL連接限制

OperationalError: FATAL: connection limit exceeded for non-superusers

我不反對這種跑起來的第一人。關於這個錯誤有很多討論,特別是psycopg,但是其中大部分都是關於Django的老版本,並且/或者提供了涉及編輯的解決方案來在Django本身進行編碼。我還沒有找到關於如何解決Django ORM(或psycopg,在這種情況下真正負責任的問題)離開Postgre連接問題的簡潔解釋。

只需在每個視圖的末尾添加connection.close()解決此問題?更好的是,有誰最終解決了這個問題,並踢了這個錯誤的屁股?

編輯:我們稍後將Postgresql的限制上限爲500個連接;這防止了出現錯誤,但用過多的內存使用來替換它。

回答

1

這可能是由其他事情引起的。例如,配置Apache/mod_wsgi的方式理論上可以接受比數據庫本身可以同時接受更多的併發請求。你是否檢查過你的Apache/mod_wsgi配置,並將最大客戶端的限制與PostgreSQL的限制進行了比較,以確保類似的事情尚未完成。顯然這假定你已經設法達到了Apache的這個限制,這取決於如何建立任何數據庫連接池。

+0

我會聽起來很呆板,但是你指的是WSGIDaemonProcess的最大請求設置,還是Apache的MaxClient? – bennylope 2010-06-16 00:55:48

+0

這真的取決於您是使用mod_wsgi的嵌入模式還是守護進程模式。我不能猜測你正在運行什麼,所以不得不推廣。 – 2010-06-16 02:47:17

+0

謝謝,這很有道理。我注意到,即使將數據庫的連接限制設置爲高於MaxClients限制(現在以嵌入模式運行)之後,數據庫(ORM/psycopg)仍然保持連接打開狀態。這絕對是很好的知道;我認爲在這種情況下,錯誤仍然導致ORM(?)不關閉這些連接。 – bennylope 2010-06-16 14:59:11