【性能优化】-如何降低CPU飙升,解决系统卡主。

【背景】

随着我们系统使用,数据的增多,系统还是之前的架构,那么如何面对数据增多,优化我们系统呢?

【方法】

一、内存

多台服务器,会涉及分布式,而且放到内存重启机器,数据会丢失。

二、中间件

redis可以,但是迁移成本高

三、锁

可以,但是mysql乐观锁和悲观锁,加锁效率会低,操作不当可能导致锁全表

四、分片

在分布式任务调度平台有执行模式,有分片模式,可以先将数据建立一个索引,这个索引就是分配给那台机器处理的编号。

然后在定时任务执行的时候,获取分布式任务调度平台传递的分片,机器根据分片去获取自己所处理的数据。

我们只执行分片有时候效率还是比较低,我们可以再加上多线程,但是多线程没有限制的话,会继续导致CPU的飙升。

java 复制代码
     //分批处理:每批最的数据
        final int batchSize = 25;
        int totalProcessed = 0;
        //创建固定大小的线程池用于处理每个批次
        int processedCount = Runtime.getRuntime().availableProcessors();
        logger.info(" 目前可用的线程数,线程池大小为:" + processedCount);
        int threadPoolSize = Math.min(5,processedCount);//最多使用5个线程,避免过度占用率CPU
        logger.info(" 这次定时任务处理使用的线程数,线程池大小为:" + threadPoolSize);
        ExecutorService batchExecutor = Executors.newFixedThreadPool(threadPoolSize);

   try {
            //遍历所有批次,顺序处理
            for (int batchIndex=0; batchIndex<shardList.size();batchIndex+=batchSize){
                //获取当前批次的任务
                int endIndex = Math.min(batchIndex+batchSize,shardList.size());
                List<ConfigGenerationShard> batch = shardList.subList(batchIndex, endIndex);

                logger.info("TwoBDDeployConfigTaskExecJob 处理批次 " + (batchIndex/batchSize + 1) + "/" +
                        (int)Math.ceil((double)shardList.size()/batchSize) + ", 任务数量: " + batch.size());

                // 在当前批次内使用多线程处理每个任务
                List<CompletableFuture<Void>> futures = new ArrayList<>();

                for (ConfigGenerationShard record : batch) {
                    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
                    //任务逻辑
                            }, batchExecutor);
                    futures.add(future);
finally {
            //关闭线程池
            batchExecutor.shutdown();
        }

这样的话,就完全解决了CPU飙升导致系统卡主的问题,而且处理速度也很快。

相关推荐
余槐i13 小时前
200万行表加索引锁死写入:PostgreSQL CONCURRENTLY 的三类等待与重建路径
数据库·postgresql·性能优化·索引·explain
打工仔折腾 AI16 小时前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录
人工智能·windows·后端·python·深度学习·性能优化·ai agent 实战
@#¥&~是乱码鱼啦17 小时前
ArkWeb 混合手记 07|性能优化、内存管控、内核预热、崩溃防护,整套系列终章
性能优化
lvqinglou17 小时前
学习Sql-part1 for婷姐
sql·学习·性能优化
JMchen17 小时前
性能优化——让Native代码飞起来
android·c++·性能优化
yunwei3718 小时前
eBPF 入门实践教程十七:编写 eBPF 程序统计随机/顺序磁盘 I/O
linux·后端·性能优化
ZHOUPUYU18 小时前
PHP 8.2 的核心高级特性,包括只读类、类型系统增强
android·性能优化·php
ZHOUPUYU18 小时前
PHP 8.0 高级技术实战:从新特性到性能优化
android·性能优化·php
Frag0ut18 小时前
Chrome扩展程序管理技巧:安全安装、权限审查与高效使用指南
chrome·性能优化·谷歌浏览器·浏览器插件·扩展程序管理·权限审查·冲突排查
ZHOUPUYU19 小时前
PHP 高级技术实战:从原理到高并发架构落地
android·性能优化·php