日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【读书笔记】《深入浅出nodejs》第五章 内存控制

發布時間:2023/12/2 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【读书笔记】《深入浅出nodejs》第五章 内存控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

海量請求+長時間運行 -> 內存控制 -> 一切資源高效循環利用

1. V8的垃圾回收機制與內存限制

  在Node中通過JavaScript使用內存時,只能使用部分內存(64位系統下約1.4GB,32位系統下約為0.7GB)。

  在V8中,所有的JavaScript對象都是通過堆來進行分配的,當申請的堆空閑內存不夠分配新的對象,將繼續申請堆內存,直到堆得大小超過V8的限制為止。

  為什么V8要限制堆得大小?

    -> (1)V8最初為瀏覽器設計,不太可能遇到用大量內存的場景。

    -> (2)V8的垃圾回收機制限制。(1.5GB的垃圾回收堆內存,需要大約50毫秒以上,這使得應用性能和響應能力會直線下降)

  突破V8限制:

    -> $node --max-old-space-size = 1700 (單位MB) or?

    -> $node --max-new-space-size =1024 (單位KB)

  V8的垃圾回收機制 ---- 分代式垃圾回收機制

  查看垃圾回收機制 ---- $node --trace_gc -e "var a = [];for (var i=0; i<1000000; i++) a.push(new Array(100));" > gc.log

2. 高效使用內存

  (1)了解作用域

  (2)了解閉包

  無法立即回收的內存有:

    ->閉包

    ->全局變量引用

  因此,要小心此類變量的無限制添加

3. 內存指標

  --會存在一些我們認為會回收但是卻沒有被回收的對象,這會導致內存占用無限增長。一旦增長達到V8內存限制,將會得到內存溢出錯誤,進而導致進程退出。

  (1)查看內存使用情況 -> $node >process.memoryUsage() {

      {

       rss (resident set size 進程的常駐內存部分):132852672, (除此外,內存其余部分在交換區(swap)或文件系統(filesystem)中)

       ? heapTotal(堆中總共申請的內存量) :6131200,

       ? heapUsed(目前堆中使用中的內存量):2757120,

      }

  (2)查看系統內存占用

      -> $node >os.totalmem() ?“系統的總內存”

      -> $node >os.freemem() “系統的閑置內存”

  (3)堆外內存

  受V8的垃圾回收限制的主要是V8的堆內存。

4. 內存泄漏

  造成內存泄漏的原因:

    (1)緩存

    (2)隊列消費不及時

    (3)作用域未釋放

5. 內存泄漏排查

  使用常見工具:

    (1)node-heapdump

    (2)node-memwatch

6. 大內存應用

?

轉載于:https://www.cnblogs.com/libinfs/p/5922447.html

總結

以上是生活随笔為你收集整理的【读书笔记】《深入浅出nodejs》第五章 内存控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。