其他
CUP不足,系统硬件资源保护 保护我方输出
系统保护
程序汪最近开发了一个定时调度场景的业务需求,运营妹子点击触发工单任务,但不会立即执行任务,先进入队列表,然后有个定时任务会5分钟轮训 队列表捞取数据触发执行 ,执行本任务的服务器也会同时跑其他任务,于是程序汪搞了一个保护逻辑 代码其实非常简单
保护我方输出
JAVA通过oshi获取系统和硬件信息
maven 依赖
Java version: 1.8.0_66
Apache Maven 3.1.1
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>3.4.2</version>
</dependency>
业务场景 定时轮训触发大量任务
当前系统硬件资源不足时需要自我保护
//系统资源监控
if (isSysAdequacy()) {
LOG.info("当前系统资源不足 暂停任务执行...");
return ;
}
//执行具体的业务代码 可能是多线程执行
execute{
//业务代码
}
监控系统资源的核心方法
标题写错了 应该是cpu使用率超过90%就停止任务执行
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import com.sun.deploy.util.SystemUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import oshi.SystemInfo;
public class MySystemInfo {
/** 资源入口静态对象 */
private static SystemInfo sysInfo = new SystemInfo();
static Logger Log = LoggerFactory.getLogger(SystemUtils.class);
public static double CPU_USAGE=0.9;
/**
* 当前系统硬件资源不足就降级保护
* @return
*/
public static boolean isSysAdequacy(){
if(getCurrentCpuUsage()>CPU_USAGE){
return true;
}
return false;
}
/**
* 获取当前系统CPU使用率
* 0.4 表示 使用率 40%
*
* @return
*/
public static double getCurrentCpuUsage() {
try {
return sysInfo.getHardware().getProcessor().getSystemCpuLoad() ;
} catch (Throwable t) {
t.printStackTrace();
Log.info("获取当前硬件CPU使用率时出现未知异常.");
return 0;
}
}
}
保护我方输出 一样保护我们的系统服务
测试代码
public static void main(String[] args) throws Exception {
for (int i = 0; i < 2; i++) {
new Thread(() -> {
while (true) {
long w = 1000000;
w = w >> 1;
}
}).start();
}
while (true) {
Thread.sleep(5000);
System.out.println(getCurrentCpuUsage());
}
}
输出cup使用率情况
还有其他的方法,我就不一一演示了
/**
* 获取操作系统整个系统负载
*
* @return
*/
public static double getSystemLoad() {
try {
OperatingSystemMXBean osMxBean = ManagementFactory.getOperatingSystemMXBean();
double systemLoadAverage = osMxBean.getSystemLoadAverage();
return systemLoadAverage;
} catch (Throwable t) {
t.printStackTrace();
Log.info("获取操作系统整个系统负载出现未知异常");
}
return 0;
}
程序汪往期精彩文章包含答案
程序汪最近整理的BAT大小厂面试题(面试题目录推荐)
源码分享 一个基于spring boot的JAVA开源商城系统