我们的服务器在添加模板之后,会有很多的监控项。当监控项到达一定的阈值之后就会触发报警,这里我们来总结一下当服务器出现问题触发报警的解决方法。

CPU

  • CPU的性能对于计算机整体的性能起着主导作用。对于早期对计算机甚至直呼其CPU的型号,如 386 、486、奔三,奔四。
    那么我们CPU性能最直接的评估就是查看其CPU工作频率,就是CPU的时钟频率,单位为是Hz。随着CPU的发展,主频由MHz现在的GHz
    (1GHz=1000MHz=1000000KHz=1000000000Hz)
  • 处理器除了主频指标外,还有另外两个密切相关的概念:倍频与外频。外频是cpu的基准频率,单位是MHz。外频是CPU与主板- 之间同步运行的速度,而且目前的绝大部分计算机系统中外频与是内存与主板之间的同步运行速度,在这种方式下,可以理解为CPU的外频直接与内存相连通。实现两都的同步运行状态;倍频即主频与外频之间的倍数。
    主频 = 外频 * 倍数
  • 一、Processor load is too high on 主机*
    触发器的表达式
1
2
{192.168.43.12:system.cpu.load[percpu,avg1].avg(5m)}>1

描述:这个信息,是说服务器太忙。
解决方案

  • 检查下是不是运行的东西太多
  • 停掉不用的服务
  • 扫下病毒,进行杀毒工作
  • 重启下服务器,重新恢复下工作(保存好当前工作状态)
  • 打下补丁,将服务器的更新安装
  • 删除不必要的启动项目
  • 定时启动的如备份的日程安装到晚上。 二、% Total Processor Time
    触发器的表达式
1
2
{192.168.43.12:perf_counter["\Processor Information(_Total)\% Processor Time",300].avg(600,0)}>80

描述:获得处理器整体使用情况,阀值:处理器的阀值一般设为85%。
含义:这个计数器是处理器活动的主要指标。高数值并不一定是坏事,但是如果其他处理器相关的计数器(比如% Privileged Time 或者Processor Queue Length)线性增加的话,高CPU使用率就值得调查了

该计数值用于体现服务器整体的处理器利用率,对多处理器的系统而言,该计数值体现的是所有CPU的平均利用率。如果该值的数值持续超过90%,则说明整个系统面临着处理器方面的瓶颈,需要通过增加处理器来提高性能
要注意的是,由于操作系统本身的特性,在某些多CPU系统中,该数据本身并不大,但此时CPU之间的负载状况极不均衡,此时也应该视作系统产生了处理器方面的瓶颈。

三、Processor Queue Length
触发器的表达式

1
2
{192.168.43.12:perf_counter["\System\Processor Queue Length",300].avg(600,0)}>20

描述:处理器队列的线程数量。此计数器只显示就绪线程,而不是正在运行的线程。
当该计数器的值大于CPU数量的总数加1时,说明CPU产生了赌塞。(阀值:平均值持续大于2那么表示CPU存在瓶颈),如果就绪的任务超过处理能力线程就会被放进队列。处理器队列是就绪但是未能被处理器执行的线程的集合,这是因为另外一个线程正在执行状态。持续或者反复发生2个以上的队列则明确的表示存在处理器瓶颈。你也能通过减少并发取得更大的吞吐量。
你可以结合Processor/% Processor Time来决定增加CPU的话你的程序是否能够受益。即使在多处理器的电脑上,对于CPU时间也是单队列。因此,在多处理器电脑上,Processor Queue Length (PQL)的值除以用来处理负载的CPU个数。
如果CPU非常忙(90%以上的使用率),PQL的平均值也持续大于2/CPU,这是应该存在CPU瓶颈而且能够从更多的CPU中受益。或者,你可以减少线程的数量以及增加应用程序层的队列。这会引起少量的Context Switching,但是少许的Context Switching对于减少CPU负载是有好处的。PQL大于2但是CPU使用率却不高的的常见原因是对CPU时间的请求随机到达而且线程却从处理器申请到不对称的CPU时间。这意味着处理器并不是瓶颈,而你的线程逻辑是需要改进的。

磁盘I/O

  • 硬盘应该是计算机硬件中发展最慢的设备,很多常见瓶颈都是由于硬盘的读/写速度慢导致的。提高硬盘读/写性能无非是提高转速、提高单碟容量,增加缓存和更新接口,因为传统的硬盘是物理旋转读写数据,所以转速的提高相当困难;而提高单碟容量也存在一写的技术瓶颈,1TB的单碟的容量想要突破还也需要时间。
  • 对于传统的温氏硬盘到现在速度也只能达到120MB/s的读取速度,这个速度还真对大文件的读写,而对于服务器大量4KB的小文件读/写速度,会惊人的下跌至1MB不到,而对应的IOPS(每秒磁盘的读/写次数)会低得可怜,大量的数据都在排队从硬盘上读取到内存中,再利用内存的超大带宽完成操作。这也是为什么内存大的系统比较快的原因。但内存的速度虽然比硬盘快得多,也有其致命的缺点,一旦断电,内存中的数据将全部丢失。
  • IOPS(Input/Output Per Second)每秒磁盘的输入/输出量(或读/写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位。
  • 另一个重要指标是数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读/写应用,则更关注吞吐量指标。
  • 传统的温氏硬盘完成一个I/O请求所花费的时间包括 寻道时间、旋转延迟和数据传输时间三部分。
  • 寻道时间,是指将读写磁头移动至正确的磁道上所需要的时间。目前磁盘的平均寻道时间一般在3~15ms
  • 旋转延迟,是指盘片旋转将请求数据所在扇区移至读/写磁头下方所需要的时间。7200转速的磁盘,平均旋转言辞大于为60 * 1000/7200/2=4.17ms
  • 数据传输时间,是指完成传输所请求的数据所需要的时间。目前SATA II 可达到300MB/s的接口数据传输速率。数据传输时间通常远小于前两部分时间。
  • 三、PhysicalDisk Read(Write) Latency*
    触发器的表达式
1
2
{192.168.43.12:perf_counter["\PhysicalDisk(_Total)\Avg. Disk sec/Write",300].avg(600,0)}>0.015

描述:物理磁盘的读写延迟

四、LogicalDisk Read(Write) Latency
触发器的表达式

1
2
{192.168.43.12:perf_counter["\LogicalDisk(_Total)\Avg. Disk sec/Read",300].avg(600,0)}>0.015

描述:逻辑磁盘的读写延迟
Avg.Disk sec/Read 性能计数器表示从磁盘读取数据所需的平均时间(秒)。
此警报表示从磁盘读取数据所需的平均时间已持续五分钟大于 15 毫秒。达到此阈值时可能遇到的其他症状是:每秒高于预期磁盘传输以及(具体取决于报告此错误的磁盘)Microsoft Exchange 服务器性能可能较差。此警报可能是由磁盘瓶颈引起的。
解决方案:
要解决此警告,请执行下列一项或多项操作:

  • 删除导致磁盘负载的任何可选应用程序。
  • 如果数据库或事务日志驱动器出现瓶颈,您可以减少驱动器上的负载,方法是将用户转移到宿主在尚未接近最大容量的驱动器上的数据库或存储组中。如果所有数据库或事务日志驱动器都接近容量,您可能必须将用户转移到其他服务器。
  • 通过添加更多或更快的轴来增加出现瓶颈的驱动器的容量。 这里我们来了解一下两者的区别

物理磁盘:真实的硬盘我们称为“物理磁盘”,英文叫做“Physicaldisk”。逻辑磁盘:分区后使用的“C:磁盘”、“D:磁盘”…………,泛称为“逻辑磁盘”。一块“物理磁盘”可以分割成一块“逻辑磁盘”,也可以分割成数块“逻辑磁盘”,您可依据您的需要来调整。

内存分析指标

为什么固态硬盘的无法做到内存的存取速度呢?这是因为ROM固态硬盘和RAM内存的实现原理不同导致的。
内存的发展速度已经达到了第五代DDR内存(一般用于显卡上),而我们通常主板上的使用的都是第三代DDR内存,内存的主要性指标是在读写/带宽上,而影响带宽上的指标主要是内存通道及内存频率。
现在常见的内存一般型号为DDR3 1333MHz ,我们可以通过更换更高频率或更低时序的方式来提升内存的带宽。(内存时序是描述内存条性能的一种参数)
内存频率比较好理解,现在“发烧”级别的内存频率可以做到2400MHz,相对于1333MHz的默认频率几乎有了一倍的提升,这种频率的提升,可以换来带宽从16GB到24GB的提升,如果再能降低时序,那么结果会进一步提升。(关于内存时序概念请参考其它文献)。
另外一个提升策略就是通道,简单来说就是让多根内存并行和内存控制器进行交互,从而成倍地提升吞吐能力。对于内存比较了解的朋友,双通道、三通道甚至四通道这些名词应该不会陌生。

五、free mem less 10%
触发器的表达式

1
2
{192.168.43.12:vm.memory.free[percent].last()}<10

描述:当服务器的空闲内存不足10%,
解决方法

  • 第一步就是进行杀毒操作,查看是否是病毒引起的
  • 清除缓存,删除不需要的软件,停止无关紧要的进程,优化程序。
  • 第一条方法是有限的,当程序的使用超过物理的现有资源的话添加物理资源,直接增加内存。
  • 首先通过任务管理器进行进程排序,查找占用内存较大的程序进程。一般占用内存较大的进程有W3WP、sqlserver、mysqld-nt.exe;
  • 站点进程w3wp 可以在cmd命令行中通过 iisapp 命令来对应是那个网站占用内存较大。可以通过设置回收时间、内存最大使用值或共用进程池来减少内存的占用,但是如果要保证网站的访问质量,还是建议升级至更高型号来解决;
  • 数据库 sql server 也可以通过数据库的企业管理器来设置最大内存占用,但是如果网站程序必须要占用较大内存的话,设置后会发生页面报错、打不开等问题;
  • MYSQL本身会占用较大虚拟内存,如果不使用mysql数据库的话,可以将其停止。
  • 六、Pages/sec Pages Input/sec Pages Output/sec Page Fault/sec
    触发器的表达式
    1
    2
    3
    4
    5
    {192.168.43.12:perf_counter["\Memory\Pages Input/sec",300].avg(600,0)}>10
    {192.168.43.12:perf_counter["\Memory\Pages/sec",300].avg(600,0)}>2500
    {192.168.43.12:perf_counter["\Memory\Pages Input/sec",300].avg(600,0)}>200
    {192.168.43.12:perf_counter["\Memory\Pages Input/sec",300].avg(600,0)}>10

1
2
3
4
5
6
如果Page Reads/Sec持续保持为5,表示可能内存不足。Page/sec推荐0-20。如果服务器没有足够的内存处理其工作负荷,此数值将一直很高。如果大于80,表示有问题(太多的读写数据操作要访问磁盘,可考虑增加内存或优化读写数据的算法)。
该系列计数器的值比较低, 说明响应请求比较快, 否则可能是服务器系统内存短缺引起(也可能是缓存太大, 导致系统内存太少)
Page Faults/sec 是处理器每秒钟处理的错误页(包括软错误和硬错误)。Pages Input/sec 是为了解决硬错误页,从硬盘上读取的页数, 而Page Reads/sec是为了解决硬错误,从硬盘读取的次数。Pages/sec是Pages Input/sec 和Pages Output/sec 的总和。
该系列指标是可以显示导致系统范围延缓类型错误的主要指示器。
当处理器向内存指定的位置请求一页(可能是数据或代码)出现错误时,这就构成一个Page Fault。如果该页在内存的其他位置,该错误被称为软错误( 用Transition Fault/sec衡量); 如果该页必须从硬盘上重新读取时, 被称为硬错误。许多处理器可以在有大软错误的情况下继续操作。但是, 硬错误可以导致明显的拖延

1
2
3
5.Memory Pages Input/sec
pages/sec:一般超过小几十就说明内存存在瓶颈,具体的指标含义是指为解决硬页错误从磁盘读取或写入磁盘的速度。这个计数器是可以显示导致系统范围延缓类型错误的主要指示器。它是memory\\pagesinput/sec和memory\\pagesoutput/sec的总和。是用页数计算的,以便在不用做转换的情况下就可以同其他页计数如:memory\\pagefaults/sec做比较,这个值包括为满足错误而在文件系统缓存(通常由应用程序请求)的非缓存映射内存文件中检索的页。一般如果pages/sec持续高于几百,那么您应该进一步研究页交换活动。

4.Lack of available virtual memory on Server 缺少可用的虚拟内存