在乙個計算機系統中,cpu是乙個有限的核心的資源,有時為了充分利用cpu的資源,我們會把業務混合部署到一台機器上,這些業務有可能包括核心業務和非核心業務,為了不影響核心業務,我們需要限制非核心業務cpu資源的利用率。
如果乙個程序的cpu利用率是40%,表示這個程序占用了40%的cpu時間。那麼為了限制程序的cpu不超過40%,我們可以讓這個程序執行40%的時間,然後停止60%的時間。通過給程序傳送sigcont和sigstop訊號可以控制程序的啟停。
根據上面的原理,**如下:
#include #include #include #include #include #include #include #include #include static int g_process_count = 8;
static int g_cpu_usage = 80;
static std::vectorg_child_processes;
static int g_show_usage = 0;
static void show_usage()
int child_main()
return 0;
}int main(int argc, char* argv)
, ,,};
c = getopt_long(argc, argv, "c:u:?h", long_options, &option_index);
if (c == -1)
break;
switch (c)
}if (optind != argc)
if (g_show_usage)
fprintf(stdout, "process count %d cpu usage %d\n", g_process_count, g_cpu_usage);
for (int i = 0; i < g_process_count; ++i)
if (pid == 0)
g_child_processes.push_back(pid);
}for (;;)
usleep((100 - g_cpu_usage) * 1000);
for (std::vector::const_iterator iter = g_child_processes.begin(); iter != g_child_processes.end(); ++iter)
usleep(g_cpu_usage * 1000);
}return 0;
}
使用g++ -o ./cpu_limit_test ./cpu_limit_test.cpp編譯,執行./cpu_limit_test --process-count=4 --cpu-usage=30的效果如下:
process-count引數指定建立的子程序的個數,cpu-usage引數表示cpu的上線。上面的**,首先建立process-count個子程序,每個子程序都是乙個死迴圈;父程序每隔一段時間給所有的子程序傳送sigcont和sigstop訊號來控制子程序的執行,進而達到控制cpu資源利用率的目的。
linux c控制cpu利用率
1 在x86體系結構中系統定時器的預設頻率是100,即i386處理上的每秒鐘時鐘中斷100次。所以在i386中每10ms產生一次時鐘中斷。2 程序排程,可能是主動讓出cpu,也可能是時鐘中斷中讓出cpu。3 控制cpu的利用率,實際上是控制cpu在totaltime時間內繁忙的時間busytime。...
Linux下限制程序的CPU利用率
運維生存時間的雲伺服器也用了大半年了,隨著上面的程式越來越多,cpu有時候會力不從心,有些程序是可以限制cpu的.cpuliimt完美的解決了這個問題。cpulimit安裝使用都非常簡單,大家往下看。1.cpulimit安裝 1.1 ubuntu debian 1 apt get install c...
Linux下CPU的利用率
cpu利用率是對系統進行效能分析的重要因素,本文將說明cpu時間的組成以及利用率的計算方法。核心中的時間 具體說明cpu的各種時間之前,先說明核心中幾個重要的時間概念。hz是系統時鐘在一秒內固定發出時鐘中斷的次數。hz在編譯核心前是可以進行配置的,因此通過下述命令就可以檢視當前系統的時鐘中斷頻率 1...