工作管理員的 "分頁錯誤"

有關於C/C++的語法, 程式等
回覆文章
頭像
tim
文章: 1380
註冊時間: 2008年 11月 26日, 00:49

工作管理員的 "分頁錯誤"

文章 tim »

我這邊有幾個程式 跑過一陣子後 發現 "分頁錯誤" 的值非常高 ,
懷疑程式有問題.

但由於 工作管理員的 "分頁錯誤" 值 , 我們大概都不清楚他的意思 ,
網路上也找不到說明的資料 ,

後來我到微軟的討論區請教 得到以下寶貴訊息

我們都知道 , 程式在跑的時候都需要用到記憶體 ,
而記憶體大概分為實體記憶體 以及虛擬記憶體
虛擬記憶體, 大部分就是從硬碟來的 .
實體記憶體, 大部分就是 RAM .

分頁錯誤的意思就是 當一個程式在運作的時候 ,
OS 發現他所使用的記憶體位址不在實體記憶體裡面 ,
這時 OS 要把他使用的虛擬記憶體先搬移到 實體記憶體中以便程式執行 ,
此時就會發生一個 page faults (分頁錯誤)

如果 OS 在搬移的過程找不到 相對應的訊息 (也就是搬移失敗)
就會發生 Invalid Page Faults 的錯誤訊息 .

從這樣的行為 , 我推測 程式在執行的時候 , 都必須要在實體的記憶體中執行
虛擬記憶體只提供存放空間 , OS 會自動在這中間做搬移 , 以模擬到虛擬記憶體
就像實體記憶體一樣 也可以用來執行程式.

於是當搬移的行為多的時候 , 這就會影響效能 (搬的越多 程式效能越差)
, 由於 page faults 是一個 counter , 程式跑久值就會越來越大 ,
所以要觀察這個數值是去看 他單位時間的變化量
, 我問到的正常值是 1000 /sec , 也就是說如果一程式的 page faults 成長大於每秒鐘 1000,
此時我們可以懷疑 兩種情況 1. RAM 不夠了 2. 程式有問題
大部分的問題都是 RAM 不夠 , 而 RAM 不夠 也有兩種情形
1. 機器的 RAM 裝太少了 . 2. 電腦上的程式同時太多在跑了.

這個數據可以很精確的看出 , 程式 與記憶體之間的使用配置情形 , 我們可以視這個數據
來增加 ram , 或是更換等級更高的電腦 , 或是不要同時跑太多程式..
或是把記憶體效能差的程式移到另一台電腦..等

"分頁錯誤" 並不在 工作管理員的預設項目中 , 可以用 "檢視" "選擇欄位" 選出來就有了.
另外 linux 也採用了這個觀念的技術 , 所以在 linux 上也可以看到分頁錯誤的相關訊息....

另外在 windows 有一個專門監控分析 page faults 的工具 叫作 pfmon ,
win2000:
http://www.microsoft.com/windows2000/te ... fmon-o.asp
這工具要看你的作業系統 , xp ..等 應該都可以在相關的 platform SDK 找到.

pfmon 可以分析 你的 page fault 是 hardware 還是 software 的問題 ,
可以依數據來調整程式或硬體 .
多多留言, 整理文章, 把經驗累積下來.....
回覆文章