运行 GreatSQL 时为什么要求关闭透明大页
在大部分运维规范中,一般都会要求在运行 GreatSQL/MySQL 的环境中要关闭透明大页,那么到底什么是透明大页,为什么要关闭,打开有什么风险吗?
在此之前,我也是有点懵的,本文试着回答这个疑问,并通过实验进行验证这个说法正确与否。
实际上,Linux 系统中是有两种大页支持机制的,即 透明大页 和 静态大页,先来看看那二者有什么不同。
P.S,本文的编辑整理借助 chatgpt 协助完成。
1. 透明大页(Transparent Huge Pages, THP)和静态大页(HugeTLB)的区别
Linux 提供了两种机制来支持大页(Huge Pages),即 透明大页(Transparent Huge Pages, THP) 和 静态大页(HugeTLB)。这两种机制旨在减少内存管理开销、提升性能,但它们的实现方式和适用场景有所不同。
1.1 透明大页(THP)
透明大页工作机制
动态分配:
THP 会在系统运行时动态地将小页(通常是 4KB)合并成大页(通常是 2MB 或更大)。这种分配对应用程序透明,无需用户干预或显式配置。自动折叠(Compaction):
如果内存分布不连续(存在碎片),THP 会触发后台内存整理任务,将分散的小页整理成连续的物理内存块以分配大页。混合模式:
系统在小页和大页之间动态切换。如果无法分配大页,系统会自动回退到小页。
透明大页优点
无需配置:应用程序无需修改即可使用大页,简化了管理。
减少 TLB(Translation Lookaside Buffer)缺失:大页减少了页表项数量,提高了 TLB 缓存命中率,降低了虚拟地址到物理地址转换的开销。
支持内存分配灵活性:THP 可以动态调整内存分配方式,既支持大页又支持小页。
透明大页缺点
性能不可预测:
动态分配大页和后台内存整理可能引入额外开销,特别是在高并发或内存紧张时,可能导致性能抖动。
大页分配失败:
如果系统内存碎片化严重,THP 可能频繁回退到小页模式,降低收益。
高内存浪费:
如果分配的大页中数据利用率较低,会浪费内存空间。
1.2 静态大页(HugeTLB)
静态大页工作机制
静态预分配:
HugeTLB 需要在系统启动或运行时手动预分配一部分物理内存用于大页。分配后,这些大页无法用于其他用途。显式使用:
应用程序需要显式地分配和管理大页内存。例如,用户需要通过特定的系统调用(如mmap
或shmget
)请求大页。
静态大页优点
性能可预测:
由于大页是静态分配的,系统在运行时不会触发内存整理任务,因此性能稳定,适用于高实时性需求的场景。高效利用大页:
HugeTLB 可以确保大页的分配和使用效率更高,减少动态分配的开销。减少内存碎片:
通过预分配内存,HugeTLB 避免了碎片化问题。
静态大页缺点
需要手动配置:
用户需要明确指定大页的数量和大小,增加了管理复杂度。内存利用率下降:
预分配的大页区域无法被其他进程使用,可能导致内存浪费。缺乏灵活性:
如果预分配的大页不足,可能导致性能下降,且无法动态调整。
1.3 透明大页与静态大页的对比
特性 | 透明大页(THP) | 静态大页(HugeTLB) |
---|---|---|
分配方式 | 动态分配(内核负责) | 静态分配(用户手动配置) |
内存管理灵活性 | 支持小页与大页混合使用 | 仅支持大页 |
性能稳定性 | 可能引入动态分配和折叠开销,性能抖动大 | 性能稳定,没有动态内存整理的开销 |
配置复杂性 | 无需配置,默认启用 | 需要手动设置 |
适用场景 | 顺序访问、高内存吞吐场景;低实时性应用 | 高实时性场景;性能要求严格、需要控制开销的应用 |
内存碎片 | 可能因碎片化导致大页分配失败 | 避免内存碎片 |
应用透明性 | 对用户和应用透明,无需显式修改代码 | 需要应用显式支持 |
2. 什么场景下建议打开或关闭透明大页?
2.1 建议打开透明大页(THP)的场景
顺序内存访问的应用:如大数据处理、机器学习训练、视频流处理等。这类应用程序通常具有线性内存访问模式,THP 可有效减少 TLB 缺失,提高性能。
大内存使用的应用:如内存缓存(Memcached、Redis)或需要大内存区域的计算密集型程序(如高性能计算应用),THP 可以显著降低页表项的管理开销。
系统对延迟不敏感:如果应用对延迟的要求较低(如批处理任务),THP 的动态行为不会显著影响整体性能。
2.2 建议关闭透明大页(THP)的场景
数据库应用(如 GreatSQL/MySQL 等):数据库通常对延迟敏感,且有大量随机内存访问,THP 的动态分配可能引入延迟峰值,影响稳定性。
实时性要求高的场景:如交易系统、低延迟 Web 服务、金融系统等。这类场景需要尽可能避免延迟抖动。
高并发负载:在高并发的请求场景下,THP 的内存折叠任务可能争用 CPU 和内存资源,降低服务吞吐量。
2.3 运行 GreatSQL 时如何选择
从上面的描述中能看出来,在运行 GreatSQL/MySQL 等需要申请大块随机内存又要求快速响应的数据库类应用而言,最好是 关闭透明大页,而是 开启静态大页 方式来运行。
运行 GreatSQL 时建议关闭透明大页,因为以下几点原因:
动态分配引入额外开销:
THP 在分配大页时可能触发内存整理任务,增加 CPU 和磁盘 I/O 的负载,特别是在高并发或内存紧张的情况下,可能导致性能抖动。
对数据库负载收益有限:
数据库应用通常具有随机内存访问模式,THP 对顺序访问场景优化更显著,但对随机访问场景帮助有限。
GreatSQL 的内存管理机制冲突:
GreatSQL 的 InnoDB Buffer Pool 已经对内存分配和管理进行了高度优化。THP 的动态行为可能干扰 GreatSQL 的内存管理策略。
关闭 THP 的方法:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
运行 GreatSQL 时建议开启静态大页是为了能提高内存管理效率,并且在运行过程中保护好所需的大块内存不被其他应用抢占,造成额外的等待,以及其他几点原因:
GreatSQL 的内存管理模块(如 InnoDB Buffer Pool)已经针对小页进行了优化。
动态分配和内存折叠可能导致性能抖动,特别是在高负载下。
开启 THP 对 GreatSQL 的性能没有显著提升,反而可能导致延迟峰值。
3. 运行 GreatSQL 时如何启用静态大页(HugeTLB)
接下来介绍如何在 GreatSQL 中启用静态大页支持。
1. 首先,确认运行 GreatSQL 所属的用户组
$ ps aux|grep -i mysqld
mysql 75607 1512 5.8 46383532 23093520 ? Ssl 13:59 1130:13 /usr/local/GreatSQL-8.0.32-26-Linux-glibc2.28-x86_64/bin/mysqld$ id mysql
uid=997(mysql) gid=1000(mysql) groups=1000(mysql)
2. 其次,计算预估 GreatSQL 运行时总共所需的内存总大小
可以采用下面的方法简单估算:
-- SGA
innodb_buffer_pool_size +
innodb_log_buffer_size +
table_open_cache +
table_definition_cache +
temptable_max_ram
key_buffer_size +-- PGA
( read_buffer_size
+ read_rnd_buffer_size
sort_buffer_size
join_buffer_size
binlog_cache_size
histogram_generation_max_mem_size) * max_connections
其中占比最高的是 innodb_buffer_pool_size
,简单起见,通常在 innodb_buffer_pool_size
参数值的基础上适当上浮约 30% 基本上就够,运行过程中如果出现分配的大页内存不够用,GreatSQL 可能会出现类似下面的错误提示:
[InnoDB] large_page_aligned_alloc mmap(XXXX bytes) failed; errno 12
出现这种错误的话,就需要继续调大可用大页内存值,详见下方第3和第5步,也有可能是当前内存中有部分缓存还没回收,可以执行 sync
命令将所有未写入磁盘的数据(即脏数据)从内存中同步到磁盘,再执行 echo 3 > /proc/sys/vm/drop_caches
清除内存中的缓存,以及执行 echo 1 > /proc/sys/vm/compact_memory
尝试将物理内存中的页面重新排列,以减少内存碎片,提高内存分配效率。
$ sync
$ echo 3 > /proc/sys/vm/drop_caches
$ echo 1 > /proc/sys/vm/compact_memory
如果当前内存中脏数据较多,待清除缓存较大或内存碎片较多的话,上述操作执行起来可能略慢,需要一定时间。
3. 修改 GreatSQL 进程属主用户 memlock 限制
编辑 /etc/security/limits.conf,增加下面相应设置:
# /etc/security/limits.conf
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
@mysql soft memlock unlimited
@mysql hard memlock unlimited
允许 GreatSQL 进程可以无限制地申请内存,如果担心会发生 OOM,也可以适当设置硬限制(hard)的上限值,避免内存被耗尽。
4. 修改 GreatSQL 配置参数
编辑 my.cnf 配置文件,增加 large_pages = ON
参数:
[mysqld]innodb_buffer_pool_size = 40G
large_pages = ON
5. 修改 /etc/sysctl.conf,修改 HugeTLB 设置
编辑 /etc/sysctl.conf 文件,添加两行配置
# 运行 GreatSQL 的用户组GID
vm.hugetlb_shm_group = 1000# 静态大页数目
vm.nr_hugepages = 26624
编辑完后,执行 sysctl -p
使之生效,并再次确认:
$ sysctl -p
vm.hugetlb_shm_group = 1000
vm.nr_hugepages = 26624$ sysctl -a | egrep 'vm.hugetlb_shm_group|vm.nr_hugepages '
vm.hugetlb_shm_group = 1000
vm.nr_hugepages = 0$ grep -i huge /proc/meminfo
AnonHugePages: 24576 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 25160
HugePages_Free: 22225
HugePages_Rsvd: 15083
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 54525952 kB
在上述例子中,静态大页数目是 26624,那么静态大页的内存大小就是 26624 * 2M = 52G(每个静态大页是 2M)。
申请的静态大页内存共 52G,而设置 IBP 为 40G,上浮了 30%,一般情况下是够用的。
4. 对比测试
百闻不如一见,利用 BenchmarkSQL 进行测试看看结果有什么不同。下面是测试结果:
从这份测试结果可以看到:
当 IBP 充足时,内存资源不是瓶颈,不需要频繁分配和回收,此时启用动态大页的整体性能更好。
当 IBP 不足时,内存资源成为瓶颈,可能需要频繁分配和回收,此时启用静态大页的整体性能更好(相对于启用动态大约tpmC约高出7%)。
当 IBP 充足时,启用静态大页的性能反倒较低。
反过来,当 IBP 不足时,开启动态大页的性能较低。
BenchmarkSQL 测试相关信息:
GreatSQL 8.0.32-26
warehouses=1000(datasize约180G,具体不记得了)
terminals=32
runMins=5
IBP 充足是指 IBP = 256G
IBP 不足是指 IBP = 128G
每次总共运行4次,结果取平均值
继续用 Sysbench 在 oltp_read_write
模式下做了补充测试,结论基本上和上述一致。结合上面的测试结论,线上生产环境的内存通常是没办法完全满足的,这种情况下建议启用静态大页、关闭动态大页,在内存充足的情况下无需做出调整。
即便如此,在生产环境中是否启大页支持还是要根据实际业务特点及您的实际测试结果动态调整,这一次测试结果不能覆盖所有的场景,有条件的读者建议也自行测试验证。
5. 总结
透明大页(THP) 更适合顺序访问、大吞吐的场景,但对数据库应用(如 GreatSQL/GreatSQL)可能引入性能抖动,因此建议关闭 THP。
静态大页(HugeTLB) 提供更高的性能稳定性,适用于高实时性和高并发场景。如果对性能要求严格,可以考虑启用 HugeTLB 并进行精细配置。
运行 GreatSQL/MySQL/Oracle 等这类需要申请大块随机内存又要求快速响应的数据库类应用而言,最好是 关闭透明大页,而是 开启静态大页 方式来运行。
芬达、yangyidba二位老师对本文亦有贡献,感谢。
延伸阅读
huge page 能给MySQL 带来性能提升吗?
Enabling Large Page Support, https://dev.mysql.com/doc/refman/8.0/en/large-page-support.html
A.7 Overview of HugePages, https://docs.oracle.com/en/database/oracle/oracle-database/19/unxar/administering-oracle-database-on-linux.html#GUID-CC72CEDC-58AA-4065-AC7D-FD4735E14416
Transparent Hugepage Support, https://www.kernel.org/doc/html/latest/admin-guide/mm/transhuge.html
HugeTLB Pages, https://www.kernel.org/doc/html/latest/admin-guide/mm/hugetlbpage.html
GreatSQL 运行时内存太高,超过90%怎么办(重发,附解决办法)
在MySQL 5.7下排查内存泄露和OOM问题全过程
夭兽啦,内存泄漏了怎么办
MySQL一次大量内存消耗的跟踪
MySQL 8.0不再担心被垃圾SQL搞爆内存
MySQL进程内存一直在涨,怎么办?
MySQL内存为什么不断增高,怎么让它释放
MySQL内存管理机制浅析
MySQL中MGR中SECONDARY节点磁盘满,导致mysqld进程被OOM Killed
微盟OOM排查之旅
以上。
Enjoy GreatSQL :)
题图是我的手机摄影作品 - 美丽异木棉
相关文章:
运行 GreatSQL 时为什么要求关闭透明大页
在大部分运维规范中,一般都会要求在运行 GreatSQL/MySQL 的环境中要关闭透明大页,那么到底什么是透明大页,为什么要关闭,打开有什么风险吗? 在此之前,我也是有点懵的,本文试着回答这个疑问&…...
【Rive】Rive在Android上的简单应用
1 前言 Rive 是一款强大的矢量图编辑器,可以设计图形、也可以制作动画。Rive 提供了矩形、圆形、三角形、多边形、星形、钢笔、文字等工具来绘制各式各样的矢量图形;提供了平移、旋转、缩放等工具对矢量图形进行各种变换;提供了骨骼、约束、时…...
Base 崛起,SynFutures 或成生态系统中最具潜力应用
10月份的 Unchained Crypto 采访中,Solana 联合创始人 Anatoly 表示,通过观察活跃地址数、TVL、DeFi 版块、Meme 热潮和开发者生态等多个关键指标,察觉到 Base 势头正猛,成为以太坊生态最强劲的 L2。 11月下旬,小狐狸创…...
探索Go语言中的循环双向链表
简介 循环双向链表将双向链表的灵活性与循环结构相结合,使得每个节点都有一个指向前一个节点和后一个节点的指针,并且最后一个节点的Next指针指向头节点,形成一个闭环。本文将深入探讨如何在Go语言中实现和操作这种数据结构。 循环双向链表…...
Leetcode617.合并二叉树(HOT100)+Leetcode79. 单词搜索(HOT100)
链接 代码: class Solution { public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if(!root1)return root2;if(!root2)return root1;root1->valroot2->val;root1->left mergeTrees(root1->left,root2->left);root1->right merg…...
亚马逊云(AWS)使用root用户登录
最近在AWS新开了服务器(EC2),用于学习,遇到一个问题就是默认是用ec2-user用户登录,也需要密钥对。 既然是学习用的服务器,还是想直接用root登录,下面开始修改: 操作系统是࿱…...
使用Docker在Ubuntu 22.04上部署MySQL数据库的完整指南
使用Docker在Ubuntu 22.04上部署MySQL数据库的完整指南 在现代应用开发中,使用Docker来部署数据库已成为一种流行的做法。本文将详细介绍如何在Ubuntu 22.04系统上使用Docker部署最新版本的MySQL数据库,包括关键注意事项、详细步骤、闭坑指南以及总结。…...
算法笔记:力扣15、三数之和
思路: 实现代码 class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result new ArrayList<>(); Arrays.sort(nums); // 先对数组进行排序 for (int i 0; i < nums.length - 2; i) { /…...
perf list PMU 缓存事件
事件标识事件解释PMU事件路径l1d_cacheL1数据缓存的访问次数,L1缓存是CPU内部最快的缓存,位于距离CPU核心非常近的位置。armv8_pmuv3/l1d_cache/l1d_cache_lmiss_rd表示从L1数据缓存读取数据时发生缓存未命中的次数。armv8_pmuv3/l1d_cache_lmiss_rd/l1d…...
使用C#开发VTK笔记(一)-VTK开发环境搭建
一.使用C#开发VTK的背景 因为C#开发的友好性,一直都比较习惯于从C#开发程序。而长期以来,都希望有一个稳定可靠的三位工程数模的开发演示平台,经过多次对比之后,感觉VTK和OpenCasCade这两个开源项目是比较好的,但它们都是用C++编写的,我用C#形式开发,只能找到发布的C#组…...
2024Selenium自动化常见问题!
"NoSuchElementException"异常: 确保使用了正确的选择器来定位元素。可以使用id、class、XPath或CSS选择器等。 可以尝试使用find_elements方法来查找元素列表,并检查列表的长度来判断元素是否存在。 使用显式等待(WebDriverWait…...
考研英语翻译与大小作文
名词动化词 1 持有 harbor2 2 反映 mirror 3 缩短 bridge 4 使用 harness 5 掩饰 mask/veil 6 修改 tailor 7 汇集 pool 8 控制 curb 9 想象 picture 10 激发 trigger 拉丁…...
详解Rust异步编程
文章目录 多线程编程与异步编程对比并发模型对比分析异步编程基础概念及用法 Rust的异步编程通过async/await语法和Future特性提供了一种高效的方式来处理并发任务,尤其在I/O密集型操作中表现出色。async/await异步编程模型性能高,还能支持底层编程&…...
Vue + Element UI 实战技巧:如何实现 el-table 重新加载数据后折叠所有展开行
在 Vue 中使用 Element UI 的 el-table 组件时,如果你想要在数据重新加载后折叠所有行的展开状态,你可以通过维护一个数据属性来追踪哪些行是展开的,并在数据更新时重置这个属性。 以下是一个简单的示例来说明如何实现这个功能: …...
linux静态链接和动态链接
静态链接的特点 程序独立性高 静态链接是在程序编译时,将所有需要的目标文件以及它们所依赖的库文件中的代码和数据链接成一个可执行文件。一旦链接完成,这个可执行文件就包含了运行所需的全部内容,不依赖外部的库文件。例如,一个…...
计算机网络学习资料全攻略
计算机网络是计算机科学中一个非常重要的分支,它涉及到数据在计算机系统之间的传输和通信。随着互联网的快速发展,对计算机网络知识的掌握变得越来越重要。本文将为您提供一份全面的计算机网络学习资料指南,帮助您从基础到高级逐步深入学习。…...
第七课 Unity编辑器创建的资源优化_UI篇(UGUI)
上期我们学习了简单的Scene优化,接下来我们继续编辑器创建资源的UGUI优化 UI篇(UGUI) 优化UGUI应从哪些方面入手? 可以从CPU和GPU两方面考虑,CPU方面,避免触发或减少Canvas的Rebuild和Rebatch,…...
Go的简单问题问答
基础问题回答 Go 的主要特点是什么? 简洁:语法简化,减少复杂性。并发:内置 Goroutine 和 Channel,支持轻量级并发。静态类型:强类型语言,编译时检查错误。跨平台:编译生成独立的二进…...
SVN迁移至Git,保留commit提交记录
SVN迁移至Git 如何将 SVN 仓库迁移到 Git 并保留提交记录一、生成userinfo.txt二. 使用 git svn clone 命令迁移 SVN 到 Git2.1. 基本命令格式2.2. 示例:从 SVN 克隆到 Git参数说明:2.3 执行的过程遇到的窗口2.4. 迁移过程 三. 将 Git 仓库推送到远程 Gi…...
一站式指导:在Neo4j与PostgreSQL间实现高效数据同步
作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 数据同步的艺术&#…...
linux-安全-iptables防火墙基础笔记
目录 一、 iptables链结构 五链 二、 iptables表结构 四表 三、 匹配流程 四、 语法 五、 匹配 1. 通用匹配 2. 隐含匹配 3. 显示匹配 六、 SNAT 七、 DNAT 八、 规则备份及还原 1. 备份 2. 还原 这篇将讲解iptables防火墙的基础知识 一、 iptables链结构 规则…...
Redis——主从复制原理
Redis的主从复制原理是其高可用性和分布式读取能力的重要基础。以下是Redis主从复制原理的详细解释: 一、主从复制的基本概念 Redis的主从复制是一种数据复制和备份的方式,它允许一个主节点(Master)将其所有的数据同步到一个或多…...
vue2 虚拟DOM 和 真实DOM (概念、作用、Diff 算法)
虚拟 DOM 和 真实DOM(概念、作用、Diff 算法) 1.1 概念 真实 DOM(Document Object Model):是浏览器中用于表示文档结构的树形结构。 <h2>你好</h2>虚拟DOM:用 JavaScript 对象来模拟真实 DOM…...
王道考研编程题总结
我还在完善中,边复习边完善(这个只是根据我自身总结的) 一、 线性表 1. 结构体 #define MaxSize 40 typedef struct{ElemType data[MaxSize];int length; }SqList 2. 编程题 1. 删除最小值 题意 :从顺序表中删除…...
手机租赁系统开发全攻略 创新服务助力企业智能转型
内容概要 在当今数字化飞速发展的时代,“手机租赁系统开发”正逐渐成为企业智能转型的必然选择。这一过程并不简单,但关键流程的解析将帮助企业理清思路。首先,了解需求和目标是基础,之后制定详细计划和流程图,让整件…...
git回退到某个版本git checkout和git reset命令的区别
文章目录 1. git checkout <commit>2. git reset --hard <commit>两者的区别总结推荐使用场景* 在使用 Git 回退到某个版本时, git checkout <commit> 和 git reset --hard <commit> 是两种常见的方式,但它们的用途和影响有很…...
如何使用Spring Boot进行Web开发?
Spring Boot 是一个基于 Java 的框架,它简化了新 Spring 应用的初始设置和开发过程。使用 Spring Boot 进行 Web 开发可以让你快速创建独立的、生产级别的基于 Spring 的应用。下面是使用 Spring Boot 进行 Web 开发的基本步骤: 文章目录 1. 环境准备2. …...
error=‘null‘], commandType=io.lettuce.core.RedisPublisher$SubscriptionCommand]
问题 查看java应用启动日志输出下面错误: errornull], commandTypeio.lettuce.core.RedisPublisher$SubscriptionCommand] Completing command LatencyMeteredCommand [typeINFO, outputStatusOutput [output# Server redis_version:4.0.14 redis_git_sha1:000…...
AI PC处理器ARM架构-引入NPU和大模型
AI PC处理器架构变化:ARM低功耗、引入NPU和大模型 AI进化加速端侧落地,新一轮浪潮蓄势待发(2024)”。ARM(Advanced RISC Machine)架构和x86架构是两种主要的处理器架构,它们在设计理念、应用场景和性能特点等方面有显著的差异。 ARM架构是一…...
python之opencv库Haar级联分类器检测人脸--‘haarcascade_frontalface_default.xml‘
python之opencv库Haar级联分类器检测人脸–‘haarcascade_frontalface_default.xml’ opencv库: 它由 Intel 公司发起并参与开发,其初衷是为了提供高效的计算机视觉算法实现。随着计算机视觉领域的发展,OpenCV不断更新和完善,吸引…...
「Mac畅玩鸿蒙与硬件37」UI互动应用篇14 - 随机颜色变化器
本篇将带你实现一个随机颜色变化器应用。用户点击“随机颜色”按钮后,界面背景会随机变化为淡色系颜色,同时显示当前的颜色代码,页面还会展示一只猫咪图片作为装饰,提升趣味性。 关键词 UI互动应用随机颜色生成状态管理用户交互…...
确定 POST 请求中的数据字段
在使用 requests 进行 HTTP 请求时,data 和 params 是两种常见的参数,用于传递不同类型的数据。以下是它们的作用和区别: 1. data 的作用 用于 POST 请求的主体。通常传递表单数据或 JSON 数据。在 HTTP 请求中,data 中的内容会…...
Linux - DNS服务器
六、DNS服务器 1、简介 DNS(Domain Name System)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式 数据库,能够使人更方便的访问互联网。 DNS系统使用的是网络的查询,那么自然需要有监听的port。DNS使…...
探究 SpringBoot 结合 MVC 高校办公室行政事务管理系统的设计与应用实现
摘 要 身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化,人们在追求较高物质生活的同时,也在想着如何使自身的精神内涵得到提升,而读书就是人们获得精神享受非常重要的途径。为了…...
蓝桥杯-扫雷
这题不难,就是麻烦一点,这里暴力求解了直接 题目链接: 扫雷 AC代码: import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan ne…...
Hive高可用配置
在hive的商用上没有集群一说,而且它本身也不是数据库,只是hadoop的数据sql化工具,但是hive可以配置高可用,通常业内对元数据服务会开5个,而HS2服务开3个,来保证hive服务的高可用 配置方式也很简单…...
探索AI新世界!热门工具与学习资源免费获取
抖知书老师推荐: 人工智能技术的迅速发展让人们既充满期待又有些迷茫。有人担忧被AI技术取代,有人却积极拥抱这场科技浪潮。无论你处于哪种心态,人工智能已经深入到我们生活的方方面面。如果你希望轻松掌握最新的AI工具与动态,…...
MAUI APP开发蓝牙协议的经验分享:与跳绳设备对接
在开发MAUI应用程序时,蓝牙协议的应用是一个重要的环节,尤其是在需要与外部设备如智能跳绳进行数据交换的场景中。以下是我在开发过程中的一些经验和心得,希望能为你的项目提供帮助。 1. 蓝牙协议基础 蓝牙协议是无线通信的一种标准&#x…...
常见Linux命令(详解)
文章目录 常见Linux命令文件目录类命令pwd 打印当前目录的绝对路径ls 列出目录内容cd 切换路径mkdir 建立目录rmdir 删除目录touch 创建空文件cp 复制文件或目录rm 移除文件或者目录mv 移动文件与目录或重命名cat 查看文件内容more 文件分屏查看器less 分屏显示文件内容head 显…...
LeetCode763. 划分字母区间(2024冬季每日一题 23)
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 示例 1&a…...
【k8s 深入学习之 event 聚合】event count累记聚合(采用 Patch),Message 聚合形成聚合 event(采用Create)
参考 15.深入k8s:Event事件处理及其源码分析 - luozhiyun - 博客园event 模块总览 EventRecorder:是事件生成者,k8s组件通过调用它的方法来生成事件;EventBroadcaster:事件广播器,负责消费EventRecorder产生的事件,然后分发给broadcasterWatcher;broadcasterWatcher:用…...
Java--数组的定义与使用
1.数组的基本概念 1.1为什么用数组 在程序设计中,每一个数据总是对应一个变量.当数据量越大,就需要更多的变量来存储.我们将相同类型的数据存储到一个集合中,就可以更方便我们对数据进行访问,同时可以减少不断定义变量.这个集合就叫做数组 1.2数组的定义 数组是一种基本的数…...
tcpdump抓包wireshark分析
背景 分析特定协议的数据包,如 HTTP、DNS、TCP、UDP 等,诊断网络问题,例如连接故障、延迟和数据包丢失。 大概过程 1.安装tcpdump yum update yum install tcpdump2.抓包,从当前时间起,一小时后停止,…...
qtcanpool 知 09:测试框架
文章目录 前言不满改进优化后语 前言 很久以前,作者写的代码都没有测试用例,最多就是写个 demo 验证一下,毕竟不是专业出身,也没经过大公司的洗礼。 后来,参与到一些项目才知道有专门的测试,而且开发也要测…...
使用Apache HttpClient发起一个GET HTTP请求
Apache HttpClient 是一个强大且灵活的Java库,用于处理HTTP请求。 它提供了广泛的功能,包括对不同HTTP方法的支持、连接管理、Cookie处理等。 无论是与RESTful API交互、下载网页内容还是自动化网页任务,Apache HttpClient 都能通过其简洁而…...
C++ STL 容器系列(三)list —— 编程世界的万能胶,数据结构中的百变精灵
STL系列学习参考: C STL系列__zwy的博客-CSDN博客https://blog.csdn.net/bite_zwy/category_12838593.html 学习C STL的三个境界,会用,明理,能扩展,STL中的所有容器都遵循这个规律,下面我们就按照这三个境…...
【前端学习笔记】TypeScript学习
1.什么是TypeScript TypeScript(简称 TS)是微软公司开发的一种基于 JavaScript (简称 JS)语言的编程语言。TypeScript 可以看成是 JavaScript 的超集(superset),添加了类型系统和编译时类型检查…...
qt三大调试方法总结(printf\qDebug\qCDebug)
文章目录 1 传统方法2 qDebug传统方法扩展1 控制输出扩展2 日志格式扩展3 日志保存扩展4 源码定义护展5 开源扩展3 qCDebug方法扩展1 控制扩展2 格式化扩展3 保存日志扩展4 源码定义参考1 传统方法 #include<stdio.h> printf(“xboard hello printf”) 2 qDebug传统方法…...
耶鲁大学公开课《心理学导论》学习笔记:第 1 课 - 导论
概述 作为一个程序员,或者说,我们不管做什么行业,都可以或多或少的学习一些心理学 我们在生活工作中,其实都会有意无意的接触一些心理学原理,例如,【番茄工作法】、【内在动机与外在激励】 这里选择的是&…...
Android ConstraintLayout 约束布局的使用手册
目录 前言 一、ConstraintLayout基本介绍 二、ConstraintLayout使用步骤 1、引入库 2、基本使用,实现按钮居中。相对于父布局的约束。 3、A Button 居中展示,B Button展示在A Button正下方(距离A 46dp)。相对于兄弟控件的约束…...