【Kubernetes知识点】解读HPA的 thrashing(抖动)问题
【Kubernetes知识点】解读HPA的 thrashing(抖动)问题
目录
- 1 概念
- 1.1 什么是 Thrashing 现象?
- 1.2 HPA 中 Thrashing 产生的原因
- 1.3 解决 Thrashing 的优化措施
- 1.3.1 设置合适的阈值
- 1.3.2 使用自定义指标和基于负载的自动扩缩
- 1.3.3 增加扩缩容的稳定性窗口
- 2 实验:模拟 HPA 的 Thrashing 现象与优化效果
- 2.1 实验环境准备
- 2.2 创建 php-apache Deployment
- 2.2.1 Deployment YAML 文件:
- 2.2.2 通过autoscaling/v2配置 HPA
- 2.3 生成负载波动
- 2.3.1 模拟负载生成
- 2.3.2 交替运行高负载和低负载:
- 2.4 观察 HPA 行为
- 2.4.1 监控 HPA 状态
- 2.4.2 观察扩容过程
- 2.5 第一次停止负载测试
- 2.6 观察缩容行为
- 3 总结
- 4 参考资料
❤️ 摘要:在 Kubernetes 集群中,Horizontal Pod Autoscaler (HPA) 是通过自动调整 Pod 的副本数量,来根据应用负载动态地进行弹性扩展。然而,由于监控的指标(如 CPU 或内存使用率)可能频繁波动,这会导致 HPA 的扩缩容操作变得频繁不稳定,产生所谓的 thrashing(抖动) 或 flapping(摆动) 现象。本文带读者了解这种现象,并实践在Kubernetes的优化措施。
1 概念

❓ 思考:在深入了解了HPA弹性扩展的机制后, 首先会被其灵活性和自动化程度惊喜到,但是转念想,在真实的业务场景中,性能的不稳定波动是时常的事情,这是否会导致HPA频繁的扩缩容,反而会损坏大量的计算资源和降低业务质量, 对此应该如何解决呢?
1.1 什么是 Thrashing 现象?
在弹性扩展过程中,由于监控的指标(如 CPU 或内存使用率)不断波动,副本数量可能频繁变化,这种现象称为 thrashing(抖动) 或 flapping(摆动)。HPA 如果没有足够的时间窗口来稳定系统,会因瞬时波动而多次执行扩容和缩容。就像一个控制系统在面对持续变化的输入时,频繁地切换输出状态一样,类似于控制系统中的滞后现象(hysteresis)。

如上图所属,这种现象不仅会消耗更多的计算资源,还会影响服务的稳定性。例如 Pod 在频繁的扩缩容中可能无法及时响应请求,导致请求失败或服务性能下降。
1.2 HPA 中 Thrashing 产生的原因
Thrashing 现象有以下几个原因所引发:
- 指标波动剧烈:当应用的负载短时间内大幅度变化时,HPA 会紧跟指标频繁调整 Pod 数量。
- 没有足够的稳定性窗口:如果没有配置适当的稳定性窗口,短期内的资源波动会触发HPA不必要的扩缩容操作。
- 资源请求和限制设置不当:Pod 的资源请求和限制设置不合理,可能会导致指标过于敏感,产生误判。
1.3 解决 Thrashing 的优化措施
为了解决 HPA 中的 Thrashing 问题,我们可以通过几种方法来提高系统的稳定性。
1.3.1 设置合适的阈值
观察业务正常情况负载情况,调整 HPA 的目标指标阈值和扩缩容的上下限范围到合理指标,使系统对短期波动不敏感。例如:
- CPU 或内存的目标使用率:将目标 CPU 或内存利用率设置为合适的范围,例如将目标 CPU 使用率设置为 70%,而不是 50%,以避免在轻微波动时触发扩缩容。
- 最小和最大副本数:为应用设置合适的最小和最大 Pod 副本数量,防止 HPA 在负载波动时触发过大幅度的扩缩容。
1.3.2 使用自定义指标和基于负载的自动扩缩
对于复杂场景下的应用,CPU 或内存指标可能无法完全反映实际的负载情况。你可以通过 自定义指标(Custom Metrics) 和 外部指标(External Metrics) 结合业务需求进行扩缩容决策。例如根据请求的延迟时间、请求量或其他关键业务指标来决定是否需要扩缩容。
自定义指标可以通过 Prometheus 等监控系统集成到 Kubernetes 中,并由 HPA 进行决策。
1.3.3 增加扩缩容的稳定性窗口
通过调整组件参数或者行为策略可以有效减少短时间内由于负载波动导致的扩缩容。可以通过修改这些参数来延长等待时间,从而避免因瞬时负载变化引发的频繁扩缩。
❔ 说明:Kubernetes v1.23之前, 通过kube-controller-manager的参数控制
Kubernetes 中,HPA 的缩容和扩容操作分别有两个参数控制:
--horizontal-pod-autoscaler-downscale-delay:控制缩容时的最小等待时间,默认为 5 分钟。这意味着即使 HPA 监测到需要缩容,也至少会等待 5 分钟再执行实际操作。--horizontal-pod-autoscaler-upscale-delay:控制扩容时的最小等待时间,默认值为 3 分钟。
❔ 说明:Kubernetes v1.23之后,
autoscaling/v2API版本支持自定义HPA行为。
默认行为策略与 HPA 算法中的现有行为相匹配。
behavior:scaleDown:stabilizationWindowSeconds: 300policies:- type: Percentvalue: 100periodSeconds: 15scaleUp:stabilizationWindowSeconds: 0policies:- type: Percentvalue: 100periodSeconds: 15- type: Podsvalue: 4periodSeconds: 15selectPolicy: Max
❔参数说明:
1. 缩容策略 (scaleDown)
stabilizationWindowSeconds: 300:缩容的稳定窗口期为 300 秒,当 HPA 检测到负载下降时,它会等待 300 秒(5 分钟)后再开始缩容。policies:配置了缩容的策略。type: Percent:根据百分比进行缩容。value: 100:每次缩容可以减少当前 Pod 副本数的 100%,也就是说在 300 秒的窗口期之后,缩容可以将所有副本直接减少到 0。periodSeconds: 15:缩容策略每 15 秒检查一次 Pod 的缩容需求。
2. 扩容策略 (scaleUp)
stabilizationWindowSeconds: 0:扩容没有稳定窗口期。也就是说,HPA 监测到负载增加后,会立即触发扩容操作。policies:配置了扩容的策略。- 第一条策略:
type: Percent,value: 100,periodSeconds: 15。扩容时,最多每 15 秒将 Pod 副本数增加当前 Pod 数量的 100%,即翻倍。 - 第二条策略:
type: Pods,value: 4,periodSeconds: 15。扩容时,最多每 15 秒可以增加 4 个 Pod。
- 第一条策略:
selectPolicy: Max:当有多条扩容策略时,选择扩容幅度最大的策略。在此配置下,HPA 会选择每 15 秒增加 4 个 Pod,或将 Pod 数量翻倍,取其中增长最多的策略。
2 实验:模拟 HPA 的 Thrashing 现象与优化效果
本次实验旨在通过模拟负载波动场景,使用 autoscaling/v2 的 Behavior 配置,来观察 Horizontal Pod Autoscaler (HPA) 的扩缩容行为,并解决由于负载波动导致的 Thrashing(频繁扩缩容)现象。
2.1 实验环境准备
- 部署 Kubernetes 集群
- 安装 Metrics Server 或 Prometheus 作为指标采集工具
2.2 创建 php-apache Deployment
首先,我们用回《一文读懂HPA弹性扩展以及实践攻略》的案例,创建一个Deployment,用于模拟波动负载下的扩缩容。
2.2.1 Deployment YAML 文件:
apiVersion: apps/v1
kind: Deployment
metadata:name: php-apache
spec:replicas: 1selector:matchLabels:run: php-apachetemplate:metadata:labels:run: php-apachespec:containers:- name: php-apacheimage: harbor.zx/hcie/hpa-exampleports:- containerPort: 80resources:limits:cpu: 200mrequests:cpu: 100m
---
apiVersion: v1
kind: Service
metadata:name: php-apachelabels:run: php-apache
spec:ports:- port: 80selector:run: php-apache
创建Deployment
kubectl apply -f php-apache.yaml
该 Deployment 创建了一个 Web 服务器,并设置了 CPU 请求(100m)和 CPU 限制(200m),确保在负载上升时有足够的资源消耗来触发 HPA。
2.2.2 通过autoscaling/v2配置 HPA
使用 autoscaling/v2 API 版本创建 HPA,并通过 Behavior 配置控制扩缩容行为。
配置HPA YAML 文件(带有 Behavior 配置):
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: php-apache-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: php-apacheminReplicas: 1maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50 # 目标 CPU 利用率为 50%behavior:scaleUp:stabilizationWindowSeconds: 60 # 稳定时间窗口为 60 秒policies:- type: Percentvalue: 100 # 每次扩容最多增加 100% 的副本数量periodSeconds: 30 # 每 30 秒检查一次扩容需求scaleDown:stabilizationWindowSeconds: 300 # 缩容的稳定时间窗口为 300 秒policies:- type: Percentvalue: 50 # 每次缩容最多减少 50% 的副本数量periodSeconds: 60 # 每 60 秒检查一次缩容需求
❔ 配置说明:
| 策略 | 参数 | 说明 |
|---|---|---|
scaleUp | stabilizationWindowSeconds: 60 | 扩容时,会等待至少 60 秒,以确保负载的上升是持续性的,而不是瞬时波动。 |
value: 100 | 每次扩容时,Pod 数量最多增加 100%(即翻倍)。 | |
periodSeconds: 30 | 每 30 秒检查一次扩容的需求。 | |
scaleDown | stabilizationWindowSeconds: 300 | 缩容的稳定窗口期为 5 分钟,确保负载下降是稳定的,防止因短暂的负载降低而过早缩容。 |
value: 50 | 每次缩容最多减少 50% 的 Pod 数量。 | |
periodSeconds: 60 | 每 60 秒检查一次缩容的需求。 |
创建hpa
kubectl apply -f hpa-behavior.yaml
成功输入如下:
horizontalpodautoscaler.autoscaling/php-apache-hpa created
查看hpa详细信息:
kubectl describe hpa php-apache-hpa
输出如下:
Name: php-apache-hpa
Namespace: default
Labels: <none>
Annotations: <none>
CreationTimestamp: Sat, 21 Sep 2024 23:20:13 +0800
Reference: Deployment/php-apache
Metrics: ( current / target )resource cpu on pods (as a percentage of request): 1% (1m) / 50%
Min replicas: 1
Max replicas: 10
Behavior:Scale Up:Stabilization Window: 60 secondsSelect Policy: MaxPolicies:- Type: Percent Value: 100 Period: 30 secondsScale Down:Stabilization Window: 300 secondsSelect Policy: MaxPolicies:- Type: Percent Value: 50 Period: 60 seconds
Deployment pods: 1 current / 1 desired
Conditions:Type Status Reason Message---- ------ ------ -------AbleToScale True ReadyForNewScale recommended size matches current sizeScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)ScalingLimited False DesiredWithinRange the desired count is within the acceptable range
Events: <none>
2.3 生成负载波动
为了模拟负载波动,我们可以使用 kubectl run 生成高负载和低负载交替的请求,观察 HPA 的行为。
2.3.1 模拟负载生成
kubectl run -it --restart=Never load-generator --image=harbor.zx/hcie/busybox:1.29-2 -- /bin/sh
在 busybox 容器中,运行以下命令向web发送请求模拟负载:
while sleep 0.1; do wget -q -O- http://php-apache; done
在负载生成器运行一段时间后,停止负载生成,模拟负载下降。
2.3.2 交替运行高负载和低负载:
- 高负载:运行上面的
wget命令 持续5 分钟。 - 低负载:停止
wget命令 3 分钟,模拟负载下降。 - 第二次高负载:运行上面的
wget命令 持续3 分钟。 - 停止负载:运行上面的
wget命令 持续5 分钟。
反复交替执行这两个操作,以观察 HPA 如何应对负载的波动。
2.4 观察 HPA 行为
2.4.1 监控 HPA 状态
使用以下命令监控 HPA 的状态变化,特别是观察 Pod 副本数在负载波动下的变化:
- 查看hpa状态
kubectl get hpa php-apache-hpa --watch
- 查看pod状态
kubectl get pods --watch
- 查看deployment状态
kubectl get deployment php-apache --watch
2.4.2 观察扩容过程
第一次压测中,观察hpa状态,输出如下:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache-hpa Deployment/php-apache 105%/50% 1 10 1 34m
php-apache-hpa Deployment/php-apache 197%/50% 1 10 1 35m
php-apache-hpa Deployment/php-apache 198%/50% 1 10 1 35m
php-apache-hpa Deployment/php-apache 198%/50% 1 10 2 35mphp-apache-hpa Deployment/php-apache 21%/50% 1 10 2 36mphp-apache-hpa Deployment/php-apache 91%/50% 1 10 2 36m
php-apache-hpa Deployment/php-apache 106%/50% 1 10 2 36m
php-apache-hpa Deployment/php-apache 107%/50% 1 10 2 36m
php-apache-hpa Deployment/php-apache 106%/50% 1 10 2 37mphp-apache-hpa Deployment/php-apache 99%/50% 1 10 4 37mphp-apache-hpa Deployment/php-apache 61%/50% 1 10 4 37m
php-apache-hpa Deployment/php-apache 58%/50% 1 10 4 37m
php-apache-hpa Deployment/php-apache 73%/50% 1 10 4 38m
php-apache-hpa Deployment/php-apache 94%/50% 1 10 4 38m
php-apache-hpa Deployment/php-apache 84%/50% 1 10 4 38mphp-apache-hpa Deployment/php-apache 107%/50% 1 10 5 38m
php-apache-hpa Deployment/php-apache 100%/50% 1 10 6 39mphp-apache-hpa Deployment/php-apache 59%/50% 1 10 7 39m
php-apache-hpa Deployment/php-apache 53%/50% 1 10 7 39m
php-apache-hpa Deployment/php-apache 52%/50% 1 10 7 39m
php-apache-hpa Deployment/php-apache 61%/50% 1 10 7 40m
观察Deployment状态,输入如下:
NAME READY UP-TO-DATE AVAILABLE AGE
php-apache 1/1 1 1 17s
php-apache 1/2 1 1 20m
php-apache 1/2 1 1 20m
php-apache 1/2 1 1 20m
php-apache 1/2 2 1 20mphp-apache 2/2 2 2 20mphp-apache 2/4 2 2 22m
php-apache 2/4 2 2 22m
php-apache 2/4 2 2 22mphp-apache 2/4 4 2 22mphp-apache 3/4 4 3 22m
php-apache 4/4 4 4 22m
php-apache 4/5 4 4 23m
php-apache 4/5 4 4 23m
php-apache 4/5 4 4 23mphp-apache 4/5 5 4 23mphp-apache 4/6 5 4 23m
php-apache 4/6 5 4 23m
php-apache 4/6 5 4 23mphp-apache 4/6 6 4 23mphp-apache 5/6 6 5 23m
php-apache 5/7 6 5 24m
php-apache 5/7 6 5 24m
php-apache 5/7 6 5 24m
php-apache 5/7 7 5 24m
php-apache 6/7 7 6 24m
❔ 说明:扩容行为是遵循每次扩容都有 60 秒的延迟,以及每次最多扩容 100% 的限制。
2.5 第一次停止负载测试
第一次压测后,观察hpa状态,输出如下:
php-apache-hpa Deployment/php-apache 15%/50% 1 10 7 41m
php-apache-hpa Deployment/php-apache 4%/50% 1 10 7 41m
php-apache-hpa Deployment/php-apache 1%/50% 1 10 7 41m
php-apache-hpa Deployment/php-apache 34%/50% 1 10 7 44m
php-apache-hpa Deployment/php-apache 55%/50% 1 10 7 44m
php-apache-hpa Deployment/php-apache 59%/50% 1 10 7 44m
php-apache-hpa Deployment/php-apache 57%/50% 1 10 7 45m
php-apache-hpa Deployment/php-apache 62%/50% 1 10 7 45m
❔ 说明:缩容行为未发生,遵循缩容有 5 分钟的延迟。
2.6 观察缩容行为
完成第二次压测后,观察hpa状态,输出如下:
php-apache-hpa Deployment/php-apache 27%/50% 1 10 8 53m
php-apache-hpa Deployment/php-apache 1%/50% 1 10 8 53m
php-apache-hpa Deployment/php-apache 1%/50% 1 10 8 58m
php-apache-hpa Deployment/php-apache 1%/50% 1 10 5 58m
php-apache-hpa Deployment/php-apache 1%/50% 1 10 4 58m
php-apache-hpa Deployment/php-apache 1%/50% 1 10 4 59m
php-apache-hpa Deployment/php-apache 1%/50% 1 10 2 59m
php-apache-hpa Deployment/php-apache 1%/50% 1 10 2 60m
php-apache-hpa Deployment/php-apache 1%/50% 1 10 1 60m
观察Deployment状态,输入如下:
php-apache 8/5 8 8 43m
php-apache 5/5 5 5 43m
php-apache 5/4 5 5 43m
php-apache 5/4 5 5 43m
php-apache 4/4 4 4 43m
php-apache 4/2 4 4 44m
php-apache 4/2 4 4 44m
php-apache 2/2 2 2 44m
php-apache 2/1 2 2 45m
php-apache 2/1 2 2 45m
php-apache 1/1 1 1 45m
❔ 说明: 缩容行为有 5 分钟的延迟,并遵循每60秒检测一次和每次最多缩容 50% 的限制。
3 总结
thrashing 或 flapping 现象虽然会由于负载指标的动态波动引起的频繁扩容和缩容。但是如果对Kubernetes资源设定合适的阈值和对HPA设置Behavior 配置,可以使得扩缩容行为更加平滑和稳定,这不仅有助于改善系统的弹性扩展能力,还能更好地平衡资源的使用和成本,帮助应用平稳应对不同的负载压力。
4 参考资料
[1] HorizontalPodAutoscalerSpec
[2]Horizontal Pod Autoscaling
相关文章:
【Kubernetes知识点】解读HPA的 thrashing(抖动)问题
【Kubernetes知识点】解读HPA的 thrashing(抖动)问题 目录 1 概念 1.1 什么是 Thrashing 现象?1.2 HPA 中 Thrashing 产生的原因1.3 解决 Thrashing 的优化措施 1.3.1 设置合适的阈值1.3.2 使用自定义指标和基于负载的自动扩缩1.3.3 增加扩…...
Unity 设计模式 之 结构型模式 -【装饰者模式】【外观模式】【享元模式】【代理模式】
Unity 设计模式 之 结构型模式 -【装饰者模式】【外观模式】【享元模式】【代理模式】 目录 Unity 设计模式 之 结构型模式 -【装饰者模式】【外观模式】【享元模式】【代理模式】 一、简单介绍 二、装饰者模式(Decorator Pattern) 1、什么时候使用装…...
Linux上Qt安装相关的内容及在QtCreator使用QChart模块需要的配置
引言 下面是Ubuntu上Qt安装相关的内容及在QtCreator使用QChart模块需要的配置。 关于Qt安装及环境 Qt的模块 查看已经安装的模块 sudo apt search qt5-安装新的模块 sudo apt install qt5-svg # 安装Qt SVG模块3.查看qt已经安装了哪些模块 dpkg -l | grep libqt安装qt,…...
lettuce引起的Redis command timeout异常
项目使用Lettuce,在自己的环境下跑是没有问题的。在给客户做售前压测时,因为客户端环境比较恶劣,service服务和中间件服务不在同一机房。服务启动后不一会就会出现Redis command timeout异常。 经过差不多两周的追查,最后没办法把…...
【Hadoop】一、Hadoop入门:基础配置、集群配置、常用脚本
基础设置 网络设置 创建好一个 centos 虚拟机,修改网络配置文件: /etc/sysconfig/network-scripts/ifcfg-ens33修改 BOOTPROTO 为 static 以及添加 IPADDR、GATEWAY、DNS1 TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY&quo…...
Ollama:本地运行大模型【含UI界面】
文章目录 Ollama 简介安装 ollamaWindows 安装Docker 安装其它平台安装支持的模型模型清单模型参数与运行内存快速启动 llama 模型llama 模型介绍运行 llama3.1 模型通过 HTTP API 访问ollama 命令语法常用示例特别示例自定义模型创建 Modelfile创建模型并运行集成 Web 页面Ope…...
【论文阅读】Grounding Language with Visual Affordances over Unstructured Data
Abstract 最近的研究表明,大型语言模型(llms)可以应用于将自然语言应用于各种各样的机器人技能。然而,在实践中,学习多任务、语言条件机器人技能通常需要大规模的数据收集和频繁的人为干预来重置环境或帮助纠正当前的…...
目标检测:滑块验证
最近在做一些爬虫相关的任务,有时候在登录时候需要去做滑块验证,刚好自己是做AI这一块得,就想着使用目标检测去做检测,然后绕过滑块。...
Unreal Engine 5 C++: 编辑器工具编写入门01(中文解释)
目录 准备工作 1.创建插件 2.修改插件设置 快速资产操作(quick asset action) 自定义编辑器功能 0.创建编辑器button,测试debug message功能 大致流程 详细步骤 1.ctrlF5 launch editor 2.创建新的cpp class,derived from AssetAction…...
力扣上刷题之C语言实现-Day2
一. 简介 本文记录一下,力扣C语言逻辑题。主要涉及 数组方面的知识。 二. 涉及数组的 C语言逻辑题 1. 两数之和 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target…...
Visual Studio 2022 - QT 环境中文字符乱码问题
Visual Studio 2022 - QT 环境中文字符乱码问题 一、Visual Studio 2022 - Qt 环境 在 QT 中使用中文字符串常会出现乱码现象,如下:以下提供了几个解决方法,仅供参考 QString str "百香果真是一直可爱的小猫咪"; qDebug() <…...
获得ASPICE认证需要满足哪些条件?
要获得ASPICE认证,需要满足以下条件: ( 要明确的是:在ASPICE行业中专业来说,ASPICE项目是没有认证,而只有评估。不过,为了方便沟通,人们常将这一评估过程称为认证。) 一、基础条件…...
鸿蒙_异步详解
参考详细链接: 鸿蒙HarmonyOS异步并发开发指南...
linux日志查询搜索view
view 命令实际上是 vim 编辑器的一个只读模式。当你使用 view 打开一个文件时,实际上是在用 vim 查看该文件,只是不能编辑内容。因此,view 下的搜索操作与 vim 类似。 以下是如何在 view 模式下进行搜索: 启动 view 并打开文件&a…...
性能测试工具——JMeter
目录 一、JMeter介绍 1、下载安装JMeter 2、打开JMeter 方式一: 方式二: 3、JMeter基础设置 4、JMeter基本使用流程 (1)启动JMeter (2)在测试计划下添加线程组 (3)在 “线…...
1.《DevOps》系列K8S部署CICD流水线之部署K8S集群~version1.28.2
架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G 操作系统:Rocky9.3 后续通过K8S部署GitLab、Harbor、Jenkins 一、环境准备 关…...
c/c++八股文
c基础 一、指针和引用的区别 定义方式: 指针是通过 * 操作符定义的变量,用于存储另一个变量的地址。例如: int* p &x;引用是通过 & 操作符定义的别名,直接引用另一个变量。例如: int& r x; 内存占用: 指针是一个独立的变量,占用一定的内存空间。引用不是独立的…...
Docker配置代理解决pull超时问题
操作系统: CentOS Linux 8 Docker版本: 26.1.3 前置:你需拥有🐱 1. 配置 proxy.conf 1.1 创建配置文件目录 创建 docker.service.d,进入到 docker.service.d 中打开 proxy.conf (没有文件打开会自动创建)。 注意:每个人的路径可…...
ECharts的特点
ECharts是一款基于JavaScript的数据可视化图表库,由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目。ECharts提供了直观、生动、可交互、可个性化定制的数据可视化图表,广泛应用于数据分析和展示领域。以下是关于…...
JVM OutOfMemoryError 与 StackOverflowError 异常
目录 前言 堆溢出 虚拟机栈和本地方法栈溢出 方法区溢出 前言 JVM规范中规定, 除了程序计数器之外, 其他的运行时数据区域, 例如堆栈, 方法区, 都会出现OutOfMemoryError异常. 那么到底是怎么样的代码, 才会引起堆溢出, 栈溢出, 或者是方法区的溢出呢? 如果遇到了又该如何…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
