zoukankan      html  css  js  c++  java
  • CPU100%问题解决

    CPU 缓存

      伪共享 --- CPU 缓存了不需要缓存的数据,导致外部读取 影响程序的时间

      缓存行填充 --- 强行把数据隔离开【空间换时间】

      多线程优化的本质,就是 空间换时间,更多的服务器,

      程序优化 ----> 单次 ------>  事少

      资源少 ----> 时间短

    死锁

      jcmd 看当前机器 jvm 进程信息,让它执行指令

      jstack : Found one java-level dealLock

      对应生产环境,用户反馈有些功能,点击之后没有结果,一直转圈圈。

      当前系统在忙什么。

    jstack 6364

    打印 

                           

    CPU 100%

      top 命令查看当前系统资源情况

      cpu 可以达到 200% 或者更高

      程序优化 ----> 单次 ----> 事少

      资源少 ----> 时间短     

        1、top 找到进程 --- 对应进程的 ID 【27605】

      

      2、线程本身 操作系统的资源,进程管理单元

      3、找到资源占用比较高的线程

    top -H -p 27605 

        之后显示了,各个线程的运行状况, 可以看到 【27625】CPU 占用 98.7

          

      4、查看对应线程状况

    jstack 27625 

        

       把屏幕内容输入到文件

    jstack 27625  > 202008.log  

         

                     27625 的十六进制是 【0x6B19】对应下图的线程

          

           可以看到下图,划线的是代码第 9 行

               

          对应代码的如下图,第 9 行

                

    活锁 --- jstack 检测不出来

        park unpark  wait/ notify 一直处于等待的情况

        利用工具查看线程的状态是否长时间处于  wait 

    线程数量多少合适

        业务场景:点赞请求,保存点赞操作 --- 保存点赞历史 --- 统计点赞次数

        电脑配置:8 核  16 G

        问题   :达到 1 秒 处理 1000 个请求, 是否能够实现?

        java, jmeter, mysql, redis

        1、分析业务流程的处理步骤 ----- 单次处理程序需要 40 ms   

          a、java 程序调用 ---> 9.78 ms 一次 

          b、mysql 程序插入【或查询】---->  6000ms/ 2000次 = 30 ms 一次请求

          c、redis 点赞次数统计  ----> 假设 11000 ms / 5000 次 = 0.22 ms 一次 redis 请求

        2、 tomcat 接收请求 --->  线程数量

          a、归属于 java 程序运行的时间,非等待的时间 ---- 10ms

          b、单核 CPU ---> 一秒处理的请求 1000ms / 10 ms = 100 请求 【乘以CPU核数】

          c、(理论)如果是 8 线程【I/O型】,CPU 的空闲时间 3/4 ---- 理论达到 100% 利用 --- 32线程

            CPU 跑满,8 核支撑 800 /s     

        3、实际上,波动,取一个可以接受的值,要求 40ms 就返回    

         [公式作用] 面试的作用, 不要太离谱

              面试 问 公司服务器什么样,答:qps 5000/s,

                 再问:电脑配置8核16G;

                 问:RT是多少(Response Time)

         [实际使用] 理解推理过程,结合性能测试,不断调整,达到最优

              推理过程  6000 / 3  = 2000, 10000 / 5 = 2000 qps 是 查询量( tps 是事务请求)

    线程的数量

        计算型:线程任务没有太多等待/阻塞, 线程数量和CPU 核数接近

        I/O 型:网络 I/O, 磁盘 I/O 场景多阻塞,所以线程多一些

        【注意】如果超过一定数量,会导致 其他资源 不够用

    内存和CPU 都爆掉的情况 --- 实际

        警报

        两台机器 后台运营系统出现内存占用率,CPU使用率都高

        切断两天机器访问,不分配流量

        堡垒机--线上排查---【切断访问,内存占用,CPU 没有降低】

        ssh 操作比较慢,一台机器 10 分钟还是处于 高资源占用,一台机器出现 OOM 异常,产生日志,

        事后排查 ---- 内存快照 

        故障原因, 从数据库查询一个结果集

        分页没有添加限制、默认值 ----- 前端出现加载问题,根据未分页查询结果

        三百万多的数据全部查出来了 

        内存不够 ---- 内存 OOM 原因 ---->

        导致其他请求 --->  堆积 ----> 处理很慢, CPU 使用率高

          

  • 相关阅读:
    ThreeJS中文字体乱码问题
    ThreeJS简介
    Sentence-Transformer的使用及fine-tune教程
    NLP(三十三):sentence-transformers句子相似度官方示例
    NLP实践——基于SBERT的语义搜索,语义相似度计算,SimCSE、GenQ等无监督训练(非常重要)
    NLP(十一):sentence_BERT
    Python读取Word文档段落或者表格
    2019寒假作业1 打印沙漏
    错误了。不知道怎么删除博文
    python PaddleOCR安装方法
  • 原文地址:https://www.cnblogs.com/Jomini/p/13854150.html
Copyright © 2011-2022 走看看