<span id='lephw'></span>
<ins id='lephw'></ins>
    <i id='lephw'><div id='lephw'><ins id='lephw'></ins></div></i>
    <fieldset id='lephw'></fieldset>
  1. <acronym id='lephw'><em id='lephw'></em><td id='lephw'><div id='lephw'></div></td></acronym><address id='lephw'><big id='lephw'><big id='lephw'></big><legend id='lephw'></legend></big></address>

      <dl id='lephw'></dl>

    1. <tr id='lephw'><strong id='lephw'></strong><small id='lephw'></small><button id='lephw'></button><li id='lephw'><noscript id='lephw'><big id='lephw'></big><dt id='lephw'></dt></noscript></li></tr><ol id='lephw'><table id='lephw'><blockquote id='lephw'><tbody id='lephw'></tbody></blockquote></table></ol><u id='lephw'></u><kbd id='lephw'><kbd id='lephw'></kbd></kbd>
    2. <i id='lephw'></i>

        <code id='lephw'><strong id='lephw'></strong></code>

          linux下简单的自适应CPU利用率的控制

          • 时间:
          • 浏览:6
          • 来源:124软件资讯网

            最近在做的是虚拟化相关的一个demo  ,牵涉到虚拟化情况下的服务器负载平衡 。我们用到一个简朴的case  ,就是在负载泛起“不平衡”的时间 ,举行 live migration  。由于只是demo需要  ,我们的负载暂时只思量到cpu的使用率  。

            而现实准备中 ,由于没有客户端的压力  ,很难做到CPU使用率的准确控 制  。这里写了个简朴的剧本法式 ,通过自顺应的调治  ,来到达将服务器CPU使用率控制在一定的规模内 ,从而为确保在某台服务器CPU过高的时间  ,会自动将虚 拟机live migration到其他CPU使用率低的机械上的测试做了准备  。

            python实现的剧本如下  ,这个剧本需要5个数字参数的输入  ,划分为:

            最低CPU使用率 ,最高CPU使用率  ,初始线程数目 ,每次调治的线程数目  ,每个线程睡眠的时间(毫秒

            固然  ,很大水平上  ,由于硬件情况的差别  ,这些参数带有很强的履历性  。

            #!/usr/bin/python
            import threading
            import time
            import os
            import string
            import sys
            class ControlThread(threading.Thread):


            def __init__(self):
            threading.Thread.__init__(self)
            self.runflag = True #线程运行标示  ,用于未来淘汰线程时能够正常竣事

            def run(self):
            while self.runflag:
            os.popen('usleep ' + sys.argv[5])
            #time.sleep(string.atof(sys.argv[5]))


            #这里使用的是linux下shell内里的usleep  ,而不是python自带的sleep函数 。

            #相比之下  ,usleep照旧相当强盛的  ,而python的sleep单元为秒  ,虽然可以输入浮点数  ,但照旧相对弱了些

            def stop(self):
            self.runflag = False
            #让其正常终止循环
            threadList=[]
            print 'Start Thread Number:' + sys.argv[3] + '\tSleep Time(ms):'+ sys.argv[5]


            #初始化一定数目的线程  ,否则从零最先  ,可能需要很长的时间才气到达指定规模
            for i in range(0,string.atoi(sys.argv[3])):
            thread = ControlThread()
            threadList.append(thread)
            thread.start()


            #这里使用sar来抓取cpu使用率  ,这里指的是总的cpu使用率 。然后通过比力  ,举行自顺应调整
            while True:
            output = 100 - string.atof(os.popen('sar 1 1 | grep ^Average | awk \'{print $8}\'').read())
            print 'CPU Usage:' + str(output) + '\tCurrent Thread Number:' + str(len(threadList))
            if output < string.atoi(sys.argv[1]):#增添线程
            for i in range(0,string.atoi(sys.argv[4])):
            thread = ControlThread()
            thread.start()
            threadList.append(thread)
            print "+++++"
            if output > string.atoi(sys.argv[2]):#淘汰线程
            for i in range(0,string.atoi(sys.argv[4])):
            thread = threadList.pop()
            thread.stop()
            print "-----"

            总的来说  ,这个剧本比力简朴 ,而且在差别的机械上  ,需要操作职员的履历来初始化才气到达最佳效果 。但这究竟是我第一个python法式 ,而且也到达了预期的目的  。以上只是能运行的焦点代码  ,至于usage ,错误处置惩罚  ,退出法式等  ,就没有给出来了:)