效能瓶頸 MEM(swap)

2021-10-09 09:04:25 字數 2131 閱讀 5107

記憶體的效能瓶頸主要集中在兩點,乙個是記憶體不足,乙個是沒有充分的利用buffer/cache 。

這裡先介紹記憶體資源不足吧,畢竟應用程式不在 buffer/cache 裡讀寫的可能性不大,除非程式設計師自己設定直接i/o。否則至少也用的是快取i/o。當然一些動態鏈結庫也有自己的快取。

當有記憶體資源不足的時候,就會導致記憶體**,也就是釋放掉**的記憶體,比如buffer/cache 就屬於可**記憶體,他們在記憶體管理中叫做檔案頁(file-backend page)。大部分的檔案頁都可以直接**,以後有需要的時候,再從磁碟重新讀取,而那些已經被應用程式改過的,暫時還沒有寫入磁碟的資料,在記憶體管理中就叫髒頁。需要先寫到磁碟中,記憶體才能得到釋放。

當然這些髒頁一般通過2種方式寫入磁碟,

swap說白了就是把一塊磁碟空間或者乙個本地檔案當成記憶體使用。他包含了換入和換出的兩個過程。

也就是linux在記憶體**方面,做了兩件事。

什麼時候會定期記憶體**

定期**記憶體是由核心程序kswapd0來進行的。為了衡量記憶體的使用情況,kswapd0定義了三個閾值。

記憶體使用閾值

kswapd0是根據三個閾值進行記憶體的**操作的。

當剩餘記憶體小於頁底閾值就會觸發記憶體**,這個頁底閾值一般是通過核心選項 /proc/sys/vm/min_free_kbytes 設定。

$ cat /proc/sys/vm/min_free_kbytes 

67584

而剩餘的兩個閾值是由頁底閾值計算生成的。

pages_low = pages_min*5/4

pages_high = pages_min*3/2

在 /proc/zoneinfo中可以看到當前的三個閾值

$ cat /proc/zoneinfo 

node 0, zone dma

pages free 3840

min 69

low 86

high 103

scanned 0

spanned 4095

present 3997

managed 3976

nr_free_pages 3840

nr_alloc_batch 17

nr_inactive_anon 21

nr_active_anon 8

nr_inactive_file 13

nr_active_file 0

這裡的 min、low、high是記憶體頁數的閾值。free是剩餘記憶體頁數。

nr_zone_active_anon 和 nr_zone_inactive_anon ,分別是活躍和非活躍的匿名頁數。

nr_zone_active_file 和 nr_zone_inactive_file ,分別是活躍和非活躍的檔案頁數。

swap的**偏向

swap好嗎?

我的應用開始使用swap了?

既然swap會造成應用程式的效能問題,那麼怎麼知道我的某個具體的程式開始使用swap了?

$ pidstat -r 1

linux 3.10.0-957.el7.x86_64 (vm1.centos7.com) 2023年04月05日 _x86_64_ (2 cpu)

09時21分41秒 uid pid minflt/s majflt/s vsz rss %mem command

09時21分42秒 0 10445 353.85 0.00 108380 1168 0.03 pidstat

pidstat -r 表示的就是單個應用程式的記憶體使用情況。

majflt/s : 每秒主缺頁錯誤次數(major page faults),當虛擬記憶體位址對映成物理記憶體位址時,相應的page在swap中,這樣的page fault為major page fault,一般在記憶體使用緊張時產生。

也就是說如果某個應用程式有majflt/s 了,表示其開始使用swap了。其效能當然也會下降。

效能瓶頸概覽

關於效能瓶頸 請按照下列順序依次排查效能瓶頸使用如下方式判斷效能瓶頸 1 執行測試session 建立乙個測試session,從原始檔讀取資料並將資料寫入到目標檔案,以此判斷源和目標的效能瓶頸 2 分析效能相關細節 分析效能相關細節,如效能相關的計數器 3 分析執行緒統計資訊 分析執行緒統計資訊,以...

web效能瓶頸

1.網路,網路不好,其他做得再好,效能也是問題。其中包括自己的頻寬和請求的數量,頻寬是我們無法控制的。我們能做的是盡可能的減少不必要的請求。2.伺服器,乙個產品,伺服器是關鍵,所有的請求都要經過伺服器的處理。伺服器效能包括選擇的伺服器型別,如 iis,apache等,和伺服器的硬體。我們需要根據實際...

效能測試瓶頸分析

在效能測試過程中,瓶頸猶如功能測試的bug,瓶頸的分析猶如bug的定位。效能測試工程師好比醫生,看到病象,定位 效能瓶頸的定位更像庖丁解牛,層層解剖,最後定位問題之所在。下面分享乙個記憶體洩漏的瓶頸分析。病象 tps波動非常大 狂打超時日誌 偶爾有500錯誤。看到這個現象,其實說明不了什麼問題,就象...