最近網(wǎng)站一個Web應(yīng)用程序運行得不是很好,時??ㄗ?dǎo)致w3wp.exe應(yīng)用程序池CPU消耗過高,嚴(yán)重影響服務(wù)器性能,而一旦卡住,該Web應(yīng)用程序就會訪問失敗,且不能自行恢復(fù),需要手動重啟IIS才行,這嚴(yán)重影響了網(wǎng)站的正常運轉(zhuǎn),因為不可能人工時刻盯著服務(wù)器的CPU消耗,因此需要解決一下這個問題。修改Web應(yīng)用程序不現(xiàn)實,我想到的是在服務(wù)器端運行一個VB監(jiān)控軟件,采用軟件監(jiān)控+強行重啟IIS的方法,這個方法實施起來比較簡單。
監(jiān)控網(wǎng)站打開狀態(tài)
vb監(jiān)控網(wǎng)站打開狀態(tài)的方法有幾種,常用的是使用XMLHTTP來打開網(wǎng)頁,然后判斷成功與否。核心代碼如下:
Dim html As String
Dim XMLObject As Object
Set XMLObject = CreateObject("Microsoft.XMLHTTP")
XMLObject.Open "GET", "http://gazebo2go.com/", False
XMLObject.send
html = XMLObject.responseText
不過上述代碼的局限性比較明顯,它不能獲得網(wǎng)頁的header(標(biāo)頭)信息,為了能更靈活的應(yīng)用監(jiān)控軟件,我使用了vb的Inet控件,下面是編程過程。
1、添加Inet控件
添加部件“Microsoft Internet Transfer Control 6.0”,
添加部件Inet
2、編寫監(jiān)控程序
使用Inet打開網(wǎng)頁的程序比較簡單,可以通過獲得網(wǎng)頁的header信息,然后從狀態(tài)碼來判斷網(wǎng)頁打開狀態(tài),代碼如下:
'通過Inet控件獲得網(wǎng)頁header信息
Inet1.OpenURL “http://gazebo2go.com/” '用inet連接網(wǎng)頁
If InStr(1, Inet1.GetHeader, "200") > 0 Then '獲得header信息,判斷頁頭是否包含字符“200”
MsgBox "網(wǎng)頁可以打開!"
Else
MsgBox "網(wǎng)頁不能打開!"
End If
也可以先獲得網(wǎng)頁的html源文件,然后判斷源文件是否包含某特定的字符串,代碼如下:
'獲得網(wǎng)頁HTML代碼
Dim szHtml As String
szHtml = Inet1.OpenURL( “http://gazebo2go.com/” ) '用inet連接網(wǎng)頁
If InStr(1,szHtml,"卡卡測速網(wǎng)") > 0 Then '判斷網(wǎng)頁是否包含某特定字符串
MsgBox "網(wǎng)頁可以打開!"
Else
MsgBox "網(wǎng)頁不能打開!"
End If
使用vb Inet控件編寫監(jiān)控網(wǎng)頁打開狀態(tài)的核心代碼就是這樣了。
本文旨在介紹vb Inet控件的使用,我們可以在此基礎(chǔ)上編寫其他的行為,例如可以遇到網(wǎng)頁打不開時重啟服務(wù)器。
需要注意的是,使用vb Inet控件編寫的監(jiān)控軟件,在服務(wù)器上運行時,要先下載MSINET.OCX這個文件,放到C:\WINDOWS\system32文件夾下,否則運行會出錯。