zoukankan      html  css  js  c++  java
  • CUP计算资源争抢通过IIS启用处理器关联解决

    由于业务的复杂性,我们在客户环境部署的时候,采用的是预装好在一台机器然后再把机器安装到客户环境,所以为了简单方便,我们把所有的服务都安装到一台机器上面了.

    在正常的使用过程中是没有任何问题的.但是当有一些复杂的计算资源的时候,就会造成计算资源争抢

    我们的诉求很明显,就是所有服务可以正常运行,这个时候我们就需要限制那些高计算资源占用的服务.

    此处对于造成我们CPU计算资源的两个应用服务分别叫A和B和数据库服务D

    A和B都是托管于IIS中,D是sql server 2014服务

    A是计算资源争抢的元凶,所以我们需要对A服务限制其CPU计算资源的使用

    方案一:限制A服务的最大计算资源使用百分比

    在我们的IIS的应用程序高级池的高级设置中,有CPU设置相关参数如下图

     我们将限制设置成70%,然后将限制的操作(LimitAction)设置成Throttle

    具体参数什么意思可参考下图,图片文档链接

     设置完成上图参数后我们还需要设置一下监视间隔,发现最小1min,也就是说如果发生超出指定比例的资源争抢,操作系统也可能需要1min之后才能发现并释放资源.

    显然这个时间间隔对于线上环境是无法忍受的

    测试后发现基本和预期一样,1min太长了,直接导致B服务无法响应用户需求

    方案一宣布失败

    方案二:指定应用使用的CPU核心

    同样在IIS对应的应用的程序池的高级设置中的CPU配置卡片中进行相关操作

    我们主要是需要用到ProcessorAffinity这个参数,去启用处理器关联掩码

    1.将Processor Affinity Enabled设置成 ture

    2.设置关联的CPU核心.

    第2步设计比较繁琐,我们需要设置每个CPU核心的掩码

    根据微软官方文档介绍,我们需要转成16进制进行设置,官方文档如下截图

      其大致意思是CPU的掩码是从右往左开始数的,以二进制掩码进行标识.第一位是标识符第二位如果是1则使用第一个核心,某一位是0则不启用对应位置的cpu核心,

    将得到的二进制换算成16进制填入参数就行

      我们当前机器的CPU是16核心的,如果所有的核心都允许该应用使用的话则二进制标识就是 0b 1111111111111111,其中0b标识的该数字是二进制.

      我们当前的核心中前5个核心留给其他应用,只给A应用使用后面的11个核心,则我们的二进制标识则是  0b 1111111111100000,

    将0b 1111111111100000换成16进制就是  0xffe0,其中是0x是16进制的标识.

      我们将生成的参数0x1ffc0填入Processor Affinity Mask和Processor Affinity Mask(64)两处,效果如下图

    至此方案二配置完成.我们发现基本上实现我们的预期.应用A只是使用自己指定的核心.

    但是此处又暴力出了另外一个问题.在个别情况下剩余的核心会被D服务消耗完,依然不能给到B.

    方案二补充方案:设置sql server的CPU核心使用数量

    设置sql server就简单很多了

    右击sql server连接服务=>Properties=>Processors

    去除 Automatically set processor affinity mask for all processors的勾选

    然后点击下方的all,选择指定的核心就行,我们选择前两个,如下图所示

    至此我们整个过程配置完成,经测试计算资源抢占导致的B服务失去响应问题完美解决

  • 相关阅读:
    eclipse中的Invalid text string (xxx).
    在jsp文件中出现Unknown tag (c:out)
    eclipse 界面复原
    ecilpse 纠错插件
    Multiple annotations found at this line:- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port.
    调用第三方https接口
    调用第三方http接口
    创建带值枚举
    spring整合redis之Redis配置文件
  • 原文地址:https://www.cnblogs.com/albertay/p/11650053.html
Copyright © 2011-2022 走看看