原文链接: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/

【翻译】使用PowerShell获取网站运行时数据相关推荐

  1. 20张图助你了解JVM运行时数据区,你还觉得枯燥吗?

    我们的JVM系列已经断更好几天了,小伙伴们在后台疯狂私信阿Q,想看后续内容,今天它来了.相信大家在上篇文章中已经对类加载子系统有了清晰的认识,接下来就让我们来揭开"运行时数据区"的 ...

  2. 1、虚拟机内存管理、运行时数据区、线程共享区、Java堆、新生代、老年代、Eden区域分配、方法区、线程独占区、虚拟机栈

    1.Java虚拟机内存管理 1.1.运行时数据区[Runtime Data Area] 1.1.1.线程共享区 1.1.1.1.Java堆[heap] 1.1.1.1.1.新生代.老年代.Eden区域 ...

  3. Java内存区域(运行时数据区域)和内存模型(JMM)

    原文作者:czwbig 原文:https://www.cnblogs.com/czwbig/p/11127124.html Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数 ...

  4. 【JVM】运行时数据区概述(程序计数器、虚拟机栈、本地方法栈)

    前言 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会 ...

  5. Java8 JVM运行时数据区概述 (极其详细长文)

    文章目录 运行时数据区概述 JVM中的线程说明 PC寄存器(PC Register) PC寄存器介绍 使用举例 问题:使用PC寄存器存储字节码指令地址有什么用?为什么使用PC寄存器存储? 问题:为什么 ...

  6. Java程序员必知必会之JVM运行时数据区

    JVM类加载概述 JVM垃圾回收概述 运行时数据区概述 程序计数器(Program Counter Register) 是一块较小的内存空间,可以看作是当前线程所执行字节码的行号指示器,指向下一个将要 ...

  7. JVM00_面试官对类加载器子系统、运行时数据区、内存分布、执行引擎的灵虚拷问,你能坚持到第几问?

    因为热爱所以坚持,因为热爱所以等待.熬过漫长无戏可演的日子,终于换来了人生的春天.他逐渐被人熟知,被人喜爱 三年前,在苏州园区某个国企面试,第一道题目便是:JVM是什么吗?然后就是拿着笔试题目被面试官 ...

  8. JVM(运行时数据区结构)详解一

    JVM(Java虚拟机) JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功 ...

  9. 深入理解JVM底层原理——运行时数据区

    运行时数据区概述和线程 1.运行时数据区概述 !     内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了Java在运行过程中内存申请 ...

最新文章

  1. python如何写生日快乐说说_高逼格祝福朋友生日快乐的说说
  2. 04 - JavaSE之异常处理
  3. firefox和chrome中 JQuery的ajax组件执行差异
  4. 解决STM32 SPI 半残废 NSS无法拉高
  5. MyBatis关键配置-接口注入使用
  6. matlab 矩阵jocobi迭代_第6章 解线性方程组的迭代法(基于MATLAB)
  7. Linux求平方脚本,Linux Shell脚本系列教程(五):数学运算
  8. sudo: unable to resolve host xxx解决办法
  9. 从△走进OO,走进策略模式
  10. smbinning包:R语言下的分箱处理工具
  11. 计算机评语公式怎么输,excel公式写评语
  12. 数据库相关类型(日期、复合、bit、布尔)
  13. MATLAB app designer 制作单选按钮的方法
  14. 高等数学(预备知识之对数函数)
  15. AndroidManifest.xml文件解析(详解)
  16. 2018年9月网易游戏雷火防护工程师秋招线下笔试
  17. 如何成为一名正义黑客?你应该学习什么?
  18. AJAX基础电子教程
  19. scite for php,SCITE配置系列
  20. ThreadX学习(4)——内存管理

热门文章

  1. 揭秘新的供应链攻击:一研究员靠它成功入侵微软、苹果等 35 家科技公司
  2. Java EE之JSP
  3. 监控Squid运行脚本
  4. 【安全牛学习笔记】COCAT
  5. Mellanox刘通:开放的理念让Mellanox的优势愈加凸显
  6. Percona XtraBackup 安装介绍篇
  7. 不可不知的 Android strings.xml 那些事
  8. Cacti实现网络监控的使用心得(1)
  9. python怎样压缩和解压缩ZIP文件
  10. busybox date 时间的加减