我有一個運行 API 的 lambda,因此 lambda 的每個實體都會啟動一個燒瓶服務器,該服務器一直運行到 lambda 被殺死。當收到另一個請求時,會創建一個新的 lambda 實體——再次啟動燒瓶服務器。
查看來自我的一個 lambda 的日志,日志流運行了 15 分鐘以上(在行程失敗前約 20 分鐘)。超時設定為 5 分 0 秒。
據我了解,每個實體生成一個長流,達到超時后殺死一個實體,并且不能設定超過15分鐘的超時。
如何在同一日志流中擁有跨越約 20 分鐘的日志?超時是 lambda 在被殺死之前可以在不生成日志的情況下運行的時間量嗎?有沒有辦法限制 lambda 實體在實體終止之前運行的時間?
初始日志時間戳:2022-02-20T11:05:05.970-07:00
最終日志時間戳:2022-02-20T11:25:29.895-07:00
Lambda 超時:5min0sec
START、END、REPORT 陳述句——每個日志流有多個:
2022-02-20T11:05:06.509-07:00
START RequestId: 6807306e-f05f-425b-bd75-985b42794eaa
2022-02-20T11:05:07.203-07:00
END RequestId: 6807306e-f05f-425b-bd75-985b42794eaa
2022-02-20T11:05:07.203-07:00
REPORT RequestId: 6807306e-f05f-425b-bd75-985b42794eaa Duration: 691.58 ms Billed Duration: 2856 ms Memory Size: 128 MB Max Memory Used: 119 MB Init Duration: 2163.68 ms
XRAY TraceId: 1-621282cf-00745c0f030b1d810fad9710 SegmentId: 3effe66c64dc69d4 Sampled: true
2022-02-20T11:05:07.767-07:00
START RequestId: 8c724d99-8640-4634-88b9-1efb774c54a9 Version: $LATEST
2022-02-20T11:05:07.845-07:00
END RequestId: 8c724d99-8640-4634-88b9-1efb774c54a9
2022-02-20T11:05:07.845-07:00
REPORT RequestId: 8c724d99-8640-4634-88b9-1efb774c54a9 Duration: 76.09 ms Billed Duration: 77 ms Memory Size: 128 MB Max Memory Used: 119 MB
XRAY TraceId: 1-621282d3-55a51f9d69552d8905b959b7 SegmentId: 47dc3b533278679f Sampled: true
2022-02-20T11:05:08.182-07:00
START RequestId: ee69e296-af07-49a2-8264-ed9758d03992 Version: $LATEST
2022-02-20T11:05:08.263-07:00
END RequestId: ee69e296-af07-49a2-8264-ed9758d03992
2022-02-20T11:05:08.263-07:00
REPORT RequestId: ee69e296-af07-49a2-8264-ed9758d03992 Duration: 78.26 ms Billed Duration: 79 ms Memory Size: 128 MB Max Memory Used: 119 MB
XRAY TraceId: 1-621282d4-7c8f7ea75ead3f7c166a44a6 SegmentId: 2dcaed42621dbebd Sampled: true
...最終失敗的開始/結束。
2022-02-20T11:25:29.749-07:00
START RequestId: 5521e958-0ffb-4de7-b028-953a21ac2ac9 Version: $LATEST
2022-02-20T11:25:29.895-07:00
END RequestId: 5521e958-0ffb-4de7-b028-953a21ac2ac9
2022-02-20T11:25:29.895-07:00
REPORT RequestId: 5521e958-0ffb-4de7-b028-953a21ac2ac9 Duration: 142.60 ms Billed Duration: 143 ms Memory Size: 128 MB Max Memory Used: 119 MB
XRAY TraceId: 1-62128799-19bd91ab324cf0271e964434 SegmentId: 554bd90b4a8ba1c5 Sampled: true
uj5u.com熱心網友回復:
我認為你在這里的誤解是When another request is received, a new instance of the lambda is created- starting the flask server again.這不一定是真的。根據檔案:
第一次呼叫函式時,AWS Lambda 會創建函式實體并運行其處理程式方法來處理事件。當函式回傳回應時,它會保持活動狀態并等待處理其他事件。
這很有意義,尤其是對于 http api。如果一個新的 lambda 實體必須啟動每個請求,資料庫連接、快取層等都必須重新建立。這不會是可擴展的或高性能的。因此,AWS 通過保持 lambda 實體正常運行來幫您一個忙,即使您只需為它實際作業的時間付費。
至于超時問題,超時是 lambda 完成單個作業的最長時間,在您的情況下回應 API 請求。不是 lambda 將保持活躍多長時間。
uj5u.com熱心網友回復:
單個請求將在 15 分鐘后終止,但處理該請求的實體會停留 4.5 小時。(至少上次我檢查過)并且它將每個請求寫入同一個日志流中。
如果另一個請求進來,當 lambda 實體“活動”且不忙時,同一個實體將被重用,并將寫入與前一個呼叫相同的日志流中。
只有當沒有 lambda 實體可以根據請求自由作業時,才會啟動一個新實體。
這就是為什么“熱身”需要一些設計不佳且啟動時間長的 lambdas 的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/431306.html
上一篇:如果需要,增加vCPUS/RAM
