再見,本地環境!騰訊雲全球首發:Serverless 在線遠程調試

在線調試是雲函數爲了解決用戶在本地搭建調試環境複雜,雲上環境不便於定位等問題推出的功能。

雲上的各種服務,在本地無法完全模擬,程序員大都遇到過本地和遠程環境運行結果不一致的情形,追查起來費時費力,不僅效率低下,也造成非常鬱悶的工作體驗。

所以,能否直接在遠程環境中完成全部的開發流程,是提升開發體驗的最直接手段,然而在其他問題都解決後,遠程調試功能是最後的一公里。

本篇文章將以一段內存泄漏的代碼爲例,給大家展示如何使用雲函數在線調試功能定位和解決問題。Node10 及以上版本的 runtime,使用 Chrome 瀏覽器打開雲函數控制檯,在函數代碼頁即可看到在線調試的入口。

開啓調試模式

使用Chrome瀏覽器打開函數代碼編輯頁,可以看到在【遠程調試】頁。爲保障調試的體驗,開啓調試模式將修改函數的部分配置,包括函數進入單實例模式、函數超時時間修改爲900秒等。開啓前請務必確認這些調整。

待加載完成後,頁面將自動展示入口文件。

找不到需要的文件?

使用快捷鍵 Cmd + P(Mac)或 Ctrl + P(Windows)可以打開所需要的文件。但大家可能會發現,剛開啓調試模式時,打開文件的列表中找不到所需要的文件。
這是因爲對於動態腳本語言來說,調試器不會加載所有的內容,只會加載執行過的文件。我們先點擊測試,讓函數運行一次。在運行一次後,我們就可以打開所需要的文件了。

設置斷點

在代碼前點擊即可設置斷點,在右上角的工具中可以進行繼續執行、跨步執行、單步執行等操作,也可以靈活地啓動或禁用斷點。

內存泄漏排查 - 內存快照

這部分介紹如何使用內存快照功能排查內存泄漏的問題。內存泄漏的排查方法大致爲:找準內存泄漏的時機,在泄漏的前後對內存進行快照,通過對比快照的內容判斷內存泄漏的問題點。

首先,我們將調試的窗口切換到 Memory 頁面,點擊左上方的實心圓形按鈕捕捉內存快照。

這樣,我們就有了運行前的內存快照。現在我們執行存在內存泄漏的代碼。這行代碼有一個從未清理的全局緩存,隨着調用的增加,越來越佔內存。

隨後,我們進行第二次內存快照,打開對比頁面,通過對Delta值的分析,可以發現 concatenated string 這個部分增加了很多,很有可能有問題。

打開以後,便可以發現內存中多存儲了很多“recording time”的數據。

這些重複性的數據也就意味着代碼中出現了內存泄漏,在代碼中找到相關內容,進行調整,解決內存泄漏的問題。

除了雲函數的控制檯,也可以使用 Serverless Framework Dev 模式開啓在線調試的功能。

One More Thing

立即體驗騰訊雲 Serverless Demo,領取 Serverless 新用戶禮包 👉 serverless/start

歡迎訪問:Serverless 中文網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章