用于检查和验证 IIS/应用程序池/ASP.NET 操作最佳实践的 PowerShell 命令
在任何改进工作中,建议的第一个步骤是探索并回答我们所处的位置(探索和分析我们当前的状态)以及我们想要的位置,尽管每个最佳实践都可以手动确认和应用,该项目已初步启动,以在发现过程中提供帮助。作为第一个输出,我们将有两个 CSV 文件,其中将包含要涵盖的建议操作项以及有关当前系统的一般信息。
这些命令执行系统只读操作,不涉及修改操作,唯一的例外是仅为包含最终结果而创建的两个 csv 文件。
默认回收时间为 1740 分钟,那么,应用程序池回收将在工作时间的某个时刻发生,这可能会导致性能下降和用户会话完成,(如果 ASP.NET 保持其会话状态,则可以缓解用户会话完成问题out-proc,例如在SqlServer中),回收定期时间的建议值为0(设置为零,这意味着不会因为经过时间而发生回收),另外还可以指定一个Specific Time,例如在凌晨 3:00
默认回收空闲超时为 20 分钟,这意味着 IIS 将在 20 分钟不活动后自动关闭工作进程,然后当新请求到达应用程序时,完整的激活过程将再次启动(创建新的工作进程)进程、ASP.NET页面和Dlls编译等),这可能会导致性能下降和用户会话完成,如果服务器内存使用允许我们,那么,空闲超时的建议值为0(设置为零,在换句话说,IIS永远不会因为不活动时间而关闭已经运行的工作进程,只有当其他回收条件满足时才会被回收)
工作进程使用的默认身份是ApplicationPoolIdentity,它具有运行几乎任何Web应用程序所需的权限,如果需要更改此帐户,我们需要确保所选帐户不具有超出最低所需权限的权限,在任何情况下,都建议不要保留 LocalService 或管理员帐户来在生产中运行工作进程,这不仅会过度暴露应用程序安全性,还会过度暴露操作系统安全性
由于每个应用程序池启动不同的工作进程,这是 IIS 中的最终隔离层,因此,如果由于某种原因应用程序出现性能问题、未处理的异常、线程争用和/或资源管理问题,则其他应用程序不应出现问题会受到这种不良行为的影响,这是事实,但前提是每个应用程序都隔离在自己的应用程序池中。
切勿意外(或故意)在应用程序的 web.config 文件上保留
开关,这样做会导致发生许多非最佳情况,包括:
PS > build.ps1
,这将创建output
文件夹output
文件夹内容复制到目标服务器进行分析PS > Run.ps1
HostName-Findings.csv
包含与 IIS/ASP.NET 操作最佳实践相关的所有操作项HostName-BaseLineInfo.csv
包含有关系统当前状态的一般信息您需要以管理员身份运行这些命令
欢迎任何设计改进,也欢迎任何新想法:)
Powerops中几乎所有的代码都是通过TDD设计和编写的,所以,我鼓励你继续保持这个好习惯
要运行单元测试,请以管理员身份打开 powershell 并运行PS projectPath/test/> Invoke-Pester