最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nodejs服務(wù)內(nèi)存泄露排查過程和優(yōu)化方法

 更新時間:2023年11月14日 14:52:06   作者:莫大h  
在開發(fā)和部署Node.js應(yīng)用程序時,內(nèi)存泄露是一個常見的挑戰(zhàn),本文將探討如何對于一個陌生項目進行內(nèi)存排查和優(yōu)化的方法,文章通過圖文介紹的非常詳細,需要的朋友可以參考下

背景

首先項目最初不是自己寫的,項目接手一段時間后才發(fā)現(xiàn)了問題,往往這種情況不能第一時間定位到具體代碼,需要根據(jù)用戶反饋以及工具排查。

剛開始用戶反饋接口卡頓,影響正常使用,我這邊查看日志發(fā)現(xiàn)沒有異常報錯,就嘗試重啟應(yīng)用,重啟后解決問題。

分析問題

我嘗試了以下步驟

  • 由于是代理服務(wù),我以為是請求過多,導(dǎo)致服務(wù)日志寫入過多導(dǎo)致,所以我只保留了嚴(yán)重錯誤日志,運行一段時間后發(fā)現(xiàn)無效
  • 由于前不久做過一次容器化部署,程序跑一段時間后會生成 core.42 文件,文件很大,有30G, 該文件是進程崩潰的內(nèi)存和寄存器的快照。我又嘗試不使用 docker 部署,運行一段時間后發(fā)現(xiàn)無效
  • 使用pm2 list 發(fā)現(xiàn)進程的內(nèi)存使用異常高,高達3.4GB,這才發(fā)覺可能是內(nèi)存泄露導(dǎo)致程序崩潰
pm2 list
┌────┬─────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name    │ namespace   │ version │ mode    │ pid      │ uptime │ ?    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼─────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ erra    │ default     │ 0.6.53  │ cluster │ 30696    │ 2h     │ 23   │ online    │ 0%       │ 3.4gb    │ root     │ disabled │
└────┴─────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

內(nèi)存泄漏分析

  • 利用Node.js內(nèi)置工具: Node.js提供了一些內(nèi)置工具來分析內(nèi)存使用情況,如--inspect參數(shù)。啟動Node.js應(yīng)用程序時加上該參數(shù),并使用Chrome開發(fā)者工具的Memory選項來觀察內(nèi)存使用情況。
node --inspect  --heapsnapshot-signal=SIGUSR2 ./bin/erra.js start
  • 打開 chrome://inspect/#devices

  • 啟動項目后,先在Menory中創(chuàng)建一個初始的快照

  • 然后進行多次操作(根據(jù)項目流程操作),在創(chuàng)建一個快照進行內(nèi)存對比,發(fā)現(xiàn)內(nèi)存翻倍的增加

  • 通過 Retained Size 排序,展開頭幾項看看,展開到能看到具體對象或者方法為止

  • 通過展開(closure)也可以定位到文件,到此基本可以確定是 proxy-server.js文 件 與proxyReq 對象相關(guān)出現(xiàn)了內(nèi)存泄露,由于我是本地調(diào)試,所以可以通過點擊文件名跳轉(zhuǎn)到源碼處

解決問題

通過代碼發(fā)現(xiàn),確實存在漏洞, 這種情況屬于事件監(jiān)聽器未移除 (由于初版代碼不是自己寫的,不能一眼發(fā)現(xiàn)此處有問題。)

雖然這里可以改成監(jiān)聽事件處理后釋放就可以解決,但是其實這里只需監(jiān)聽一次就行避免頻繁監(jiān)聽并移除

驗證結(jié)果

為保證是否還存在其他問題,需要重復(fù)上面的步驟,重新驗證是否還存在內(nèi)存泄露。經(jīng)過多次模擬操作之后,內(nèi)存穩(wěn)定在 16.6M 左右,確定沒問題后在發(fā)布

結(jié)論

由于代碼可以在本地復(fù)現(xiàn),所以排查過程還是比較順利的。如果是盲排重點從:定時器未清除、事件監(jiān)聽器未移除、未釋放資源 方向入手。

以上就是nodejs服務(wù)內(nèi)存泄露排查過程和優(yōu)化方法的詳細內(nèi)容,更多關(guān)于nodejs服務(wù)內(nèi)存泄露的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Nodejs中session的簡單使用及通過session實現(xiàn)身份驗證的方法

    Nodejs中session的簡單使用及通過session實現(xiàn)身份驗證的方法

    session的本質(zhì)使用cookie來實現(xiàn)。本文給大家介紹Nodejs中session的簡單使用及通過session實現(xiàn)身份驗證的方法,對node.js session相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • node.js安裝及環(huán)境配置超詳細步驟講解(Windows系統(tǒng)安裝包方式)

    node.js安裝及環(huán)境配置超詳細步驟講解(Windows系統(tǒng)安裝包方式)

    這篇文章主要介紹了node.js安裝及環(huán)境配置超詳細教程(Windows系統(tǒng)安裝包方式),本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • 在Ubuntu系統(tǒng)上安裝Node.JS的教程

    在Ubuntu系統(tǒng)上安裝Node.JS的教程

    這篇文章主要介紹了在Ubuntu系統(tǒng)上安裝Node.JS的教程,Node.JS的高性能V8解釋器運行及異步機制為其帶來了巨大的人氣,需要的朋友可以參考下
    2015-10-10
  • NodeJS學(xué)習(xí)筆記之MongoDB模塊

    NodeJS學(xué)習(xí)筆記之MongoDB模塊

    nodejs是個強大的平臺,有基本功能,而且可以掛很多模塊。我們現(xiàn)在需要和mongodb連接的驅(qū)動,就類似比如mysql的java驅(qū)動一樣。nodejs有好幾個mongodb的第三方驅(qū)動。和jdbc不一樣,沒有標(biāo)準(zhǔn)。所以需要到驅(qū)動的網(wǎng)站上去了解學(xué)習(xí)怎么使用它訪問mongodb。
    2015-01-01
  • Node.js重新刷新session過期時間的方法

    Node.js重新刷新session過期時間的方法

    在Node.js中,我們通常使用express-session這個包來使用和管理session,保存服務(wù)端和客戶端瀏覽器之間的會話狀態(tài)。那如何才能實現(xiàn)當(dāng)用戶刷新當(dāng)前頁面或者點擊頁面上的按鈕時重新刷新session的過期時間呢,接下來通過本文一起學(xué)習(xí)吧
    2016-02-02
  • node.js微信公眾平臺開發(fā)教程

    node.js微信公眾平臺開發(fā)教程

    這篇文章主要為大家分享了node.js微信公眾平臺開發(fā)教程,如何進行微信開發(fā),感興趣的小伙伴們可以參考一下
    2016-03-03
  • node.js中的path.basename方法使用說明

    node.js中的path.basename方法使用說明

    這篇文章主要介紹了node.js中的path.basename方法使用說明,本文介紹了path.basename的方法說明、語法、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 如何刪除所有node_modules和package-lock配置文件

    如何刪除所有node_modules和package-lock配置文件

    這篇文章主要介紹了如何刪除所有node_modules和package-lock配置文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Node.js開源應(yīng)用框架HapiJS介紹

    Node.js開源應(yīng)用框架HapiJS介紹

    這篇文章主要介紹了Node.js開源應(yīng)用框架HapiJS介紹,本文講解了HapiJS介紹、HapiJS安裝和項目配置和開發(fā)實例等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Node.js HTTP服務(wù)器中的文件、圖片上傳的方法

    Node.js HTTP服務(wù)器中的文件、圖片上傳的方法

    這篇文章主要介紹了Node.js HTTP服務(wù)器中的文件、圖片上傳的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

会昌县| 芷江| 梧州市| 怀远县| 柳河县| 永福县| 灵石县| 曲阜市| 西藏| 普陀区| 吴桥县| 鸡泽县| 河北省| 华容县| 英德市| 瑞安市| 汕头市| 永春县| 海安县| 信丰县| 盐池县| 英超| 盐津县| 东辽县| 新巴尔虎左旗| 新泰市| 沿河| 西安市| 洛阳市| 辽阳县| 邵阳市| 岢岚县| 驻马店市| 黔南| 望奎县| 金昌市| 青阳县| 镇雄县| 马公市| 沁水县| 浑源县|