全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3815
推到 Plurk!
推到 Facebook!

那些動作會增加 User Handle(User 物件)?

答題得分者是:harpist
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-09 11:02:06 IP:220.134.xxx.xxx 訂閱
最近在測試一個程式,該程式需要開啟 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-10 00:50:34 IP:59.105.xxx.xxx 未訂閱
以下是小弟的理解您參考看看
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




------
~§~迷時師渡,悟了自渡~§~
編輯記錄
harpist 重新編輯於 2007-08-10 00:51:44, 註解 錯字@@‧
harpist 重新編輯於 2007-08-10 01:51:45, 註解 補充USERProcessHandleQuota‧
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-10 08:19:52 IP:59.105.xxx.xxx 訂閱
感謝 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-10 15:05:23 IP:59.104.xxx.xxx 未訂閱
理論使用 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-10 17:15:11 IP:220.134.xxx.xxx 訂閱
感謝 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-10 17:32:22 IP:59.104.xxx.xxx 未訂閱
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 存檔。
------
~§~迷時師渡,悟了自渡~§~
編輯記錄
harpist 重新編輯於 2007-08-10 17:36:23, 註解 加註資料來源‧
harpist 重新編輯於 2007-08-10 17:37:11, 註解 錯字@@‧
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-10 23:36:58 IP:59.105.xxx.xxx 訂閱
真是詳細,太感謝了 
------
http://www.ViewMove.com
系統時間:2024-04-16 13:53:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!