如果您一直在编程,那么您可能已经观察到某些情况和场景,其中程序卡住或进程在无限循环中运行,这反过来又对处理该进程的线程的核心施加压力。
有很多这样的情况,这是很有可能的。
我们通常使用不同的技术来避免这种情况,比如在代码逻辑本身中处理它们或使用第三方工具来处理它们。
Linux 还为我们提供了一个命令,我们可以使用它来跟踪 CPU 和内存使用情况的不同参数。命令是top。只需在终端中输入以下命令,您就会看到一个不断变化的表格形状输出。
考虑下面显示的例子 -
Processes: 480 total, 2 running, 478 sleeping, 1914 threads 14:36:22 Load Avg: 2.33, 3.43, 3.41 CPU usage: 20.68% user, 10.90% sys, 68.40% idle SharedLibs: 263M resident, 53M data, 254M linkedit. MemRegions: 179160 total, 1887M resident, 55M private, 494M shared. PhysMem: 8108M used (1722M wired), 82M unused. VM: 3412G vsize, 2318M framework vsize, 5752706(0) swapins, 6194358(0) swapouts. Networks: packets: 22871569/28G in, 5756073/1771M out. Disks: 6360234/144G read, 5499350/85G written. PID COMMAND %CPU TIME #TH 6720 Terminal 51.9 02:49.30 8 130 WindowServer 34.0 07:17:41 12 0 kernel_task 11.8 03:23:39 178/4 24506 top 8.3 00:11.75 1/1
输出乍一看似乎有点复杂,但我们唯一需要考虑的列是 %CPU。它表示当前任务消耗的 CPU 百分比。请注意,在我运行的过程中,它很少超过 20%。
现在,为了在 cpu 中创建尖峰,我们可以使用不同的方法。
第一种也是最常见的方法是使用stress命令。压力命令与 cpu 内核数和/或您希望内核最大化的超时一起使用。
如果你没有安装压力,你可以使用下面显示的命令安装它 -
对于Ubuntu -
sudo apt-get install stress
对于Mac -
brew install stress
stress --cpu n
要么
stress --cpu n --timeout time
您可以使用上面显示的这些命令中的任何一个。
让我们使用第一个命令,我们将要求压力命令最大化我们机器的两个核心。
考虑下面显示的命令 -
immukul@192 ~ % stress --cpu 2 stress: info: [25675] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd输出结果
PID COMMAND %CPU TIME #TH 25676 stress 98.5 00:36.23 1/1 25677 stress 98.4 00:36.42 1/1
在不使用第三方软件包的情况下实现此目的的另一种方法是使用如下所示的简单 linux 代码 -
for i in 1 2 3 ; do while : ; do : ; done & done
上面的单行代码将导致操作系统的三个核心最大化。
immukul@192 Downloads % for i in 1 2 3 ; do while : ; do : ; done & done [2] 25691 [3] 25692 [4] 25693输出结果
PID COMMAND %CPU TIME #TH 25693 zsh 81.7 00:57.12 1/1 25691 zsh 81.4 00:57.00 1/1 25692 zsh 78.6 00:57.00 1/1