poolmon.exe 使用說明: http://support.microsoft.com/kb/177415/en-us/
平台:window 2003 r2 sp1
故障描述一:客戶反映資料庫伺服器每隔幾天時間,客戶端就無法連線,提示監聽程式無法解析專有伺服器程序。
處理步驟一:首先判斷是否是由於
oracle
的sga
分配過大導致使用者無法建立新的連線,檢查作業系統得
/3gb
引數、oracle
的sga
引數和客戶端連線數,可以初步排除不是由於
sga分配過大導致的使用者無法建立新的連線
故障描述二:在跟蹤案例細節時,客戶反映故障發生時有時任務管理器都無法開啟
處理步驟二:任務管理器無法開啟可能是由於病毒引起,但是資料庫伺服器從來不會安裝執行新的軟體,而且也安裝了瑞星防毒軟體,應該可以排除病毒原因,繼續檢查系統核心記憶體,發現系統核心未分頁記憶體數在故障時達到
120m
,而且啟動時僅
30m左右,未分頁記憶體
120m
左右已經到達作業系統的限制了,因此可以斷定
oracle
無法建立新的連線和任務管理器無法開啟的原因都在於此。
處理步驟三:已經確定由於是無法分配未分頁記憶體導致的故障,下一步就應該查詢究竟是什麼程式持續占用了系統未分頁記憶體。這裡使用
windows
的poolmon
工具來進行監視。
執行poolmon
發現三個可以的
tag分別是
ddk,
mmcm
和r100
,這三個
tag都占用了較大的未分頁記憶體(
10m)。重新啟動伺服器後,再次執行
poolmon
觀察到mmcm
和r100
在啟動時就占用了較大的未分頁記憶體,與故障時相比變化不大,可以排除。
ddk在啟動時時僅占用
600k
左右的記憶體,可以斷定
ddk發生了記憶體洩漏。
處理步驟四:確認
ddk究竟是什麼咚咚,這裡借鑑了網上同仁的處理經驗,在此表示感謝。 檢查
pooltag.txt
看到ddk- - default for driver allocated memory (user's of ntddk.h)
說明ddk
是由驅動程式使用
搜尋使用
ddk使用的驅動程式
(再次感謝網上同仁提供的思路
) findstr /s /m /l "ddk" c:/windows/system32/drivers/*.sys
返回四個結果
basetdi.sysipvw32.sys storport.sys wdf01000.sys
其中後三個是
windows
自身的驅動,
basetdi.sys
為瑞星驅動
故障描述三:
windows
自身驅動可能性極小因此可以暫時排除,重點放在瑞星驅動上。有了目標後再次跟蹤,觀察到在晚上當系統空閒時未分頁空間的大小基本不會增長,而白天系統繁忙時未分頁空間的大小有著明顯的增長。
處理步驟五:聯想到和瑞星驅動相關的,乙個是本地
i/o被瑞星影響,乙個是網路
io被瑞星影響,而這些都和瑞星實時監控相關。於是停止瑞星實時監控,執行
poolmon
觀察到ddk
的值不再增長,在此確認是由於瑞星引起的記憶體洩漏。
結果:由於伺服器上極少去做操作,執行瑞星實時監控的必要性不大,因此建議使用者先停止瑞星實時監控以解決這個問題,然後聯絡瑞星公司處理
工具poolmon.exe
說明(xp
下可以用
memsnap
工具) 1.
使能tag
模式 在使用
poolmon
之前,你必須使能
tag模式並重新啟動伺服器。池
tag的特性是將收集和計算的資訊通過分配記憶體的
tag值進行排序。
注:使用
windows 2003
伺服器不需要使能
tag,它是
windows 2003
的預設值
方法一:編輯登錄檔
在hkey_local_machine/system/currentcontrolset/control/session manager
下增加鍵
globalflag
值0x00000400
(十六進製制);
重新啟動計算機。
方法二:使用
gflags.exe
工具 執行
gflags.exe
工具選擇
enable pool tagging
2.使用
poolmon.exe
工具收集資訊
使用以下步驟複製和儲存
tag資訊,以間隔
15分鐘的方式統計
2小時,新增資訊到文字中。
1.執行
windows
工具包中的程式
poolmon.exe
2.按p顯示未分頁池
3.按b按位元組大小排序
4.每十五分鐘儲存一次螢幕內容
在資料收集結束後,分析
tag資訊看看是否存在分配尺寸持續增長
附:poolmon.exe
命令說明:
語法:poolmon [itag][xtag][swtich]
itag
:列出匹配
tag名的池,可以使用萬用字元*和
? xtag
:列出不包含
tag名的池,可以使用萬用字元*和
? swtich:
p- 切換顯示未分頁或顯示已分頁或兩者都顯示
l- 切換是否高亮顯示值有變化的行
e- 在資料的底部顯示池合計值
h/? - 幫助
q- 退出
t- 按
tag名排序 a-
按分配尺寸
排序 f
- 按空閒尺寸
排序 d
- 按分配和空閒的差
排序 b
- 按使用位元組
排序 m -
按分配位元組排序
列說明:
tag:池分配的4位元組
tag type
:分頁或未分頁
allocs
:所有分配的計數
():分配列中與上次更新的差異
frees
:所有空閒的計數
():空閒列中與上次更新的差異
diff
:(allocs - frees
) bytes
:池消耗的合計位元組數
():位元組列中與上次更新的差異
per alloc
:(bytes/diff
)
查詢乙個流
2018 08 09 星期四 查詢乙個流 操縱當前的流位置往往會很有用.或許是應用程式正在讀取乙個基於記錄的複雜檔案.需要來回跳躍 亦或是流需要被重新設成檔案位置零.無論是何種情況,標準i o鏈結庫提供了一系列功能相當於lseek 系統呼叫的介面,例如,fseek 函式 最常見的標準i o查詢介面 ...
用C語言寫乙個記憶體管理程式
用c語言寫乙個記憶體管理程式 這個程式有2個系統呼叫和3種記憶體分配策略。並計算效能 平均記憶體利用率,尋找孔 hole 次數 系統呼叫 system calls 1 void mm request int n 這個系統呼叫是請求乙個連續的n位元組的記憶體塊 block 如果請求成功,返回乙個指標到...
用乙個屬性儲存乙個動態陣列
用乙個屬性儲存乙個動態陣列,可是弄了半天就是存不下來,象imagelist,等可以動態新增的控制項是如何實現儲存的,用動態陣列能實現嗎?請高手指點 如果不需要在設計時賦值,可以用tlist,tstringlist,tobjectlist儲存,然後宣告屬性及訪問方法,以字串為例 private fli...