【翻译】使用PowerShell获取网站运行时数据
2009-01-05 09:12
441 查看
原文链接:PowerShell Provider: Run-time Data
介绍
站点的启动,停止, 应用程序池的回后或过期(time out), 接受的请求和发送的响应, AppDomains(应用程序域) 的大量生成和关闭. IIS7 实现了一个所谓的 RSCA 接口(run-time state and control API) ,该接口允许您监视当前系统正在做的
工作.
IIS 7.0 PowerShell Provider 使用该接口并以IIS Provider 名空间来暴露其中一些数据信息. 通过Get-WebItemState,
Start-WebItem, Stop-WebItem 和 Restart-WebItem 等cmdlets来配置站点和应用程序池的状态. 通过IIS 名空间来暴露
出来的运行时状态比如:当前运行的工作者进程,当前执行的请求和被加载的应用程序域(loaded AppDomains )等.
本文使用的站点, applications 和虚拟目录在前一篇文章中已进行了创建.
站点和应用程序池状态
开始查询web站点的状态.站点状态
PS IIS:/> cd SitesPS IIS:/Sites> Get-WebItemState IIS:/Sites/DemoSite
Started
使用 Stop-WebItem cmdlet 来停止站点:
PS IIS:/Sites> Stop-WebItem DemoSite
PS IIS:/Sites> Get-WebItemState IIS:/Sites/DemoSite
Stopped
当然,启动站点的工作也差不多:
PS IIS:/Sites> Start-WebItem DemoSite
PS IIS:/Sites> Get-WebItemState IIS:/sites/DemoSite
Started
应用程序池状态
我们对应用程序池也施加相同操作:PS IIS:/> cd AppPools
PS IIS:/AppPools> Get-WebItemState DemoAppPool
Started
PS IIS:/AppPools> Stop-WebItem DemoAppPool
PS IIS:/AppPools> Get-WebItemState DemoAppPool
Stopped
除此之外,您也可从 AppPools 结点中获取这些状态属性. 下面我们做一个有趣的例子. 打开喇叭(电脑的声音)并执行
下面命令行(注:此时系统会用语音方式提示应用程序池被启动):
dir 'iis:/AppPools' | foreach {[void](new-object -com Sapi.SPVoice).Speak("Application Pool State:");}{$poolState = "Application Pool " + $_.Name +" is " + $_.State;$poolState;[void](new-object -com Sapi.SPVoice).Speak($poolState);}
现在再次程序 DemoAppPool :
PS IIS:/AppPools> Start-WebItem DemoAppPool
回收应用程序池
应用程序池的不同之处(与站点等相比)在于它们可以被回收(recycled). 执行这个任务的 cmdlet 是:Restart-WebItem (不是Recycle-WebItem). PowerShell 有着非常严格的命名规则,因此我们须使用
Restart-WebItem. 我们使用下面内容来扩展一下我们的例子:
创建一个对 'Default Web Site' 站页默认页面的请求
查询处理当前请求的工作者进程(worker process )的 PID
回收该应用程序池
再次请求这个PID 以确保该进程被重启
1. 请求默认页面
我们使用Net.WebClient 类去请求 http://localhost/. 这里不再显示输出信息,取而代之的仅是查看一下当前响应内容的长度.
PS IIS:/AppPools> $response = (new-object Net.WebClient).DownloadString("http://localhost/")
PS IIS:/AppPools> $response.Length
689
2. 查询工作者进程(Worker Process) PID
假设当前机器上没有其他正在运行的站点和应用,下面的命令行仅会返回一个:PS IIS:/AppPools> get-process w3wp | select processname,id
ProcessName Id
----------- --
w3wp 3684
There is a better way to get to worker processes, handled a little later in this walkthrough.
3. 回收应用程序池
我们使用 Restart-WebItem cmdlet 来回疏通应用程序池:PS IIS:/AppPools> Restart-WebItem DefaultAppPool
4. 查询工作者进程的 PID
如果成功地回收了应用程序,那么您的进程ID就会发生变化.
PS IIS:/AppPools> get-process w3wp | select processname,id
ProcessName Id
----------- --
w3wp 5860
工作者处理和请求(Worker Processes and Requests)
get-process cmdlet 不会找出当前工作者进程运行着那个应用程序池. 然而下面的方式可做到这一点:
PS IIS:/AppPools> dir DefaultAppPool/WorkerProcesses
processId Handles state StartTime
--------- ------- ----- ---------
6612 326 1 3/28/2008 12:20:27 PM
当前正在执行的请求(Currently Executing Requests)
注:下面的内容我实在是看不明白,所以直接将E文帖在这里,希望理解的朋友将内容发上来以便我及时更正。If your machine is not a production machine you will have a hard time looking at currently exeucting requests. The request is long gone until you make a request via Internet Explorer and get back into the PowerShell console. Here is a little helper; a request that takes a long time.
Set-Content "$env:systemdrive/inetpub/wwwroot/long.aspx" "<%@ Page language=`"C#`"%><%System.Threading.Thread.Sleep(30000);Response.Write(`"slept for 30 seconds`");%>"
如果想要显示当前正在执行的请求,您可以使用如下命令行 (注:get-item 命令所使用的进行ID会与您本机
上的有所不同):
PS IIS:/AppPools/DefaultAppPool/WorkerProcesses> dir
Process State Handles Start Time
Id
-------- ----- ------- ----------
6612 Running 737 3/31/2008 8:18:15 AM
PS IIS:/AppPools/DefaultAppPool/WorkerProcesses> (get-item 6612).GetRequests(0)
requestId : d8000001800000f5
connectionId : d8000001600000f3
verb : GET
url : /long.aspx
siteId : 1
如果您想查看从执行请求开始到现在已过了多长时间的话:
PS IIS:/AppPools/DefaultAppPool/WorkerProcesses> (get-item 6612).GetRequests(0) | select url,timeElapsed
url timeElapsed
--- -----------
/long.aspx 2637
总结
在本文中,您了解了如何查看 IIS 应用程序池和站点的状态. 如何启动和关闭它们. 您也了解了如何查看工作者进程(worker processes)以及当前执行的请求.
好了,今天的内容就到这里。
原文链接:http://www.cnblogs.com/daizhj/archive/2008/12/11/1352718.html
作者: daizhj, 代震军
Tags: powershell,iis
网址: http://daizhj.cnblogs.com/
相关文章推荐
- 【翻译】使用PowerShell获取网站运行时数据
- 【翻译】使用PowerShell获取网站运行时数据
- 使用正则表达式,从网站上获取指定数据
- 使用正则表达式,从网站上获取指定数据
- PowerShell中使用GetType获取变量数据类型
- 今天需要获取一个网站的web服务反馈回来的数据,找到份不错的帖子关于WebClient类的使用,记录下来·
- 通过wireshark获取应用接口并使用爬虫爬取网站数据(二)
- 使用httpclient获取其他网站数据(含解析验证码)
- 使用正则表达式,从网站上获取指定数据
- 1 开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你。 本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的原则已经被许多现有的JDBC应用程序编译运行并验证过。 这些指导原则包括: 正确的使用数据库MetaData方法 只获取需要的数据 选用最佳性能的功能 管理连
- 使用Mono Cecil 动态获取运行时数据 (Atribute形式 进行注入 用于写Log) [此文报考 xxx is declared in another module and needs to be imported的解决方法]-摘自网络
- 【翻译】使用VS2008开发运行在.net 2.0环境下的 ASP.NET AJAX 网站
- 通过wireshark获取应用接口并使用爬虫爬取网站数据(三)
- 使用 HttpWebRequest 向网站提交数据
- 使用HttpWebRequest向网站模拟上传数据-(摘自greystar的专栏)
- 新闻模块之新闻列表-使用datalist 模块获取数据-页面表示层(Linq方式)-1
- symbian CClipboard的使用(拷贝数据到剪贴板及从剪贴板获取数据)
- 使用oledb获取Excel文件第一个工作表数据
- Jquery 使用Ajax获取后台返回的Json数据后,页面处理
- 网站重构——轻量化的网站架构设计一,使用nodejs sqlite3查询数据