應(yīng)用程序很高興對(duì)所有這些活動(dòng)一無(wú)所知。它只知道自己的虛擬地址空間。但是,如果當(dāng)前在主存中的頁(yè)面集(稱(chēng)為 駐留集)少于實(shí)際要使用的頁(yè)面集(稱(chēng)為 工作集),應(yīng)用程序的性能很快就會(huì)顯著降低。(不幸的是,本文中您將看到,我們要討論的工具常常交換使用這兩個(gè)術(shù)語(yǔ),盡管它們指的是完全不同的事物。) Task Manager 和 PerfMon 我們首先考察兩種最常見(jiàn)的工具:Task Manager 和 PerfMon。這兩個(gè)工具都隨 Windows 一起提供,因此由此起步比較容易。 Task Manager Task Manager 是一種非常見(jiàn)的 Windows 進(jìn)程監(jiān)控程序。您可以通過(guò)熟悉的 Ctrl-Alt-Delete 組合鍵來(lái)啟動(dòng)它,或者右擊任務(wù)欄。Processes 選項(xiàng)卡顯示了最詳細(xì)的信息,如圖 2 所示。 圖 2. Task Manager 進(jìn)程選項(xiàng)卡 圖 2 中顯示的列已經(jīng)通過(guò)選擇 View -- Select Columns 作了調(diào)整。有些列標(biāo)題非常含糊,但可以在 Task Manager 幫助中找到各列的定義。和進(jìn)程內(nèi)存使用情況關(guān)系最密切的計(jì)數(shù)器包括: Mem Usage(內(nèi)存使用):在線幫助將其稱(chēng)為進(jìn)程的工作集(盡管很多人稱(chēng)之為駐留集)——當(dāng)前在主存中的頁(yè)面集。但是這個(gè)數(shù)值包含能夠和其他進(jìn)程共享的頁(yè)面,因此要注意避免重復(fù)計(jì)算。比方說(shuō),如果要計(jì)算共享同一個(gè) DLL 的兩個(gè)進(jìn)程的總內(nèi)存占用情況,不能簡(jiǎn)單地把“內(nèi)存使用”值相加。 Peak Mem Usage(內(nèi)存使用高峰值):進(jìn)程啟動(dòng)以來(lái) Mem Usage(內(nèi)存使用)字段的最大值。 Page Faults(頁(yè)面錯(cuò)誤):進(jìn)程啟動(dòng)以來(lái)要訪問(wèn)的頁(yè)面不在主存中的總次數(shù)。 VM Size(虛擬內(nèi)存大小):聯(lián)機(jī)幫助將其稱(chēng)為“分配給進(jìn)程私有虛擬內(nèi)存總數(shù)?!备_切地說(shuō),這是進(jìn)程所 提交的內(nèi)存。如果進(jìn)程保留內(nèi)存而沒(méi)有提交,那么該值就與總地址空間的大小有很大的差別。 雖然 Windows 文檔將 Mem Usage(內(nèi)存使用)稱(chēng)為工作集,但在該上下文中,它實(shí)際上指的是很多人所說(shuō)的駐留集(resident set),明白這一點(diǎn)很重要。您可以在 Memory Management Reference 術(shù)語(yǔ)表(請(qǐng)參閱 參考資料)中找到這些術(shù)語(yǔ)的定義。 工作集 更通常的含義指的是一個(gè)邏輯概念,即在某一點(diǎn)上為了避免分頁(yè)操作,進(jìn)程需要駐留在內(nèi)存中的那些頁(yè)面。 PerfMon 隨 Windows 一起提供的另一種 Microsoft 工具是 PerfMon,它監(jiān)控各種各樣的計(jì)數(shù)器,從打印隊(duì)列到電話。PerfMon 通常在系統(tǒng)路徑中,因此可以在命令行中輸入 perfmon 來(lái)啟動(dòng)它。這個(gè)工具的優(yōu)點(diǎn)是以圖形化的方式顯示計(jì)數(shù)器,很容易看到計(jì)數(shù)器隨時(shí)間的變化情況。 請(qǐng)?jiān)?PerfMon 窗口上方的工具欄中單擊 + 按鈕,這樣會(huì)打開(kāi)一個(gè)對(duì)話框讓您選擇要監(jiān)控的計(jì)數(shù)器,如圖 3a 所示。計(jì)數(shù)器按照 性能對(duì)象分成不同的類(lèi)別。與內(nèi)存使用關(guān)系最密切的兩個(gè)類(lèi)是 Memory 和 Process。選中計(jì)數(shù)器然后單擊 Explain 按鈕,就可以看到計(jì)數(shù)器的定義。說(shuō)明出現(xiàn)在主對(duì)話框下方彈出的單獨(dú)的窗口中。
北碚ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!
當(dāng)有問(wèn)題出現(xiàn)時(shí),許多開(kāi)發(fā)人員可能會(huì)比較盲目的用這些工具來(lái)試探性定位問(wèn)題,而大多數(shù)情況下,這種試探會(huì)無(wú)功而返。因?yàn)檫@些分析工具主要是側(cè)重Java單方面的分析,比如該系統(tǒng)調(diào)用第三方API,如果第三方API有問(wèn)題,是無(wú)法監(jiān)控到的。還有像文件、DB資源的訪問(wèn)也是是無(wú)法監(jiān)控到的。
除了JAVA自帶的監(jiān)控工具外,我們嘗試了第三方的監(jiān)控工具透視寶,功能相對(duì)全面,且易操作。
在功能方面,透視寶都包括:查看執(zhí)行最慢的10個(gè)元素,包括元素執(zhí)行次數(shù)、持續(xù)時(shí)長(zhǎng)和占用時(shí)長(zhǎng)百分比;查看HTTP請(qǐng)求參數(shù),包括請(qǐng)求的響應(yīng)狀態(tài)、鏈接頁(yè)面、具體的請(qǐng)求參數(shù)及返回結(jié)果;查看代碼執(zhí)行堆棧的詳細(xì)樹(shù)狀信息,包括每個(gè)方法的計(jì)算時(shí)間、總耗時(shí)和被調(diào)用的次數(shù),您能直接看到特殊標(biāo)識(shí)的最慢方法;查看涉及SQL語(yǔ)句的總耗時(shí)排序,包括SQL執(zhí)行總耗時(shí)、執(zhí)行次數(shù)和具體的查詢(xún)語(yǔ)句;第三方API調(diào)用。
通過(guò)JMX技術(shù)來(lái)監(jiān)控Oracle的JVM
2. ?阿里巴巴數(shù)據(jù)庫(kù)連接池(具有數(shù)據(jù)連接監(jiān)控功能)
Druid是一個(gè)JDBC組件,它包括三部分:
DruidDriver 代理Driver,能夠提供基于Filter-Chain模式的插件體系。
DruidDataSource 高效可管理的數(shù)據(jù)庫(kù)連接池。
SQLParser
Druid可以做什么?
1) 可以監(jiān)控?cái)?shù)據(jù)庫(kù)訪問(wèn)性能,Druid內(nèi)置提供了一個(gè)功能強(qiáng)大的StatFilter插件,能夠詳細(xì)統(tǒng)計(jì)SQL的執(zhí)行性能,這對(duì)于線上分析數(shù)據(jù)庫(kù)訪問(wèn)性能有幫助。
2) 替換DBCP和C3P0。Druid提供了一個(gè)高效、功能強(qiáng)大、可擴(kuò)展性好的數(shù)據(jù)庫(kù)連接池。
3) 數(shù)據(jù)庫(kù)密碼加密。直接把數(shù)據(jù)庫(kù)密碼寫(xiě)在配置文件中,這是不好的行為,容易導(dǎo)致安全問(wèn)題。DruidDruiver和DruidDataSource都支持PasswordCallback。
4) SQL執(zhí)行日志,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應(yīng)的LogFilter,監(jiān)控你應(yīng)用的數(shù)據(jù)庫(kù)訪問(wèn)情況。
擴(kuò)展JDBC,如果你要對(duì)JDBC層有編程的需求,可以通過(guò)Druid提供的Filter-Chain機(jī)制,很方便編寫(xiě)JDBC層的擴(kuò)展插件。
可以學(xué)習(xí)軟件包 java.lang.management
提供管理接口,用于監(jiān)視和管理 Java 虛擬機(jī)以及 Java 虛擬機(jī)在其上運(yùn)行的操作系統(tǒng)。
ClassLoadingMXBean
用于 Java 虛擬機(jī)的類(lèi)加載系統(tǒng)的管理接口。
CompilationMXBean
用于 Java 虛擬機(jī)的編譯系統(tǒng)的管理接口。
GarbageCollectorMXBean
用于 Java 虛擬機(jī)的垃圾回收的管理接口。
MemoryManagerMXBean
內(nèi)存管理器的管理接口。
MemoryMXBean
Java 虛擬機(jī)內(nèi)存系統(tǒng)的管理接口。
MemoryPoolMXBean
內(nèi)存池的管理接口。
OperatingSystemMXBean
用于操作系統(tǒng)的管理接口,Java 虛擬機(jī)在此操作系統(tǒng)上運(yùn)行。
RuntimeMXBean
Java 虛擬機(jī)的運(yùn)行時(shí)系統(tǒng)的管理接口。
ThreadMXBean
Java 虛擬機(jī)線程系統(tǒng)的管理接口。
更多請(qǐng)?jiān)L問(wèn)(bug315)
SWT Win32 Extension 是Eclipse類(lèi)庫(kù)SWT的Win32本地原生擴(kuò)展.
本項(xiàng)目提供了一個(gè)軟件開(kāi)發(fā)工具庫(kù),能夠讓您使用Java語(yǔ)言開(kāi)發(fā)原生的Windows應(yīng)用程序而不需要編寫(xiě)額外的JNI代碼。使用SWT Win32 Extension,您將不需要?jiǎng)?chuàng)建原生的動(dòng)態(tài)鏈接庫(kù)來(lái)調(diào)用操作系統(tǒng)動(dòng)態(tài)鏈接庫(kù)的系統(tǒng)API或者方法。您僅僅需要做的就是編寫(xiě)Java代碼,?? SWT Win32 Extension來(lái)負(fù)責(zé)剩下的部分。SWT Win32 Extension提供了一系列的功能使您的應(yīng)用程序看上去和Win32本機(jī)程序別無(wú)二致。
窗口裝飾功能:?提供窗口置頂,透明,閃動(dòng)等功能。?
自定義窗口:?創(chuàng)建不規(guī)則的窗口。?
訪問(wèn)Windows注冊(cè)表。?
系統(tǒng)文件夾:?獲取系統(tǒng)特殊文件加的路徑和圖標(biāo)。?
系統(tǒng)快捷方式:?管理系統(tǒng)快捷方式。?
系統(tǒng)相關(guān)信息:?收集系統(tǒng)CPU,內(nèi)存,環(huán)境變量等相關(guān)信息。?
系統(tǒng)會(huì)話:?提供關(guān)機(jī),休眠,重啟,注銷(xiāo)等功能。?
系統(tǒng)IO及網(wǎng)絡(luò)功能:?提供磁盤(pán)和網(wǎng)絡(luò)相關(guān)信息。?
活動(dòng)桌面功能:?管理Windows活動(dòng)桌面。?
系統(tǒng)鉤子:?注冊(cè)和卸載系統(tǒng)鉤子,能夠攔截和處理系統(tǒng)事件。?
窗口系統(tǒng)菜單:?管理窗口菜單。用戶(hù)可以自定義系統(tǒng)菜單和處理菜單事件。?
Ole 控件:?提供對(duì)一些常用控件的封裝,比如flash。 值得一提的是,您能夠訪問(wèn)SWT提供的所有功能,因?yàn)镾WT Win32 Extension是從SWT派生出來(lái)的。
其實(shí)首先你可以先使用監(jiān)控內(nèi)存工具,來(lái)監(jiān)控下,如果內(nèi)存消耗不是很大,其實(shí)就不用那么麻煩了。如果實(shí)在要加個(gè)內(nèi)存監(jiān)控程序,可以使用Runtime中的MaxMemory、TotalMemory、FreeMemory來(lái)實(shí)現(xiàn)。注意這些都是JVM的內(nèi)存,請(qǐng)不要和系統(tǒng)的內(nèi)存混淆。另外如果要實(shí)時(shí)監(jiān)控,必須還得弄個(gè)線程類(lèi)。大致思路是這樣,至于內(nèi)存溢出,你可以設(shè)定一個(gè)內(nèi)存閾值,比如說(shuō)15%的剩余內(nèi)存設(shè)置,就報(bào)內(nèi)存即將溢出的錯(cuò)誤。