1

我們正在構建一個使用大量後端任務(任務隊列)的應用程序,並且在每個任務中 - 我們正在使用Google Cloud SQL進行I/O操作。任務隊列以「(2062,'雲SQL套接字打開失敗,錯誤:沒有這樣的文件或目錄')結尾」

至於GAE有12個併發連接的限制(不知道這是否是問題?我在https://stackoverflow.com/a/26155819/687692看到的)

「」每個App Engine的實例在標準的環境中運行,或者使用標準兼容的API,不能有超過12個併發連接到Google Cloud SQL實例。「 - https://cloud.google.com/sql/faq

我的大多數後端任務(每秒100-500個任務)都因此問題而失敗。

Failing tasks

另外,我檢查了持續4天的活動連接:我沒有看到任何的連接比12間的連接都多。

Last 4 days - GCS

所以,我需要什麼樣的方式把解決這一問題?連接池(如何使用GCS進行GAE?)?或其他一些修復?

任何幫助 - 指導非常感謝。 讓我知道,如果任何人需要更多的信息。

感謝,

+0

你提到的錯誤通常確實表明,12連接已經達到極限。請注意,該限制是每個/ App Engine實例的12個併發連接數,而不是整個應用程序。您知道應用程序中每個App Engine實例處理多少個任務隊列請求?根據鏈接文章設置最大max_concurrent_requests是否適合你? (請注意,設置較低的max_concurrent_requests值可能會導致更多App Engine實例處理請求)。 – Vadim

+0

max_concurrent_requests用於前端實例。我的任務隊列通常在一秒鐘內運行100-500個任務。 (我希望這對於大項目來說不是很大的數字) –

+0

max_concurrent_requests適用於任何使用自動縮放的模塊。你能描述一下你的設置嗎?您是否使用後端(https://cloud.google.com/appengine/docs/python/backends/)或您的任務處理程序的單獨模塊?每秒處理每個實例有多少個任務(不是總體任務數量)? – Vadim

回答

1

這是不太可能的是,如果連接正確處理您將超過使用標準的Python App Engine的縮放設置的12個連接限制。

爲了演示,我創建了一個small application,它調度許多任務,每個任務都獲取數據庫連接並執行一些工作。我能夠在不觸及連接問題的情況下運行此測試。

值得確認的一件事是,您沒有泄漏任何連接(即不在某些地方關閉連接或發生異常)。

對於MySQLdb的,你能保證你不被使用closingcontextlib泄漏連接:

from contextlib import closing 

def getDbConnection(): 
    return MySQLdb.connect(unix_socket='/cloudsql/instance_name', db='db', user='user', charset='utf8') 

with closing(getDbConnection()) as db: 
    # do stuff, database is guaranteed to be closed 
+0

我想,這似乎解決了我的問題:但現在,而不是這個 - 我得到新的錯誤:** OperationalError:(2013,「丟失連接到MySQL服務器'讀取初始通信數據包',系統錯誤:38」) **。這與此有關嗎? –

+0

它多久發生一次? – Vadim

+0

一日三次。 –

相關問題