2017-02-05 21 views
0

我有一個Azure功能的應用程序在Node.js與幾個隊列觸發功能。Azure功能達到超時而不做任何事

這些工作很好,直到我在我的功能日誌中看到一些超時。 從這一點來說,我的觸發功能都沒有實際做任何事情。在執行第一行代碼(它是一個context.log() -statement)以顯示執行時間之前,他們只是保持超時,即使是

LogOutput

什麼可能是這個原因嗎?

+0

你試過回收實例嗎? – 4c74356b41

+0

我試着重新啓動我的應用程序服務,但似乎沒有幫助.. – Schaemelhout

回答

1

在Azure門戶中檢查您的函數存儲帳戶,您可能會看到非常高的文件監視活動。

這可能是由於Azure文件之間的交互並需要較大的樹形結構。一旦需要模塊一次,函數將快速執行,因爲模塊被緩存,但這些超時可以將函數應用程序放入超時 - >重新啓動循環。

有很多關於此的討論,以及一個可能的改進(使用服務器端模塊上的webpack)here

其它可能性:的節點模塊如果可能

  • 移動到專用的而不是消耗計劃

    • 減少數目(它運行,其具有更好的性能不同的文件系統上)
    • 使用C#或F# ,它不受這些限制
  • +0

    「一旦模塊需要一次,功能將快速執行,因爲模塊緩存」,這個問題隨機發生,所以我會認爲我的模塊應該已經被緩存了?我確實看到我的存儲帳戶花了我很多錢,這是否也與'node_modules'有關?他們是否不斷重新加載我的模塊? – Schaemelhout

    +0

    是的。如果超時被擊中,azure功能主機將重新啓動,因爲它假定存在錯誤。主機重新啓動後,模塊必須重新加載(這可以發生在函數代碼更改,函數應用程序重新啓動等之後)。高速緩存由require調用中的節點進程本身完成(並且重新啓動會終止該進程)。 –

    +0

    我明白了......感謝您的見解!將我的功能轉移到專門的計劃很容易嗎? – Schaemelhout