自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux系統(tǒng)內(nèi)存問題排查的“套路”你掌握了嗎?

系統(tǒng) Linux
為了分析內(nèi)存的性能瓶頸,首先你要知道,怎樣衡量?jī)?nèi)存的性能,也就是性能指標(biāo)問題。這里又可以分別從整體內(nèi)存使用情況和進(jìn)程內(nèi)存使用情況去觀察內(nèi)存指標(biāo)。

最近一段時(shí)間有點(diǎn)忙,有段時(shí)間沒更新文章了,今天我們一起完成關(guān)于內(nèi)存模塊的最后一塊拼圖,如何高效的找到Linux系統(tǒng)內(nèi)存的問題。在前面我們講了內(nèi)存的基本概念、內(nèi)存映射、分配和回收、Page Cache、內(nèi)存泄露相關(guān)的案例分析。感興趣的朋友們,可以回過頭翻閱查看。

內(nèi)存性能指標(biāo)

為了分析內(nèi)存的性能瓶頸,首先你要知道,怎樣衡量?jī)?nèi)存的性能,也就是性能指標(biāo)問題。這里又可以分別從整體內(nèi)存使用情況和進(jìn)程內(nèi)存使用情況去觀察內(nèi)存指標(biāo)。

系統(tǒng)內(nèi)存使用

Linux系統(tǒng)free命令輸出

  • Used&Free:已用內(nèi)存和剩余內(nèi)存很容易理解,就是已經(jīng)使用和還未使用的內(nèi)存。
  • Shared:共享內(nèi)存是通過 tmpfs 實(shí)現(xiàn)的,所以它的大小也就是 tmpfs 使用的內(nèi)存大小。tmpfs 其實(shí)也是一種特殊的緩存
  • Available:可用內(nèi)存是新進(jìn)程可以使用的最大內(nèi)存,它包括剩余內(nèi)存和可回收緩存
  • Buff緩沖區(qū)是對(duì)原始磁盤塊的臨時(shí)存儲(chǔ),用來緩存將要寫入磁盤的數(shù)據(jù)。這樣,內(nèi)核就可以把分散的寫集中起來,統(tǒng)一優(yōu)化磁盤寫入。
  • Cache一部分是磁盤讀取文件的頁緩存,用來緩存從磁盤讀取的數(shù)據(jù),可以加快以后再次訪問的速度。另一部分,則是 Slab 分配器中的可回收內(nèi)存。

進(jìn)程內(nèi)存使用

  • VIRT、VSZ虛擬內(nèi)存,包括了進(jìn)程代碼段、數(shù)據(jù)段、共享內(nèi)存、已經(jīng)申請(qǐng)的堆內(nèi)存和已經(jīng)換出的內(nèi)存等。這里要注意,已經(jīng)申請(qǐng)的內(nèi)存,即使還沒有分配物理內(nèi)存,也算作虛擬內(nèi)存。
  • RES、RSS常駐內(nèi)存是進(jìn)程實(shí)際使用的物理內(nèi)存,不過,它不包括Swap和共享內(nèi)存。
  • SHR:共享內(nèi)存,既包括與其他進(jìn)程共同使用的真實(shí)的共享內(nèi)存,還包括了加載的動(dòng)態(tài)鏈接庫(kù)以及程序的代碼段等
  • Swap:是指通過 Swap 換出到磁盤的內(nèi)存。
  • 缺頁異常:
  • Majflt主缺頁異常。需要磁盤I/O 介入(比如 Swap)來分配內(nèi)存。主缺頁異常升高,那么內(nèi)存訪問也會(huì)慢很多。
  • Minflt:次缺頁異常。直接從物理內(nèi)存中分配內(nèi)存。

這些內(nèi)存的性能指標(biāo)都需要我們熟記并且會(huì)用。我把它們匯總成了一個(gè)思維導(dǎo)圖供大家參考。

內(nèi)存性能工具

我們知道了內(nèi)存的性能指標(biāo)后,我們還需要學(xué)會(huì)根據(jù)性能指標(biāo)找工具(性能觀察命令),下面表格整理了內(nèi)存性能指標(biāo)和工具的關(guān)系。

分析內(nèi)存性能瓶頸的排查套路

快速定位內(nèi)存問題,可以先從整體內(nèi)存使用情況入手,在觀察進(jìn)程的內(nèi)容使用情況,找出可疑進(jìn)程后,在進(jìn)一步分析進(jìn)程的內(nèi)存地址空間分布等等;在使用性能工具使用優(yōu)先選覆蓋面大的工具,這樣可以同時(shí)觀察到多個(gè)指標(biāo)。具體的步驟可以分成以下幾步:

  • 先用 free 和 top,查看系統(tǒng)整體的內(nèi)存使用情況。
  • 再用 vmstat 和 pidstat,查看一段時(shí)間的趨勢(shì),從而判斷出內(nèi)存問題的類型。
  • 最后進(jìn)行詳細(xì)分析:
  • pidstat觀測(cè)到可疑進(jìn)程,可以繼續(xù)使用pmap觀察進(jìn)程內(nèi)存地址分配情況。
  • 可以使用內(nèi)存分配分析工具memleak ,檢查是否存在內(nèi)存泄漏。

系統(tǒng)內(nèi)存優(yōu)化建議

  • 禁用Swap:如果必須開啟 Swap,降低 swappiness 的值,減少內(nèi)存回收時(shí) Swap 的使用傾向。
  • 減少內(nèi)存的動(dòng)態(tài)分配。比如,可以使用內(nèi)存池、大頁(HugePage)等。
  • 盡量使用緩存和緩沖區(qū)來訪問數(shù)據(jù)。比如,可以使用堆棧明確聲明內(nèi)存空間,來存儲(chǔ)需要緩存的數(shù)據(jù);或者用 Redis 這類的外部緩存組件,優(yōu)化數(shù)據(jù)的訪問。
  • 使用 cgroups 等方式限制進(jìn)程的內(nèi)存使用情況。這樣,可以確保系統(tǒng)內(nèi)存不會(huì)被異常進(jìn)程耗盡。通過 /proc/pid/oom_adj ,調(diào)整核心應(yīng)用的 oom_score。這樣,可以保證即使內(nèi)存緊張,核心應(yīng)用也不會(huì)被 OOM 殺死。
  • 根據(jù)需要優(yōu)化Linux內(nèi)核中關(guān)于內(nèi)存相關(guān)參數(shù),一些核心參數(shù)如下。
  • vm.swappiness。
  • vm.overcommit_memory。
  • vm.dirty_ratio、vm.dirty_background_ratio。
  • vm.min_free_kbytes。
  • vm.drop_caches。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2024-09-30 09:05:46

Linux網(wǎng)絡(luò)延遲

2022-11-09 07:20:43

調(diào)用日志502報(bào)錯(cuò)nginx

2023-10-23 08:12:34

并發(fā)問題有鎖和無鎖

2020-07-07 08:02:33

動(dòng)態(tài)規(guī)劃緩存枚舉

2019-06-10 13:50:08

Linux命令shell

2010-08-04 15:01:00

2014-02-27 13:30:26

CacheLinux系統(tǒng)內(nèi)存不足

2024-08-13 08:30:13

2013-03-27 10:32:22

2023-12-05 07:12:39

優(yōu)化排查性能

2018-06-21 11:03:54

shelllinux命令

2021-06-28 08:00:00

Python開發(fā)編程語言

2018-11-06 12:12:00

MySQL內(nèi)存排查

2020-02-03 13:55:49

技術(shù)研發(fā)指標(biāo)

2023-08-08 08:08:42

PythonWeb開發(fā)

2020-05-11 09:48:28

網(wǎng)絡(luò)故障路由器Linux

2019-11-20 10:38:36

路由路由協(xié)議路由器

2023-06-15 10:21:48

CSS前端

2022-07-26 08:03:27

Kubernetes節(jié)點(diǎn)磁盤

2022-10-13 08:02:13

死鎖運(yùn)算系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)