【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/v2
API版本支持自定义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异常. 那么到底是怎么样的代码, 才会引起堆溢出, 栈溢出, 或者是方法区的溢出呢? 如果遇到了又该如何…...

linux防火墙学习
Linux 防火墙配置(iptables和firewalld) Linux 防火墙配置(iptables和firewalld)_iptables配置文件位置-CSDN博客 Linux查看防火墙状态及开启关闭命令_linux 查看防火墙-CSDN博客...

Java面试篇基础部分- Java中的阻塞队列
首先队列是一种前进后出的操作结构,也就是说它只允许从队列前端进入,从队列后端退出。这个前端和后端看个人如何理解,也就是通常所说的入队和出队,队头和队尾。 阻塞队列和一般队列的不同就在于阻塞队列是可以阻塞的,这里所说的并不是说队列中间或者队头队尾被拦截了,而是…...

Go语言并发编程之Channels详解
并发编程是Go语言的一大特色,而channel(通道)则是Go语言中用于实现并发的核心工具之一。它源于CSP(Communicating Sequential Processes)的概念,旨在让多个goroutine之间能够高效地进行通信和同步。本文将深入探讨channel的用法、原理和最佳实践,通过丰富的示例代码和详…...

【Java集合】LinkedList
概要 LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问速度比较慢。另外,他还提供了 List 接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。 链表 链表是…...

大模型之基准测试集(Benchmark)-给通义千问2.0做测评的10个权威测基准测评集
引言 在去年(2023)云栖大会上,阿里云正式发布千亿级参数大模型通义千问2.0。据现场介绍,在10个权威测评中,通义千问2.0综合性能超过GPT-3.5,正在加速追赶GPT-4。以下是通义千问在MMLU、C-Eval、GSM8K、HumanEval、MATH等10个主流…...

解决selenium爬虫被浏览器检测问题
文章目录 专栏导读1.问题解析2.代码解析(Edge/Chrome通用)2.1 设置Edge浏览器选项:2.2 尝试启用后台模式2.3 排除启用自动化模式的标志2.4 禁用自动化扩展2.5 设置用户代理2.6 实例化浏览器驱动对象并应用配置2.7 在页面加载时执行JavaScript代码 3.完整代码(可直接…...

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-17
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-17 1. Large Language Models in Biomedical and Health Informatics: A Review with Bibliometric Analysis H Yu, L Fan, L Li, J Zhou, Z Ma, L Xian, W Hua, S He… - Journal of Healthcare …, 2024 生物…...

LLM - 理解 多模态大语言模型(MLLM) 的 幻觉(Hallucination) 与相关技术 (七)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142463789 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 多模态…...

如何在C++中实现RDP协议的屏幕更新功能?
在C++中实现RDP协议的屏幕更新功能涉及多个步骤,包括接收RDP服务器发送的屏幕更新PDU(协议数据单元)、解析这些PDU以获取图像数据,以及将这些图像数据渲染到本地显示设备上。以下是一个简化的流程,指导你如何在C++中处理这一功能: 1. 监听和接收屏幕更新PDU 首先,你的…...

Tornado 是一个 Python 异步网络库和 web 框架
Tornado 是一个 Python 异步网络库和 web 框架,它最初由 FriendFeed 开发,后来被 Facebook 收购并开源。Tornado 因其非阻塞的 I/O 操作和优秀的性能而广受欢迎,特别是在需要处理大量并发连接的应用中。Tornado 的底层实现主要依赖于 Python …...