memcached學習——memcached的記憶體分配機制Slab Allocation、記憶體使用機制LRU、常用監控記錄(四)

来源:http://www.cnblogs.com/douJiangYouTiao888/archive/2017/01/10/6267569.html
-Advertisement-
Play Games

記憶體分配機制Slab Allocation 本文參考博客:https://my.oschina.net/bieber/blog/505458 Memcached的記憶體分配是以slabs為單位的,會根據初始chunk大小、增長因數、存儲數據的大小實際劃分出多個不同的slabs class,slab c ...


記憶體分配機制Slab Allocation

本文參考博客:https://my.oschina.net/bieber/blog/505458

Memcached的記憶體分配是以slabs為單位的,會根據初始chunk大小、增長因數、存儲數據的大小實際劃分出多個不同的slabs class,slab class中包含若幹個等大小的trunk和一個固定48byte的item信息。trunk是按頁存儲的,每一頁成為一個page(預設1M)。

1.slabs、slab class、page三者關係:

slabs = slab Class1 + slab Class2 + ... + Slab Classn

sbal Class = trunkSize * trunkCount * pageCount

trunkCount = pageSize / trunkSize

trunkSize = 實際數據大小 + 48byte(items數據結構)

例:假定每個slab Class的page都是1,則Slab Class1 = 88byte * trunkCount * 1 

 

啟動memcached時用-vv參數key輸出slabs信息,我們可以看到slabs的數據正是基於增長因數遞增的,但是數據會略有誤差~

2.實際數據的存儲會選擇合適的空間,比如我要存儲一個52byte的數據,實際需要100byte空間

52+ 48 = 100byte,會將數據存儲到112bytes所對應的slabls里,占用一個trunk

3.機制記憶體浪費問題:

 

優點:以前是記憶體分配機制是malloc~free,有記憶體碎片問題。此種機制解決了記憶體碎片問題

缺點:如果增長因數設置的不合適,可能造成空間的浪費問題。因為trunk的大小是固定的,只能是數據去適應trunk的大小(data <=trunk)

記憶體使用機制LRU

當memcached中的數據過期時,並非直接釋放掉相關記憶體,因為沒有響應的監聽來處理這件事。flush_all也一樣不會釋放記憶體,只是這些失效數據對用戶透明,用戶無法檢索到這些數據。Memcached已分配的記憶體不會進行回收操作,但是可以進行重利用操作。Memcached會優先使用已經過期的記憶體。當記憶體不足時,通過LRU機制將長期不使用的記憶體分配給新的記錄。

註意:啟動參數帶-M的不支持LRU操作

 

常用監控

telnet命令行,直接操作stats、stats slabs等命令進行分析
Memcached.php =》 php系統使用apache服務,圖形化界面
daemontools  =》 不知道是啥,先記下來
Nagios =》 checktcp  =》  不知道是個啥,先記下來

 

優化思路

1.合理的增長因數 => 控制記憶體的合理消耗
2.緩存更新機制 => 在快要失效的時候更新緩存


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 應用系統承載著大量的業務,隨之而來的是複雜的業務邏輯,在資料庫上的表現就是有著大量的不同種類的SQL語句。 SQL語句執行的快慢又與阻塞等待有著密不可分的原因。 系統慢可能有很多種原因,硬體資源不足,語句不優化,結構設計不合理,缺少必要的運維方式。所有的這些問題都可以在阻塞與等待中看出端倪,發 ...
  • Sqlserver 高併發和大數據存儲方案 隨著用戶的日益遞增,日活和峰值的暴漲,資料庫處理性能面臨著巨大的挑戰。下麵分享下對實際10萬+峰值的平臺的資料庫優化方案。與大家一起討論,互相學習提高! 案例:游戲平臺. 1、解決高併發 當客戶端連接數達到峰值的時候,服務端對連接的維護與處理這裡暫時不做討 ...
  • 今天使用SQLCMD導入到SQL SERVER資料庫中,看著數據文件都成功執行,但是意外發現有一個文件數據沒有成功導入,但執行不報錯,很容易導致問題被忽略。 使用存在問題的文件做下測試,從界面上看幾行腳本沒有任何問題: 4條INSERT語句“幾乎”一樣,區別在於最上面三行的部分文字是我從問題語句中粘 ...
  • 未來的BI市場是巨大的,涉及的觸角也會越來越多。就我觀察到的企業應用以及數據類產品中發現,很多企業通過數據介面引入了更多外部的數據來完善分析,也有部分企業私有化部署的BI產品在往雲BI方向發展。與R語言、數據挖掘類技術的集成,也將進一步提高數據分析的深度。 ...
  • 本文出處:http://www.cnblogs.com/wy123/p/6266724.html 最近在學習 WITH RECOMPILE和OPTION(RECOMPILE)在重編譯上的區別的時候,無意中發現表值函數和內聯表值函數編譯生成執行計劃的區別下文中將會對此問題展開討論。簡單地說就是:同樣一 ...
  • 下麵開始記錄一下,自己在Oracle或者PLSQL常用的幾個函數, 顯示效果如下圖所示: 與此同時,和他相同的函數是下麵的函數 顯示效果如下圖所示: ...
  • ...
  • 雙擊pkg文件安裝 一路向下,記得保存最後彈出框中的密碼(它是你mysql root賬號的密碼) 正常情況下,安裝成功。 此時只是安裝成功,但還需要額外的配置: (1) 進入系統偏好設置 (2) 點擊mysql 開啟mysql服務 此時我們在命令行輸入mysql -uroot -p命令會提示沒有co ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...