那些動作會增加 User Handle(User 物件)? |
答題得分者是:harpist
|
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
最近在測試一個程式,該程式需要開啟 12 個 TCP/IP 的通訊連線,在程式啟動時及執行中,
使用 Process Explorer 或工作管理員查看 User Handle 或 User 物件 此數值約 1,100 左右, 而在長時間執行,對於通訊程式多次關開(連線又斷線),有時會發生 User Handle 激增到 10,000 (爆掉不會再大的值),在激增的過程,UI 已當掉,CPU Loading 約 60-100%。 因通訊連線是用別人的元件,它有開執行緒作連線資料處理,在 UI 當掉時,連線還是可以 通,只是資料處理速度變慢了。因為是使用別人的元件,有一些狀況不一定能解決,當然 也有可能是我誤用元件。 在此只想請教各位,在程式中作什麼操作時,會增加 User Handle? User Handle 指的是什麼? P.S. 那爆掉的 10,000 個狀況發生時,把對方的通訊程式關掉,過約10多分鐘,User Handle 會降回原來的 1,100 左右,不過 CPU Loading 還是 60-100% 同時,程式幾乎都占用 Kernel Time,在使用 Process Explorer 中,可以發現,紅色(Kernel)的線已貼近綠色(Total)線,原UI 在 User Handle 降回正常後,可操作,但就是 CPU Loading 還是很高。
------
http://www.ViewMove.com |
harpist
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
以下是小弟的理解您參考看看
![]() Windows 系統提供的 API 主要還是對應到 Kernel、User、GDI 三個主要的子系統模組, 而當使用 Kernel32 API 所獲得的 handles 大多是所謂的 KERNEL handles,依此觀念即 有所謂 GDI handles、User handles。User 子系統主要負責實作所有視窗運作機制,所 以當您所謂 User Handle 爆掉時 UI 就沒反應了,大概可以從這個方向...資源用太多沒釋放 ![]() 另外單一行程限制的 GDI handles、User handles 數量在登錄檔內,預設值都是10000。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota
------
~§~迷時師渡,悟了自渡~§~ |
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
感謝 harpist 回覆
![]() 只要使用 user32.dll 內的 API 所建立的 Handle 就會使 User Handle 增加囉? 所以: Kernel -> Handle 控制碼 User -> User Handle/Object USER 物件 GDI -> GDI Handle/Object GDI 物件 同時使用 Kernel32.dll 內的 API 所占的 CPU Loading 就會是占 Kernel Time 囉? 因為發生的同時,Kernel 的 Loading 也很高。 ===================引 用 harpist 文 章=================== 以下是小弟的理解您參考看看 ![]() Windows 系統提供的 API 主要還是對應到 Kernel、User、GDI 三個主要的子系統模組, 而當使用 Kernel32 API 所獲得的 handles 大多是所謂的 KERNEL handles,依此觀念即 有所謂 GDI handles、User handles。User 子系統主要負責實作所有視窗運作機制,所 以當您所謂 User Handle 爆掉時 UI 就沒反應了,大概可以從這個方向...資源用太多沒釋放 ![]() 另外單一行程限制的 GDI handles、User handles 數量在登錄檔內,預設值都是10000。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota
------
http://www.ViewMove.com |
harpist
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
理論使用 user 子系統取得的相關系統資源的 handles 就是所謂的 User Handle ,
這些系統資源是有限的,不論是Kernel、User 或 GDI 皆維護著一份 handle table, 所以每個行程除了受限於單一行程最大的資源取得數量外也受限於系統的最高總量, 這些不同的 handles 對應不同的資源,kernel handles 包括行程、執行緒、檔案..這類。 CPU Kernel Time 跟 User Time 跟 Kernel32.dll API 沒有絕對關係,指的是CPU 的 的 Kernel mode 與 User mode 兩種執行模式,會使用到Kernel mode大部分是一些 system call 如一些 I/O 的寫入等等... ![]() ===================引 用 dllee 文 章=================== 感謝 harpist 回覆 ![]() 只要使用 user32.dll 內的 API 所建立的 Handle 就會使 User Handle 增加囉? 所以: Kernel? -> Handle????????????????????????? 控制碼 User???? -> User Handle/Object??? USER 物件 GDI ?? -> GDI Handle/Object???????? GDI 物件 同時使用 Kernel32.dll 內的 API 所占的 CPU Loading 就會是占 Kernel Time 囉? 因為發生的同時,Kernel 的 Loading 也很高。 ===================引 用 harpist 文 章=================== 以下是小弟的理解您參考看看 ![]() Windows 系統提供的 API 主要還是對應到 Kernel、User、GDI 三個主要的子系統模組, 而當使用 Kernel32 API 所獲得的 handles 大多是所謂的 KERNEL handles,依此觀念即 有所謂 GDI handles、User handles。User 子系統主要負責實作所有視窗運作機制,所 以當您所謂 User Handle 爆掉時 UI 就沒反應了,大概可以從這個方向...資源用太多沒釋放 ![]() 另外單一行程限制的 GDI handles、User handles 數量在登錄檔內,預設值都是10000。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota
------
~§~迷時師渡,悟了自渡~§~ |
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
感謝 harpist 回覆
![]() 那 IO 包含網路 IO 嗎?還是只有檔案 IO? 我的系統會處理網路通訊資料及將資料 Log 存檔。 ===================引 用 harpist 文 章=================== 理論使用 user 子系統取得的相關系統資源的 handles 就是所謂的 User Handle , 這些系統資源是有限的,不論是Kernel、User 或 GDI 皆維護著一份 handle table, 所以每個行程除了受限於單一行程最大的資源取得數量外也受限於系統的最高總量, 這些不同的 handles 對應不同的資源,kernel handles 包括行程、執行緒、檔案..這類。 CPU Kernel Time 跟 User Time 跟 Kernel32.dll API 沒有絕對關係,指的是CPU 的 的 Kernel mode 與 User mode 兩種執行模式,會使用到Kernel mode大部分是一些 system call 如一些 I/O 的寫入等等... ![]()
------
http://www.ViewMove.com |
harpist
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
KERNEL32 物件
K32OBJ_SEMAPHORE(0x1) K32OBJ_event(0x2) K32OBJ_mutex(0x3) K32OBJ_CRITICAL_SECTION(0x4) K32OBJ_PROCESS(0x5) K32OBJ_THREAD(0x6) K32OBJ_FILE(0x7) K32OBJ_CHANGE(0x8) K32OBJ_CONSOLE(0x9) K32OBJ_SCREEN_BUFFER(0xA) K32OBJ_MEM_MAPPED_FILE(0xB) K32OBJ_SERIAL(0xC) K32OBJ_DEVICE_IOCTL(0xD) K32OBJ_PIPE(0xE) K32OBJ_MAILSLOT(0xF) K32OBJ_TOOLHELP_SNAPSHOT(x10) K32OBJ_SOCKET(0x11) 有包括 SOCKET ![]() 資料來源:Windows 95 System Programming SECRETS ===================引 用 dllee 文 章=================== 感謝 harpist 回覆 ![]() 那 IO 包含網路 IO 嗎?還是只有檔案 IO? 我的系統會處理網路通訊資料及將資料 Log 存檔。
------
~§~迷時師渡,悟了自渡~§~ |
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |