【性能优化】-如何降低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飙升导致系统卡主的问题,而且处理速度也很快。

相关推荐
醉卧南楼15 小时前
vector在不同场景下的最优声明与数据添加策略
c++·性能优化·vector
AI成长日志16 小时前
【agent专栏】Agent服务化与性能优化——Docker容器化、并发处理、成本控制
docker·容器·性能优化
Coder_Boy_17 小时前
分布式系统“三高”与数据一致性核心实践(基于实操梳理)
java·jvm·spring boot·分布式·微服务·性能优化
步步为营DotNet17 小时前
ASP.NET Core 10中的Blazor WebAssembly性能优化实践
性能优化·asp.net·wasm
QC班长17 小时前
如何进行接口性能优化?
java·linux·性能优化·重构·系统架构
努力进修18 小时前
复杂查询性能优化:连接条件下推的代价模型设计与实践
数据库·sql·性能优化
无心水1 天前
【OpenClaw:应用与协同】23、OpenClaw生产环境安全指南——Token管理/沙箱隔离/权限最小化
大数据·人工智能·安全·ai·性能优化·openclaw
一个天蝎座 白勺 程序猿1 天前
KingbaseES融合数据库:一库多能,企业数据管理新思路
数据库·性能优化·kingbasees·金仓数据库
一起搞IT吧1 天前
Android功耗系列专题理论之十四:Sensor功耗问题分析方法
android·c++·智能手机·性能优化
学编程的小程2 天前
当JOIN条件"下潜"到子查询深处:一场关于查询优化器代价决策的深度实践
性能优化