一、cpu的使用率计算
cpu的使用率的获取可以通过top命令或者/proc/<pid>/stat文件
以下是计算cpu使用率有关的参数:
pid=17184 |
进程号 |
utime=45010 |
该任务在用户态运行的时间,单位为jiffies |
stime=4050 |
该任务在核心态运行的时间,单位为jiffies |
cutime=0 |
所有已死线程在用户态运行的时间,单位为jiffies |
cstime=0 |
所有已死在核心态运行的时间,单位为jiffies |
#参考python包psutil源码 def cpu_percent(self, interval=None): def timer(): return time.time() * 1000 st1 = timer() pt1 = self._proc.cpu_times() time.sleep(interval) st2 = timer() pt2 = self._proc.cpu_times() delta_proc = (pt2.user - pt1.user) + (pt2.system - pt1.system) delta_time = st2 - st1 try: cpu_percent = ((delta_proc / delta_time) * 100) except ZeroDivisionError: return 0.0
单进程cpu使用率计算:
① 每一个进程快照均为 (utime、stime、cutime、cstime)的4元组;
② 采样两个足够短的时间间隔的进程快照
③ 计算该进程的cpu使用率pcpu = 100*(processCpuTime2 – processCpuTime1) / (totalCpuTime2 – totalCpuTime1)
二、控制原理
假设给定总时间100ms,需要限制进程A的CPU使用率是25%。则进程A的执行时间25ms,剩余时间不让进程A执行就可以了。Linux中断信号中SIGSTOP/SIGCONT可以实现进程的暂停和激活,这样就能将程序CPU使用率随意控制了。
#参考python包psutil源码 def cpu_percent(self, interval=None): def timer(): return time.time() * 1000 st1 = timer() pt1 = self._proc.cpu_times() time.sleep(interval) st2 = timer() pt2 = self._proc.cpu_times() delta_proc = (pt2.user - pt1.user) + (pt2.system - pt1.system) delta_time = st2 - st1 try: cpu_percent = ((delta_proc / delta_time) * 100) except ZeroDivisionError: return 0.0
原文地址:http://blog.51cto.com/12814931/2131942
时间: 2024-11-11 06:49:49