歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

關於Linux性能監控之Memory篇

我們首先了解虛擬內存和物理內存:虛擬內存就是采用硬盤來對物理內存進行擴展,將暫時不用的內存頁寫到硬盤上而騰出更多的物理內存讓有需要的進程來用。當這些內存頁需pi要用的時候在從 硬盤讀回內存。這一切對於用戶來說是透明的。通常在Linux系統說,虛擬內存就是swap分區。在X86系統上虛擬內存被分為大小為4K的頁。

  Memory篇

  Linux性能監控每一個進程啟動時都會向系統申請虛擬內存(VSZ),內核同意或者拒就請求。當程序真正用到內存時,系統就它映射到物理內存。RSS表示程序所占的物理內存的大小。用ps命令我們可以看到進程占用的VSZ和RSS。

  # ps –aux

  USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

  daemon 2177 0.0 0.2 3352 648 ? Ss 23:03 0:00 /usr/sbin/atd

  dbus 2196 0.0 0.5 13180 1320 ? Ssl 23:03 0:00 dbus-daemon-1 --sys

  root 2210 0.0 0.4 2740 1044 ? Ss 23:03 0:00 cups-config-daemon

  root 2221 0.3 1.5 6108 4036 ? Ss 23:03 0:02 hald

  root 2231 0.0 0.1 2464 408 tty1 Ss+ 23:03 0:00 /sbin/mingetty tty1

  內核會定期將內存中的數據同步到硬盤,這個過程叫做Memory Paging。同時內核也要負責回收不用的內存,將他們分給其他需要的進程。PFRA算法(Page Frame reclaim algorithm)負責回收空閒的內存。算法根據內存頁的類型來決定要釋放的內存頁。有下列4種類型:

  1. Unreclaimable – 鎖定的,內核保留的頁面;

  2. Swappable – 匿名的內存頁;

  3. Syncable – 通過硬盤文件備份的內存頁;

  4. Discardable – 靜態頁和被丟棄的頁。

  除了第一種(Unreclaimable)之外其余的都可以被PFRA進行回收。與之相關的進程是kswapd。在kswapd中,有2個閥值, pages_hige和pages_low。當空閒內存頁的數量低於pages_low的時候,kswapd進程就會掃描內存並且每次釋放出32個 free pages,直到free page的數量到達pages_high。具體kswapd是如何回收內存的呢?有如下原則:

  1. 如果頁未經更改就將該頁放入空閒隊列;

  2. 如果頁已經更改並且是可備份回文件系統的,就理解將內存頁的內容寫回磁盤;

  3. 如果頁已經更改但是沒有任何磁盤上的備份,就將其寫入swap分區。

  # ps -ef | grep kswapd

  root 30 1 0 23:01 ? 00:00:00 [kswapd0]

  Linux性能監控在回收內存過程中還有兩個重要的方法,一是LMR(Low on memory reclaiming),另一個是OMK(Out of Memory Killer)。當分配內存失敗的時候LMR將會其作用,失敗的原因是kswapd不能提供足夠的空閒內存,這個時候LMR會每次釋放1024個垃圾頁知 道內存分配成功。當LMR不能快速釋放內存的時候,OMK就開始其作用,OMK會采用一個選擇算法來決定殺死某些進程。當選定進程時,就會發送信號 SIGKILL,這就會使內存立即被釋放。OMK選擇進程的方法如下:

  1. 進程占用大量的內存;

  2. 進程只會損失少量工作;

  3. 進程具有低的靜態優先級;

  4. 進程不屬於root用戶。

  Linux性能監控進程管理中另一個程序pdflush用於將內存中的內容和文件系統進行同步,比如說,當一個文件在內存中進行修改,pdflush負責將它寫回硬盤。

  # ps -ef | grep pdflush

  root 28 3 0 23:01 ? 00:00:00 [pdflush]

  root 29 3 0 23:01 ? 00:00:00 [pdflush]

  每當內存中的垃圾頁(dirty page)超過10%的時候,pdflush就會將這些頁面備份回硬盤。這個比率是可以調節的,通過參數vm.dirty_background_ratio。

  # sysctl -n vm.dirty_background_ratio

  Pdflush同PFRA是獨立運行的,當內核調用LMR時,LMR就觸發pdflush將垃圾頁寫回硬盤

Copyright © Linux教程網 All Rights Reserved