美文网首页
Java 自定义占用CPU比例工具类

Java 自定义占用CPU比例工具类

作者: Engraver | 来源:发表于2021-02-22 14:30 被阅读0次

一:签名

默而识之,学而不厌,诲人不倦。

如文中有错误之处,望指正!


二:前言

在工作中为了应对检查防止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等容器,不要让真正需要运算的程序无法获取到足够的资源。

相关文章

网友评论

      本文标题:Java 自定义占用CPU比例工具类

      本文链接:https://www.haomeiwen.com/subject/ptzhfltx.html