一:签名
默而识之,学而不厌,诲人不倦。
如文中有错误之处,望指正!
二:前言
在工作中为了应对检查防止cpu使用率较低而被降配的情况,需要主动增加cpu使用率。下面的工具类是通过java的实现方式。
三:参考资料
忘了是从哪个地方复制的了,在此感谢所有的博主吧。
四:主要内容
下面的代码开启两个线程每个线程占用cpu的50%,相当于占用了一个cpu。(可根据实际情况自行选择)
例如原服务器是4个cpu,利用率为20%。启用下面代码后相当于占用一个cpu即利用率增加了25%,启动后利用率则为45%。
/**
* @author Engraver
* @title: TomcatListener
* @projectName engraver_study
* @date 2020/11/18 18:53
* @description: tomcat 监听器
*/
public class TomcatListener implements ServletContextListener {
/**
* 监听器初始化执行
* @param servletContextEvent
*/
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("执行了后台任务方法");
// 1. 初始化线程
Thread threadA = new Thread(new Runnable() {
@Override
public void run() {
lineGraph(0.5);
}
});
Thread threadB = new Thread(new Runnable() {
@Override
public void run() {
lineGraph(0.5);
}
});
// 2. 设置为守护线程并启动
threadA.setDaemon(true);
threadA.start();
threadB.setDaemon(true);
threadB.start();
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
/**
* 定义时间片大小(毫秒)
*/
public static final double TIME = 1000;
/**
* 占用固定比例CPU
* @param rate 比例
*/
private static void lineGraph(double rate){
while (true){
// 1. 调用做点简单工作的方法
doSomeSimpleWork(rate * TIME);
// 2. 线程休眠
try {
Thread.sleep((long) (TIME - rate * TIME));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 占用CPU方法
* @param time
*/
private static void doSomeSimpleWork(double time) {
// 计算当前时间和开始时间的差值是否小于时间片的比例
long startTime = System.currentTimeMillis();
while ((System.currentTimeMillis() - startTime) < time) {
}
}
}
五:总结
这种方式一般是为了应对特殊情况,要记得过后停止运行此代码的tomcat等容器,不要让真正需要运算的程序无法获取到足够的资源。