58 应用服务 hang 住, 导致服务 503 Service Unavailable

news2024/11/14 0:26:45

前言

 

这是之前 我们测试环境出现的一个问题 

一个项目, 代码调整了之后, 发布到测试环境 之后, 几分钟之后 整个系统访问这个服务 出现了 "503 Service Unavailable", 然后 当时的处理方式为 临时重启服务 

但是过了一会儿之后 同样的问题还是会出现, 导致 前端服务调试不了 

这个我在调试的时候, 没有怎么查看日志, 因为一些信息已经还是比较明显了, 这里会贴出 具体的日志 

假设这个服务为 ServiceA 

jstat 的日志

这是主要的出问题的日志 

从日志上来看, 短时间内 频繁的出现了, 多次 full gc 

从情况上来看, 是真实业务所需要的内存大于 jvm 的内存, 然后 导致 jvm 内存撑满了之后, 持续的进行 gc, 但是 多次 gc 之后, 仍然没有 释放出需要的空间

然后 进而 恶性循环, 此时 当前 jvm, 不断地进行 full gc, 然后 处理不了业务代码 

导致程序 hang 住, 不能处理 外部的请求 

78.13   0.00  45.42  91.30  93.67  91.72    428    3.121    17    3.977    7.098 Allocation Failure   No GC               
78.13   0.00  96.36  91.30  93.67  91.72    428    3.121    17    3.977    7.098 Allocation Failure   No GC               
0.00  70.00   9.08  91.30  93.68  91.72    429    3.132    17    3.977    7.110 Allocation Failure   No GC               
27.50   0.00  56.40  91.31  93.68  91.72    430    3.143    17    3.977    7.120 Allocation Failure   No GC               
27.50   0.00  56.40  91.31  93.68  91.72    430    3.143    17    3.977    7.120 Allocation Failure   No GC               
0.00  76.25  60.94  91.32  93.68  91.72    431    3.150    17    3.977    7.127 Allocation Failure   No GC               
74.38   0.00  22.85  91.33  93.68  91.72    432    3.163    17    3.977    7.140 Allocation Failure   No GC               
74.38   0.00  43.55  91.33  93.68  91.72    432    3.163    17    3.977    7.140 Allocation Failure   No GC               
0.00  67.50  93.22  91.34  93.68  91.72    433    3.173    17    3.977    7.151 Allocation Failure   No GC               
0.00  67.50  93.22  91.34  93.68  91.72    433    3.173    17    3.977    7.151 Allocation Failure   No GC               
0.00  99.35   0.00  98.05  93.68  91.72    435    3.198    18    3.977    7.175 Allocation Failure   Ergonomics          
99.20   0.00  12.25  88.01  92.90  90.64    436    3.238    18    4.396    7.634 Allocation Failure   No GC               
99.20   0.00  12.25  88.01  92.90  90.64    436    3.238    18    4.396    7.634 Allocation Failure   No GC               
0.00   0.00 100.00  99.79  92.90  90.65    437    3.260    25    6.356    9.616 Allocation Failure   Ergonomics          
0.00   0.00  47.14  99.99  92.90  90.65    437    3.260    27    7.279   10.540 Allocation Failure   No GC               
0.00   0.00 100.00  99.97  92.90  90.65    437    3.260    34    9.008   12.268 Allocation Failure   Ergonomics          
0.00   0.00  66.12  75.01  92.90  90.65    437    3.260    34    9.229   12.489 Allocation Failure   No GC               
0.00  99.99  26.89  80.82  92.90  90.65    439    3.298    34    9.229   12.527 Allocation Failure   No GC               
51.31   0.00 100.00  99.93  92.90  90.65    446    3.497    36    9.706   13.203 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.97  92.90  90.65    446    3.497    47   12.625   16.123 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.97  92.90  90.65    446    3.497    58   15.427   18.924 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.95  92.90  90.65    446    3.497    69   18.251   21.748 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.88  92.90  90.65    446    3.497    80   21.010   24.507 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.87  92.90  90.65    446    3.497    91   23.817   27.314 GCLocker Initiated GC Ergonomics          
0.00   0.00 100.00  99.90  92.90  90.65    446    3.497   102   26.689   30.186 Allocation Failure   Ergonomics          
0.00   0.00 100.00 100.00  92.90  90.65    446    3.497   113   29.501   32.998 GCLocker Initiated GC Ergonomics          
0.00   0.00 100.00  99.85  92.90  90.65    446    3.497   125   32.499   35.996 GCLocker Initiated GC Ergonomics          
0.00   0.00 100.00  99.87  92.91  90.65    446    3.497   135   35.293   38.790 Allocation Failure   Ergonomics          
0.00   0.00  98.12  99.90  92.57  90.24    446    3.497   142   38.310   41.807 Allocation Failure   No GC               
0.00   0.00 100.00  99.97  92.57  90.24    446    3.497   142   38.310   41.807 Allocation Failure   No GC               
0.00   0.00 100.00  99.94  92.57  90.24    446    3.497   146   39.412   42.909 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.94  92.57  90.23    446    3.497   153   41.940   45.437 Allocation Failure   No GC               
0.00   0.00 100.00  99.94  92.57  90.23    446    3.497   153   41.940   45.437 Allocation Failure   No GC               
0.00   0.00 100.00  99.95  92.58  90.24    446    3.497   161   43.736   47.233 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.95  92.58  90.24    446    3.497   167   45.457   48.954 Allocation Failure   No GC               
0.00   0.00 100.00  99.95  92.58  90.24    446    3.497   167   45.457   48.954 Allocation Failure   No GC               
0.00   0.00 100.00  99.97  92.58  90.24    446    3.497   178   48.021   51.518 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.97  92.58  90.24    446    3.497   189   50.866   54.363 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.97  92.58  90.24    446    3.497   189   51.111   54.608 Allocation Failure   No GC               
0.00   0.00 100.00  99.97  92.58  90.24    446    3.497   194   52.124   55.621 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.96  92.58  90.24    446    3.497   205   55.105   58.603 Allocation Failure   Ergonomics          
0.00   0.00 100.00  99.96  92.58  90.24    446    3.497   210   56.688   60.185 Allocation Failure   No GC               
0.00   0.00 100.00  99.96  92.58  90.24    446    3.497   210   56.688   60.185 Allocation Failure   No GC               
0.00   0.00 100.00  99.95  92.58  90.24    446    3.497   220   59.279   62.776 Allocation Failure   Ergonomics          
0.00   0.00 100.00 100.00  92.58  90.25    446    3.497   229   62.057   65.554 GCLocker Initiated GC Ergonomics          
0.00   0.00  99.92  99.95  92.58  90.25    446    3.497   229   62.307   65.804 GCLocker Initiated GC No GC               
0.00   0.00 100.00  99.94  92.58  90.25    446    3.497   234   63.286   66.784 GCLocker Initiated GC Ergonomics          
0.00   0.00 100.00  99.94  92.58  90.25    446    3.497   246   66.412   69.909 Allocation Failure   Ergonomics          
0.00   0.00  15.63  74.89  92.58  90.25    446    3.497   249   67.372   70.870 Allocation Failure   No GC               
0.00   0.00  15.63  74.89  92.58  90.25    446    3.497   249   67.372   70.870 Allocation Failure   No GC               
0.00   1.23   8.18  78.34  92.69  90.38    449    3.516   249   67.372   70.888 GCLocker Initiated GC No GC               
0.00   1.23  17.33  78.34  92.69  90.38    449    3.516   249   67.372   70.888 GCLocker Initiated GC No GC      

业务代码的输出日志

一个关键的说明问题的字样是 "GC overhead limit exceeded" 

这个同样能够推导出上面的 "jstat -gccause" 的推导的相关 

Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.getDeclaredMethod(Class.java:2128)
	at java.io.ObjectStreamClass.getPrivateMethod(ObjectStreamClass.java:1431)
	at java.io.ObjectStreamClass.access$1700(ObjectStreamClass.java:72)
	at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:494)
	at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:468)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:468)
	at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:365)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1134)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
	at com.baomidou.mybatisplus.core.toolkit.SerializationUtils.serialize(SerializationUtils.java:61)
	at com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda.resolve(SerializedLambda.java:58)
	at com.baomidou.mybatisplus.core.toolkit.LambdaUtils.lambda$resolve$0(LambdaUtils.java:64)
	at com.baomidou.mybatisplus.core.toolkit.LambdaUtils$$Lambda$1195/322612414.get(Unknown Source)
	at java.util.Optional.orElseGet(Optional.java:267)
	at com.baomidou.mybatisplus.core.toolkit.LambdaUtils.resolve(LambdaUtils.java:63)
	at com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper.columnToString(AbstractLambdaWrapper.java:62)
	at com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper.lambda$columnsToString$0(AbstractLambdaWrapper.java:53)
	at com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper$$Lambda$1193/71871969.apply(Unknown Source)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.apache.ibatis.ognl.OgnlException
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:665)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:665)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	// 省略部分日志
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.getDeclaredMethod(Class.java:2128)
	at java.io.ObjectStreamClass.getPrivateMethod(ObjectStreamClass.java:1431)
	at java.io.ObjectStreamClass.access$1700(ObjectStreamClass.java:72)
	at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:494)
	at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:468)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:468)
	at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:365)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1134)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
	at com.baomidou.mybatisplus.core.toolkit.SerializationUtils.serialize(SerializationUtils.java:61)
	at com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda.resolve(SerializedLambda.java:58)
	at com.baomidou.mybatisplus.core.toolkit.LambdaUtils.lambda$resolve$0(LambdaUtils.java:64)
	at com.baomidou.mybatisplus.core.toolkit.LambdaUtils$$Lambda$1195/322612414.get(Unknown Source)
	at java.util.Optional.orElseGet(Optional.java:267)
	at com.baomidou.mybatisplus.core.toolkit.LambdaUtils.resolve(LambdaUtils.java:63)
	at com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper.columnToString(AbstractLambdaWrapper.java:62)
	at com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper.lambda$columnsToString$0(AbstractLambdaWrapper.java:53)
	at com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper$$Lambda$1193/71871969.apply(Unknown Source)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)

heap 中的对象分析

我们拿到一份 运行时的 dump 文件, 然后使用最简单的 jhat 进行分析 

我们看一下 其中比较占用内存的部分对象, 这一部分是有 业务关联的 

首先是 从业务代码相关的实体开始看 

一个 entity.RkHeatMapRs 会对应于一个 Integer, 两个 Double 

我们路由到 entity.RkHeatMapRs 的整个对象链路 

ResultSetImpl
    一个对应于 321230 个 ByteArrayRow
        一个对应于一个 MysqlTextValueDecoder
        一个对应于一个 [[B
        一个对应于三个 [B
        一个对应于一个 entity.RkHeatMapRs
            一个对应于一个 java.lang.Integer
            一个对应于两个 java.lang.Double

然后 我们大致统计一下 这里实际的业务场景中多个 entity.RkHeatMapRs 占用的内存相关开销 

321230 个 ByteArrayRow = 32 * 321230 = 10M
    一个对应于一个 MysqlTextValueDecoder, 16 * 321230 = 5M
    一个对应于一个 [[B = 40 * 321233 = 12M
    一个对应于三个 [B = 取决于业务数组长度, 24 * 973275 = 23M
    一个对应于一个 entity.RkHeatMapRs, 40 * 516380 = 20M
        一个对应于一个 java.lang.Integer, 16 * 294759 = 4M
        一个对应于两个 java.lang.Double, 24 * 1072068 = 25M
合计 100M 左右

这里是完整的 RkHeatMapRsMapper.query 查询出来的结果 

然后 其中的可以回收的对象有 ByteArrayRow, MysqlTextValueDecoder, [B, [[B 

所以 经过 gc 之后内存中持续占用的空间有 321230 个 entity.RkHeatMapRs, 和其关联的 321230 个 java.lang.Integer, 和 2 * 321230 个 java.lang.Double, 合计占用空间 50M 

然后 当下一次 执行 RkHeatMapRsMapper.query 的时候

内存中合计会占用 原有的 entity.RkHeatMapRs 的相关的 50M

以及新的一个批次查询的 entity.RkHeatMapRs 的相关 50M, 和相关的 ByteArrayRow, MysqlTextValueDecoder, [B, [[B 合计 50M 

然后 内存中持有的是 其他的常驻内存的对象, 其他的 staticHolder, 其他的字符串常量, 关联的字节数据 等等 

然后 持久需要占用内存 超过了 jvm 可以控制的 new + old 

造成了 "GC overhead limit exceeded", 进而 造成了 服务本身的 "503 Service Unavailable"

测试环境的资源情况

出现问题的测试环境资源情况为 容器可用最大内存为 512M, jvm 可用的最大堆内存为 512M 

扣除掉 100M 的 metaspace, 堆可用的最大内存为 412M 

扣除 case 中硬性需要占用的 entity.RkHeatMapRs 相关的空间 150M 

其他可用空间为 262M 

其他的业务常驻内存 + 字符串常量常驻内存, 这么一计算 就内存更加匮乏了

为了 更好的复现这个问题, 我将内存更新为了 256M 

这样, 复现这个问题 就更加轻松了 

问题的解决

增大 容器可用的内存, 以及 jvm 可以使用的最大堆内存 

或者 减小一次性加载到内存的业务数据的数量, 比如这里的 entity.RkHeatMapRs 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Functions重要部分

Functions1. Defining Functions2. Looking Up Names in Environments1. Defining Functions 赋值&#xff08;Assignment&#xff09;是一种简单的抽象方式&#xff1a;把值&#xff08;values&#xff09;和名称&#xff08;names&#xff09;联系起来。 定义函数&#xff0…

《从零开始编写一个直播服务器》 C++ 实现一个最简单的RTSP流媒体服务器

流媒体开发系列文章 文章目录流媒体开发系列文章前言一、rtsp流是什么&#xff1f;二、使用步骤1.服务器代码总结前言 在安防行业中&#xff0c;onvif协议与gb协议是两种标准&#xff0c;gb是国内安防行业的标准&#xff0c;onvif是国外的安防行业的标准&#xff0c;其中gb281…

AcWing 1013. 机器分配(分组背包问题与方案记录)

一、题目 二、思路 这道题其实不太容易看出背后的模型。这道题本质上是一个分组背包问题。我们将每一个公司看成一组&#xff0c;而在每一个组内&#xff0c;将不同情况下的盈利状况看作物品的价值&#xff0c;而得到这种利益所需的机器数目看作物品的体积。 因此&#xff0c…

SpringSession笔记

第一章、Session会话管理概述Session和Cookie回顾Session机制由于HTTP是无状态的协议&#xff0c;每次浏览器与服务器的交互过程就是一次对话&#xff0c;对话结束之后服务器不能记住你这个人。下次对话的时候服务端无法识别你是上次的人&#xff0c;所以需要一种机制来记录用户…

Win10 突然蓝屏安全模式进不了,没有别的电脑和装机U盘,怎么把资料临时导出来?

环境: Win 10专业版 DELL 3490 移动硬盘/普通U盘 问题描述: Win10 突然蓝屏安全模式进不了,没有别的电脑和装机U盘,怎么把资料临时导出来?目前可以进入Win RE 疑难-高级选项 解决方案: 1.先插入,移动硬盘或者普通U盘 2.多重启几次,自动修复系统失败画面,点击高…

Linux嵌入式开发——压缩与解压缩

文章目录Linux嵌入式开发——压缩与解压缩一、前期准备二、Linux下的压缩格式三、gzip压缩工具1、gzip压缩文件2、gzip压缩文件夹四、bzip2压缩工具五、tar打包工具tar参数对.tar.bz2进行压缩和解压缩压缩解压缩对.tar.gz进行压缩和解压缩压缩解压缩六、其他格式的压缩和解压缩…

Qt扫盲-网络编程概述

网络编程概述一、Qt网络编程概述二、Qt对Http&#xff0c;FTP应用层协议支持三、TCP通信编程支持四、UDP通信编程支持五、主机信息的获取六、网络代理七、底层管理的支持一、Qt网络编程概述 Qt Network模块提供了允许我们编写TCP/IP客户端和服务器的类。它提供了低级类来完成基…

【Java寒假打卡】JavaWeb-Session

【Java寒假打卡】JavaWeb-Session概述常用的方法HttpSession的获取HttpSession的使用概述 常用的方法 HttpSession的获取 HttpSession的使用 在第一个Servlet中获取请求的用户名获取HttpSession对象将用户名设置到共享数据中在第二个Servlet中获取HttpSession对象获取共享数据用…

java8新特性

接口中默认方法修饰为普通方法&#xff0c;实现接口时不需要重写方法Lambda表达式Stream流并行流原理校验当前对象是否为null当前对象为null,设置默认值 接口中默认方法修饰为普通方法Lambda表达式使用Lambda表达式 依赖于函数接口 在接口中只能够允许有一个抽象方法在函数接…

SpringCloud笔记

2023年最新笔记&#xff0c;全文约 3 万字&#xff0c;蕴含 Spring Cloud 常用组件 Nacos、OpenFeign、Seata、Sentinel 等 〇、简介 什么是Spring Cloud&#xff1f; ​ Spring Cloud是一系列框架的有序集合&#xff0c;是一种基于微服务的分布式架构技术。它利用 Spring Boot…

HBuilder的安装与试用

准备把前端框架Layui仔细学习一遍&#xff08;虽然Layui已经过了最流行的时候&#xff0c;但是很多项目都在用它&#xff09;&#xff0c;在B站找了一套《Layui框架精讲全套视频教程》&#xff0c;视频作者实操Layui时用的工具很方便&#xff0c;从弹幕中看到说用的是HBuilder&…

Springcloud 笔记

微服务架构微服务架构是一种架构模式&#xff0c;它体长将单一应用程序划分成一组小的服务&#xff0c;服务之间相互协调&#xff0c;互相配合&#xff0c;为用户提供最终价值。每个服务运行在其独立的进程中&#xff0c;服务与服务之间采用轻量级的通信机制**(如HTTP)互相协作…

电商直通车主图设计教程

商直通车主图设计教程&#xff01;无门槛在线设计&#xff0c;零基础轻松入门的电商设计工具&#xff0c;轻松就能搞定的主图设计工具&#xff0c;下面跟着小编的设计教程&#xff0c;一起学习如何使用在线工具乔拓云轻松设计专属的商品直通车主图&#xff0c;在线模板轻松设计…

Cadence PCB仿真使用Allegro PCB SI生成延迟仿真报告及报告导读图文教程

🏡《Cadence 开发合集目录》   🏡《Cadence PCB 仿真宝典目录》 目录 1,概述2,生成报告3,报告导读4,总结1,概述 本文简单介绍使用Allegro PCB SI生成网络的延迟性能评估的报告的方法,及延迟报告要点导读。 2,生成报告 第1步,选择需要生成报告的网络,然后单击右…

深度估计算法原理与论文解读

论文地址: Monocular Depth Estimation Using Laplacian Pyramid-Based Depth Residuals | IEEE Journals & Magazine | IEEE Xplore 深度估计算法原理 1.深度估计任务概述 深度估计,即通过输入的彩色图像,获得每个像素点离相机距离的远近(热度图) ,热度图的深浅表…

Linux内核显卡驱动(LVDS)初探

目录 0. 前言 1. menuconfig 2. 编译报错与打补丁 3. 设备树与display-timings 4. 拓展&#xff1a;RGB24 0. 前言 这次的工作主要是把某项目设备上(iMX6DL)的内核版本从 4.19.x 升级到 5.15.32&#xff0c;是作为该项目整个BSP升级计划的一部分。 该内核升级工作移交给…

Spring Cloud Alibaba商城实战项目基础篇(day03)

五、后台管理 5.1、商品服务 5.1.1、三级分类 5.1.1.1、查询所有菜单与子菜单 我们需要维护所有菜单以及各种子菜单&#xff0c;子菜单里面可能还有子菜单&#xff0c;所以我们采用递归的方式进行书写。 我们先在CategoryController中修改list方法&#xff0c;让他以组装树…

Day868.索引(上) -MySQL实战

索引&#xff08;上&#xff09; Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于索引&#xff08;上&#xff09;的内容。 某一个 SQL 查询比较慢&#xff0c;分析完原因之后&#xff0c;可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引&…

linux部署java项目cpu占用100%的排除故障

用top -c命令查看cpu占用高的进程 ![在这里插入图片描述](https://img-blog.csdnimg.cn/12af3f060fb84ce98b24c7247546b50b.png 发现cpu占用为99%的进程pid为24857 用top -Hp 24857查看cpu占用最高的线程 发现占用cpu97.3%的线程id为24926 将24926转为16进制 通过jstack查看进…

袋式除尘器—选型计算

1.处理气体量的计算计算袋式除尘器的处理气体时&#xff0c;首先要求出工况条件下的气体量&#xff0c;即实际通过袋式除尘器的气体量&#xff0c;并且还要考虑除尘器本身的漏风量。这些数据&#xff0c;应根据已有工厂的实际运行经验或检测资料来确定&#xff0c;如果缺乏必要…