开发的应用在测试过程中发生了java.lang.OutOfMemoryError 错误,一时找不到问题所在,只能先写个脚本,当该脚本检测到jboss服务挡掉时,就自动重启jboss服务器。脚本中用到了pstools中的pskill,网上可以下载到,把这个脚本和pskill一起放到jboss的bin目录下即可。只pskill java后,运行bat的cmd窗口并没有关掉,本人也没有找到在脚本中得到cmd窗口ID的方法,用WshShell.Exec也有一些问题,所以只能再pskill cmd,这样可能会影响您的其它工作,可以根据您的情况做一些修改。而且脚本只能通过wscript.exe来运行,也就是不让出现cmd窗口,不然会一起被kill掉,这样就达不到自动重启的目的。
另一个问题是当出现java.lang.OutOfMemoryError错误时,jboss服务器好像并不是完全挡掉,一些不访问数据库的jsp页面一样可以访问,所以ping.jsp最好是一个访问了数据库的文件。当然,脚本中循环访问该页面,肯定会加重web服务器和数据库服务器的负担,所以,循环的速度要根据您的具体情况做适当的调整。该脚本不至是针对jboss服务器和java.lang.OutOfMemoryError,作很少的修改,您可以应用到其它服务器和检查特定的web服务器出现的问题,然后做相应的处理。
------------------------restart.vbs------------------------
on error resume next
Dim a
a=true
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run("run.bat")
WScript.Sleep(60000)
Do While a
set http = CreateObject("Microsoft.XMLHTTP")
http.open "POST","
http://127.0.0.1:8080/gtgdh/ping.jsp",false http.send
if http.Status > 300 then
WshShell.Run("pskill java")
WScript.Sleep(3000)
WshShell.Run("pskill cmd")
WshShell.Run("run.bat")
WScript.Sleep(60000)
end if
WScript.Sleep(5000)
loop