模拟CPU满载
首先查看cpu核心数
1.如果是在服务器上,可以使用如下命令
查看cpu信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看cpu个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
查看cpu核心数
cat /proc/cpuinfo | grep "cpu cores" | uniq
查看逻辑cpu个数
cat /proc/cpuinfo | grep "processor" | wc -l
2.如果是在mac电脑上,可使用如下命令
sysctl machdep.cpu
模拟cpu满载
由于我是在在本地模拟
public static ExecutorService commonService = null;
public static Integer THREAD_MAX = 8 ;
static {
commonService = Executors.newFixedThreadPool(THREAD_MAX);
}
@ApiOperation("注册接口")
@GetMapping(path = "/fullCpu", produces = MediaType.APPLICATION_JSON_VALUE)
public Result fullCPU() {
commonService.execute(() -> {
log.info("testExcutors 线程开始执行----->" + Thread.currentThread().getName());
for (;;) {
int i = 0;
I++;
if (i == Integer.MAX_VALUE) {
log.info("testExcutors 线程开始结束----->" + Thread.currentThread().getName() + ", i = " + i);
break;
}
}
log.info("testExcutors 线程开始结束----->" + Thread.currentThread().getName());
});
return Result.success();
}
因此理论上调用该接口8次,cpu会满载,来看下前后对比图
通过jmeter观察前后变化
cpu使用高时如何定位
1.top 指令查询当前进程cpu使用情况
2.从上面指令结果中获取cpu占用较高进程的pid, 使用jstack 命令查看想成情况 如进程号是64913 ,则jstack 64913