zoukankan      html  css  js  c++  java
  • 【翻译】使用PowerShell获取网站运行时数据

         原文链接: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 Sites
    PS 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. 我们使用下面内容来扩展一下我们的例子:

    1. 创建一个对 'Default Web Site' 站页默认页面的请求
    2. 查询处理当前请求的工作者进程(worker process )的 PID 
    3. 回收该应用程序池
    4. 再次请求这个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/

  • 相关阅读:
    Hexo博客搭建教程
    windows7如何查看端口被占用
    openshift rhc
    .net面试题精选
    Java垃圾回收机制
    Maven 入门篇(下)
    Maven 入门篇 ( 上 )
    OPENSHIFT MYSQL使用Navicat远程连接
    ci配置smarty手记
    solr多核配置
  • 原文地址:https://www.cnblogs.com/daizhj/p/1352718.html
Copyright © 2011-2022 走看看