热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何利用PowerShell监控Win-Server性能详解

这篇文章主要给大家介绍了关于如何利用PowerShell监控Win-Server性能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

Q:如何系统层面的去监控一下Windows Server?

A:额……一时间的话……能想到的可能也就是PowerShell+SQL Server+job,试试。

本文就给大家介绍了关于利用PowerShell监控Win-Server性能的相关内容,下面话不多说了,来一起看看详细的介绍吧

一、关于PowerShell

1、什么是PowerShell

  表层面的翻译:强大的Shell。

  强大?

  如果是从知名度和用户的使用量来谈的话,PowerShell相较当下流行的一些面向对象的语言来说应该是逊色太多太多了,但是,作为一款系统内置的脚本语言,和Linux里的Shell一样,说其强大当然是不容置喙的。

  Windows PowerShell 是一种命令行外壳程序和脚本环境,是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆。 powershell需要.NET环境的支持,同时支持.NET对象。微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象。其可读性,易用性,可以位居当前所有shell之首。

2、如何打开PowerShell

  1)Win键+R,输入cmd,然后cmd会话框里再输入powershell

  2)Win键+R,输入powershell,即来到其会话框

  3)或是直接找到Windows PowerShell程序打开

3、学习PowerShell

  一开始接触到PowerShell的时候,也是有一些懵圈的,但多少也还是和DOS、Shell命令有些相似之处,习惯就好。

  推荐学习网站:http://www.pstips.net/powershell-online-tutorials/

二、PowerShell脚本的编写与执行

1、编写脚本(.psl扩展名的脚本文件)

  1)对于简单的小脚本编写,可以通过echo命令重定向进文件,或是将脚本文件通过@‘ '@闭合起来

PS E:\> echo "Hello China"
Hello China
PS E:\> echo "Hello China">hello.psl
PS E:\> cat .\hello.psl
Hello China
PS E:\> @'
>> dir
>> help dir
>> ls
>> '@>test.psl

  2)复杂点的大脚本编写,一般借助文本编辑器方便些。

2、脚本执行

  1)PowerShell脚本的执行直接是使用脚本文件的相对路径,或者绝对路径

  2)通过别名设置(> Set-Alias),将脚本的执行语句保存为别名,如此,就能像输入命令一样的执行脚本

3、执行策略限制

  脚本能否执行取决于Powershell的执行策略;

  Powershell一般初始化情况下都会禁止脚本执行。只有管理员才有权限更改该策略,非管理员会报错。以管理员身份打开powershell:

PS E:\> Get-ExecutionPolicy
Restricted
PS E:\> Set-ExecutionPolicy Unrestricted

执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): y

  查看所有支持的执行策略:

  1>Unrestricted:权限最高,可以不受限制执行任何脚本。

  2>Default:为Powershell默认的策略:Restricted,不允许任何脚本执行。

  3>AllSigned:所有脚本都必须经过签名才能在运行。

  4>RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。

三、获取系统性能情况

1、主机名

PS D:\> $env:computername

2、CPU使用情况

  注意,-f:-filter:过滤,执行;对于不是很清楚的命令可以通过 man 命令 来获取帮助。

3、内存使用情况

PS D:\> $mem = gwmi win32_OperatingSystem
PS D:\> $mem
SystemDirectory : C:\Windows\system32
Organization :
BuildNumber : 15063
RegisteredUser : Windows 用户
SerialNumber : 00331-10000-00001-AA275
Version : 10.0.15063

  1)总内存:

PS D:\> $Allmem = "{0:0.0} MB" -f ($mem.TotalVisibleMemorySize / 1KB)
PS D:\> $Allmem
4003.4 MB

  2)剩余内存:

PS D:\> $Freemem = "{0:0.0} MB" -f ($mem.FreePhysicalMemory / 1KB)
PS D:\> $Freemem
285.5 MB

  3)内存使用比:

PS D:\> $Permem = "{0:0.0} %" -f ((($mem.TotalVisibleMemorySize-$mem.FreePhysicalMemory)/$mem.TotalVisibleMemorySize)*100)
PS D:\> $Permem
92.9 %

4、磁盘使用情况

  1)多条件过滤:只获取D、E磁盘的信息

  PS D:\> gwmi win32_logicaldisk -f "drivetype=3 and (DeviceID='E:' or DeviceID='D:')"

  2)辅助智能显示信息:

PS D:\> gwmi Win32_LogicalDisk | Foreach-Object { 'Disk {0} has {1:0.0} GB space available' -f $_.Caption, ($_.FreeSpace / 1024MB) }
Disk C: has 53.1 GB space available
Disk D: has 183.5 GB space available
Disk E: has 164.1 GB space available

5、大合集:执行脚本获取CPU、内存信息

PS D:\> cat .\GetCPUMem.ps1
$Server = $env:computername
#server's CPU Mem Hardinfor
 $cpu = Get-WMIObject –computername $Server win32_Processor
 $mem = gwmi -ComputerName $Server win32_OperatingSystem
 $Disks = gwmi –Computer: $Server win32_logicaldisk -filter "drivetype=3"
 $Havecpu = "{0:0.0} %" -f $cpu.LoadPercentage
 $Allmem = "{0:0.0} MB" -f ($mem.TotalVisibleMemorySize / 1KB)
 $Freemem = "{0:0.0} MB" -f ($mem.FreePhysicalMemory / 1KB)
 $Permem = "{0:0.0} %" -f ((($mem.TotalVisibleMemorySize-$mem.FreePhysicalMemory)/$mem.TotalVisibleMemorySize)*100)
 Write-Host "COMPUTER:$Server"`r`n
# `r`n表示换行输出
 Write-Host "CPU:$Havecpu"`r`n
 Write-Host "Total Mem:$Allmem"
 Write-Host "Free Mem:$Freemem"
 Write-Host "Used Mem:$Permem"`r`n
 $IpAdd = (Get-WmiObject -class win32_NetworkAdapterConfiguration -Filter 'ipenabled = "true"').ipaddress[0]
 Write-Host "Ipaddress:$IpAdd"`r`n

PS D:\> .\GetCPUMem.ps1
COMPUTER:DESKTOP-P8MIUHK

CPU:15.0 %

Total Mem:4003.4 MB
Free Mem:272.9 MB
Used Mem:93.2 %

Ipaddress:192.168.203.111

四、系统性能监控:CPU、内存、Disk

1、利用psl脚本获取性能信息

  死循环作业,只需要启动一次job即ok,如果担心重启之后停掉,就设置:start automatically when SQL Server Agent start。

2、监控标准把控

  1)CPU:80%

  2)内存:60% (通过io 和 ple 侧面反映内存情况)

  3)Disk:90%

3、T-SQL存储过程

USE [TestDB]
GO
/*系统性能监控:CPU、内存、disk*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc M_cpumem
--手动获取数据库服务器IP
@ip nvarchar(20)
AS
BEGIN
 /*获取CPU、内存使用情况信息*/
 --作业Get-CPU_Mem,执行powershell脚本
 DECLARE @cm nvarchar(100)
 SET @cm=(
  SELECT log 
  FROM msdb.dbo.sysjobstepslogs)
 --cpu使用率
 DECLARE @cpu int
 SET @cpu=CAST((SELECT SUBSTRING(@cm,5,4)) AS numeric(2,0))
 --内存使用率
 DECLARE @mem int
 SET @mem=CAST((SELECT SUBSTRING(@cm,22,4)) AS numeric(2,0))
 
 /*CPU过载报警监控*/
 --CPU使用率大于80%说明系统出现高耗
 IF (@cpu>80)
 BEGIN
  DECLARE @str_subject_cpu nvarchar(100),@str_html_cpu nvarchar(max);
  SET @str_subject_cpu='服务器:'+@ip+' CPU高耗报警'
  --CPU或调度器当前分配的工作情况
  SET @str_html_cpu='Dear All:
    
  系统CPU>80%,请参阅系统调度情况,进行性能优化处理!
'+ ''+ CAST(( SELECT td=scheduler_id,'', td=cpu_id,'', td=status,'', td=is_idle,'', td=current_tasks_count,'', td=runnable_tasks_count,'', td=current_workers_count,'', td=active_workers_count,'', td=work_queue_count,'' FROM master.sys.dm_os_schedulers WHERE scheduler_id<255 FOR xml path('tr'),type ) AS nvarchar(max))+ N'

Scheduler_ID

CPU_ID

状态

Is_Idle

当前任务数

等待调度线程数

当前线程数

活动线程数

挂起任务数

'; BEGIN EXEC msdb.dbo.sp_send_dbmail @profile_name='Email', @recipients='xxx@xxx.com', @subject=@str_subject_cpu, @body=@str_html_cpu, @body_format='HTML' END END /*内存过载报警监控*/ --内存使用率大于60%说明系统出现高耗 IF (@mem>60) BEGIN DECLARE @str_subject_mem nvarchar(100),@str_html_mem nvarchar(max); SET @str_subject_mem='服务器:'+@ip+' 内存高耗报警' --系统性能计数器 SET @str_html_mem='Dear All:
  系统Memory>60%,请参阅系统性能监控情况,进行性能优化处理!
'+ ''+ CAST(( SELECT td=object_name,'', td=counter_name,'', td=cntr_value,'' FROM sys.dm_os_performance_counters WHERE object_name in ('SQLServer:Buffer Manager','SQLServer:Memory Manager') AND counter_name in ('Buffer cache hit ratio','Checkpoint pages/sec','Lazy writes/sec','Page lIFe expectancy','Memory Grants PENDing','Target Server Memory (KB)','Total Server Memory (KB)') FOR xml path('tr'),type ) AS nvarchar(max))+ N'

Object_Name

Counter_Name

Value

'; BEGIN EXEC msdb.dbo.sp_send_dbmail @profile_name='Email', @recipients='xxx@xxx.com', @subject=@str_subject_mem, @body=@str_html_mem, @body_format='HTML' END END /*磁盘使用报警监控*/ --磁盘可使用率小于15%时进行邮件报警 CREATE TABLE temp_disk_space(Drive_Name nvarchar(50),Total_Space_GB NUMERIC(18,2),Free_Space_GB NUMERIC(18,2)) INSERT INTO temp_disk_space SELECT DISTINCT vs.volume_mount_point, CAST(vs.total_bytes / 1024.0 / 1024 / 1024 AS NUMERIC(18,2)), CAST(vs.available_bytes / 1024.0 / 1024 / 1024 AS NUMERIC(18,2)) FROM sys.master_files AS f CROSS APPLY sys.dm_os_volume_stats(f.database_id,f.file_id) AS vs SELECT Drive_Name,(Free_Space_GB * 100)/Total_Space_GB AS [% Free_Space] INTO #temp_space_monitor FROM temp_disk_space ORDER BY Drive_Name IF exists(SELECT 1 FROM #temp_space_monitor WHERE [% Free_Space] <15) BEGIN DECLARE @str_subject_disk nvarchar(100); SET @str_subject_disk='服务器:'+@ip+' 磁盘空间不足' EXEC msdb.dbo.sp_send_dbmail @profile_name='Email', @recipients='xxx@xxx.com', @subject=@str_subject_disk, @body = 'Dear ALL: 请及时清理磁盘,磁盘空间使用情况见附件!', @query = 'SELECT * FROM TestDB.dbo.temp_disk_space', --使用全称 @attach_query_result_as_file = 1, @query_attachment_filename = 'disk.txt' END DROP table TestDB.dbo.temp_disk_space, #temp_space_monitor END

4、最后就是将上面的存储过程添加到定时作业里进行监控

总结:

最后的功能是实现了,到达了Windows Server性能的监控要求,但是,各种波折的获取性能信息,真的是很难把控到“实时监控”。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


推荐阅读
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
author-avatar
as1dzx
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有