如何锁定MYSQL内存在物理内存里?
MYSQL 8.0 这个参数是 OFF
这个参数是啥意思呢? 按英文单词理解是 锁定在内存意思.突然想起来是因为
周报巡检时主库有使用SWAP内存

而从库却使用更多

使用脚本查看SWAP 进程排序
for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2} END {if(a>0) { print '"$i"',a/1024,"Mb"}}' /proc/$i/smaps;done |sort -k2nr
结果是MYSQLD 使用2.9GB SWAP
官网参数说明
-
locked_in_memorySystem Variable locked_in_memoryScope Global Dynamic No SET_VARHint AppliesNo Type Boolean Default Value OFFWhether mysqld was locked in memory with
--memlock.
先在MY.CNF配置文件搞搞
locked_in_memory=ON
locked_in_memory=1
结果 MYSQL起不来, 查看报错日志说 不认得该参数. 丢! 真是的
上面官网最后一句英文意思是启动的选项. 其实做进配置文件也是一样的.
-
--memlockCommand-Line Format --memlock[={OFF|ON}]Type Boolean Default Value OFFLock the mysqld process in memory. This option might help if you have a problem where the operating system is causing mysqld to swap to disk.
--memlockworks on systems that support themlockall()system call; this includes Solaris, most Linux distributions that use a 2.4 or higher kernel, and perhaps other Unix systems. On Linux systems, you can tell whether or notmlockall()(and thus this option) is supported by checking to see whether or not it is defined in the systemmman.hfile, like this:$> grep mlockall /usr/include/sys/mman.hIf
mlockall()is supported, you should see in the output of the previous command something like the following:extern int mlockall (int __flags) __THROW;Important
Use of this option may require you to run the server as
root, which, for reasons of security, is normally not a good idea. See Section 6.1.5, “How to Run MySQL as a Normal User”.On Linux and perhaps other systems, you can avoid the need to run the server as
rootby changing thelimits.conffile. See the notes regarding the memlock limit in Section 8.12.3.2, “Enabling Large Page Support”.You must not use this option on a system that does not support the
mlockall()system call; if you do so, mysqld is very likely to exit as soon as you try to start it.
英文意思是 要看系统支不支持通过下面的命令
grep mlockall /usr/include/sys/mman.h
如果出现 就表示支持extern int mlockall (int __flags) __THROW; 如果不支持的话, 你又想锁定内存 那只有使用大页方式. 关于大页小仙我也实验了一篇
探索MYSQL开启大页内存
大页计算有点问题,里面的BINLOG_CACHE_SIZE 应该属于线程内存.
OK 我们去启动MYSQLD守护进程里面设置下.
以下是CENTOS 7 接受运维搭建的MYSQLD 是通过SYSTEMD方式启动服务的.
编辑 添加 --memlock=ON
/usr/lib/systemd/system/mysqld.service
# Start main service
ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS --memlock=ON
然后 systemctl daemon-reload 启用新的服务配置文件
然后 就重启MYSQLD 报错文件没有错误信息就OK
[root@localhost ~]# ps -ef |grep mysqld
root 9501 1 0 16:15 ? 00:00:36 /usr/sbin/mysqld --memlock=ON
root 13539 24556 0 17:36 pts/0 00:00:00 grep --color mysqld
我们再运行下脚本检查下SWAP使用情况,发现TOP的是3434进程 不是9501
[root@localhost ~]# free -mtotal used free shared buff/cache available
Mem: 7821 5520 541 31 1758 1551
Swap: 8063 24 8039
[root@localhost ~]# for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;
> do
> awk '/Swap:/{a=a+$2} END {if(a>0) { print '"$i"',a/1024,"Mb"}}' /proc/$i/smaps;
> done |sort -k2nr
awk: fatal: cannot open file `/proc/13580/smaps' for reading (No such file or directory)
awk: fatal: cannot open file `/proc/13581/smaps' for reading (No such file or directory)
awk: fatal: cannot open file `/proc/13582/smaps' for reading (No such file or directory)
awk: fatal: cannot open file `/proc/13583/smaps' for reading (No such file or directory)
3434 9.82422 Mb
3186 2.98828 Mb
24553 1.21484 Mb
24576 1.125 Mb
3788 1.00781 Mb
3792 1 Mb
3432 0.917969 Mb
1708 0.621094 Mb
3192 0.542969 Mb
1705 0.359375 Mb
3158 0.3125 Mb
3181 0.292969 Mb
3188 0.246094 Mb
24579 0.191406 Mb
1684 0.183594 Mb
3189 0.171875 Mb
3183 0.15625 Mb
17304 0.152344 Mb
24556 0.125 Mb
13578 0.121094 Mb
3225 0.121094 Mb
10942 0.117188 Mb
12288 0.109375 Mb
是否真的还会被SWAP出去呢? 这个嘛就要加压测试,大量读取文件等操作.
不过我们通过上述方法可进行判断该参数是否有效把MYSQLD锁定在内存里.
目前通过手工 二进制安装, 源码编译安装, 源码DEBUG版本安装 方式都可以顺利LOCK
MYSQL 8.0 内存 被锁定在物理内存里,不被SWAP到磁盘上
1 设置参数
[MYSQLD]user=sharkmemlock
2 设置系统限制
vim /etc/security/limits.confmysql hard memlock unlimitedmysql soft memlock unlimited
3 需要root 重启MYSQL服务
普通用户不行
4 采用CENTOS 6 老方式
编辑服务守候cd support-files/cp mysql.server /etc/init.d/mysqldvi /etc/init.d/mysqldbasedir=/DB/release/mysql5735/softdatadir=/DB/release/mysql5735/data
本来用MYSQL 8.0 + CENTOS 7 可以这样设置成功!
MYSQL 5.7.35+CENTOS 7 也成功!
[root@VBOX-OS7-NETBEAN8-CPP ~]# service mysql5 startStarting MySQL. SUCCESS![root@VBOX-OS7-NETBEAN8-CPP ~]# ps -ef | grep mysqldroot 16990 1 0 17:51 pts/3 00:00:00 /bin/sh /DB/debug/mysql5735/soft/bin/mysqld_safe --datadir=/DB/debug/mysql5735/data --pid-file=/DB/debug/mysql5735/data/mysqld.pidmysql 17386 16990 7 17:51 pts/3 00:00:00 /DB/debug/mysql5735/soft/bin/mysqld --basedir=/DB/debug/mysql5735/soft --datadir=/DB/debug/mysql5735/data --plugin-dir=/DB/debug/mysql5735/soft/lib/plugin --user=mysql --log-error=/DB/debug/mysql5735/conf_log/mysql-error.log --pid-file=/DB/debug/mysql5735/data/mysqld.pid --socket=/tmp/mysql.sock --port=3306[root@VBOX-OS7-NETBEAN8-CPP ~]# cat /proc/17386/limitsLimit Soft Limit Hard Limit UnitsMax cpu time unlimited unlimited secondsMax file size unlimited unlimited bytesMax data size unlimited unlimited bytesMax stack size 8388608 unlimited bytesMax core file size 0 unlimited bytesMax resident set unlimited unlimited bytesMax processes 31484 31484 processesMax open files 5000 5000 filesMax locked memory 65536 65536 bytesMax address space unlimited unlimited bytesMax file locks unlimited unlimited locksMax pending signals 31484 31484 signalsMax msgqueue size 819200 819200 bytesMax nice priority 0 0Max realtime priority 0 0Max realtime timeout unlimited unlimited us[root@VBOX-OS7-NETBEAN8-CPP ~]# cat /proc/meminfo | grep MlockedMlocked: 580660 kB
反而模拟YUM 安装的用户 + systemd 启动就不行
经过 很多天的研究 多方测试 排除法 得如下成果
新建个服务配置如下. 我这里直接用了上面初始化后的数据库,只不过使用不同的服务脚本而已
vim /usr/lib/systemd/system/mysqld.service[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=rootGroup=rootType=forking# Disable service start and stop timeout logic of systemd for mysqld service.TimeoutSec=0# Execute pre and post scripts as rootPermissionsStartOnly=true# Needed to create system tables#ExecStartPre=/usr/bin/mysqld_pre_systemd# Start main serviceExecStart=/DB/debug/mysql5735/soft/bin/mysqld --defaults-file=/DB/debug/mysql5735/data/my.cnf --daemonize --pid-file=/DB/debug/mysql5735/data/mysqld.pid#ExecStart=/DB/debug/mysql5735/soft/bin/mysqld_safe --datadir=/DB/debug/mysql5735/data --pid-file=/DB/debug/mysql5735/data/mysqld.pid# Use this to switch malloc implementation#EnvironmentFile=-/etc/sysconfig/mysql# Sets open_files_limitLimitNOFILE = 5000#Restart=on-failure#RestartPreventExitStatus=1LimitMEMLOCK=infinity
# 使新添加的mysqld服务开机启动
systemctl enable mysqld.service[root@VBOX-OS7-NETBEAN8-CPP /]# systemctl enable mysqld.serviceCreated symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
创建mysql用户来管理数据库 查看测试数据库 YUM 自动安装的MYSQL
[root@localhost multi-user.target.wants]# cat /etc/passwdmysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/falsemysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
#查看新机器上是否有?
[root@mysql mysql]# cat /etc/passwd|grep mysqlmysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash[root@mysql mysql]# cat /etc/group |grep mysqlmysql:x:27:
#如果没有,则创建用户组和用户
[root@mysql mysql]# groupadd mysql[root@mysql mysql]# useradd -g mysql mysql
#编辑密码文件
vim /etc/passwdmysql:x:1001:1001:Mysql5:/DB/debug/mysql5735/soft:/bin/bash/false
#修改目录所有者
chown -R mysql:mysql DB/
# 手动启动mysqld
systemctl start mysqldsystemctl status mysqldsystemctl daemon-reload
#用ROOT启动
[root@VBOX-OS7-NETBEAN8-CPP data]# vim /usr/lib/systemd/system/mysqld.service[root@VBOX-OS7-NETBEAN8-CPP data]# sudo systemctl daemon-reload[root@VBOX-OS7-NETBEAN8-CPP data]# systemctl start mysqld[root@VBOX-OS7-NETBEAN8-CPP data]# systemctl status mysqld.service● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: active (running) since 三 2022-11-30 18:50:02 CST; 5s agoDocs: man:mysqld(8)http://dev.mysql.com/doc/refman/en/using-systemd.htmlProcess: 24476 ExecStart=/DB/debug/mysql5735/soft/bin/mysqld --defaults-file=/DB/debug/mysql5735/data/my.cnf --daemonize --pid-file=/DB/debug/mysql5735/data/mysqld.pid (code=exited, status=0/SUCCESS)Main PID: 24479 (mysqld)CGroup: /system.slice/mysqld.service└─24479 /DB/debug/mysql5735/soft/bin/mysqld --defaults-file=/DB/debug/mysql5735/data/my.cnf --daemonize --pid-file=/DB/debug/mysql5735/data/mysqld.pid11月 30 18:50:01 VBOX-OS7-NETBEAN8-CPP systemd[1]: Starting MySQL Server...11月 30 18:50:02 VBOX-OS7-NETBEAN8-CPP systemd[1]: Started MySQL Server.
[root@VBOX-OS7-NETBEAN8-CPP /]# ps -ef | grep mysqldmysql 24479 1 1 18:50 ? 00:00:00 /DB/debug/mysql5735/soft/bin/mysqld --defaults-file=/DB/debug/mysql5735/data/my.cnf --daemonize --pid-file=/DB/debug/mysql5735/data/mysqld.pidroot 24648 4892 0 18:50 pts/4 00:00:00 grep --color=auto mysqld[root@VBOX-OS7-NETBEAN8-CPP /]# cat /proc/24479/limitsLimit Soft Limit Hard Limit UnitsMax cpu time unlimited unlimited secondsMax file size unlimited unlimited bytesMax data size unlimited unlimited bytesMax stack size 8388608 unlimited bytesMax core file size 0 unlimited bytesMax resident set unlimited unlimited bytesMax processes 31484 31484 processesMax open files 5000 5000 filesMax locked memory 65536 65536 bytesMax address space unlimited unlimited bytesMax file locks unlimited unlimited locksMax pending signals 31484 31484 signalsMax msgqueue size 819200 819200 bytesMax nice priority 0 0Max realtime priority 0 0Max realtime timeout unlimited unlimited us[root@VBOX-OS7-NETBEAN8-CPP /]# cat /proc/meminfo|grep MMemTotal: 4048100 kBMemFree: 803032 kBMemAvailable: 2582780 kBMlocked: 580660 kBMapped: 73452 kBDirectMap4k: 88000 kBDirectMap2M: 4106240 kB2022-11-30T10:50:01.970145Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).2022-11-30T10:50:01.970528Z 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled2022-11-30T10:50:01.970604Z 0 [Note] /DB/debug/mysql5735/soft/bin/mysqld (mysqld 5.7.35-debug) starting as process 24479 ...2022-11-30T10:50:01.978398Z 0 [Note] InnoDB: PUNCH HOLE support available2022-11-30T10:50:01.978428Z 0 [Note] InnoDB: !!!!!!!! UNIV_DEBUG switched on !!!!!!!!!2022-11-30T10:50:01.978438Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins2022-11-30T10:50:01.978489Z 0 [Note] InnoDB: Uses event mutexes2022-11-30T10:50:01.978503Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier2022-11-30T10:50:01.978509Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.72022-11-30T10:50:01.978514Z 0 [Note] InnoDB: Using Linux native AIO2022-11-30T10:50:01.978956Z 0 [Note] InnoDB: Number of pools: 12022-11-30T10:50:01.979112Z 0 [Note] InnoDB: Using CPU crc32 instructions2022-11-30T10:50:01.980401Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
成功了! MLOCKED
[root@VBOX-OS7-NETBEAN8-CPP /]# cat /proc/meminfo|grep MMemTotal: 4048100 kBMemFree: 803032 kBMemAvailable: 2582780 kBMlocked: 580660 kB
MYSQL 配置文件
[mysqld]#servicebasedir=/DB/debug/mysql5735/softdatadir=/DB/debug/mysql5735/datacharacter-set-server=UTF8mb4socket=/tmp/mysql.sockinit_connect='SET NAMES utf8mb4'user=mysqlport = 3306pid-file=/DB/debug/mysql5735/data/mysqld.pidlog-error=/DB/debug/mysql5735/conf_log/mysql-error.log#InnoDB#default-storage-engine=INNODBinnodb_buffer_pool_size=128Minnodb_log_file_size=256Minnodb_log_buffer_size=12Mmemlock#### Thread Memon Setjoin_buffer_size=8Msort_buffer_size=8Mread_buffer_size=8Mread_rnd_buffer_size=8Mtmp_table_size=16Mbinlog_cache_size=16Mbulk_insert_buffer_size=8Mthread_cache_size = 32thread_stack = 256K
总结下
1 不需要给普通用户配置 LIMIT.CONF
因为是由ROOT启动的
2 YUM 安装的SYSTEMD服务
用户组要改成ROOT 再添加内存锁参数
[Service]User=rootGroup=rootLimitMEMLOCK=infinity
相关文章:
如何锁定MYSQL内存在物理内存里?
MYSQL 8.0 这个参数是 OFF 这个参数是啥意思呢? 按英文单词理解是 锁定在内存意思.突然想起来是因为 周报巡检时主库有使用SWAP内存 而从库却使用更多 使用脚本查看SWAP 进程排序 for i in cd /proc;ls |grep "^[0-9]"|awk $0 >100 ;do awk /Swap:/{aa$2} EN…...
vue菜单栏跳转方案
vue菜单栏跳转方案 <template><div><el-container style"height: 100vh"><el-aside width"200px" style"background-color: #b3c0d1"><el-menuopen"handleOpen"close"handleClose"select"h…...
科技企业如何做到FTP数据安全保护
在数字化浪潮的推动下,科技企业的数据已成为推动创新、提升效率、增强竞争力的核心资源。数据的重要性不言而喻,它不仅包含了客户信息、市场分析、产品设计等关键信息,更是企业宝贵的资产。然而,随着数据量的激增,数据…...
Ubuntu服务器fail2ban的使用
作用:限制ssh远程登录,防止被人爆破服务器,封禁登录ip 使用lastb命令可查看到登录失败的用户及ip,无时无刻的不在爆破服务器 目录 一、安装fail2ban 二,配置fail2ban封禁ip的规则 1,进入目录并创建ssh…...
全量知识系统问题及SmartChat给出的答复 之10 三套工具之5语法解析器之3
Q27. 从前面可以看出,IPP解析器给出两种文法规则,一种是人工的(文字处理和文本理解),一种是机器的(图形算法和图像处理)。前者可以是一套文写文章的注释工具的底层,可以使用颜色来着…...
【leetcode】环形链表✚环形链表II
大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1.环形链表解题拓展: 2.环形链表II 1.环形链表 点击查看题目 解题 思路: bool hasCycle…...
SparkStreaming在实时处理的两个场景示例
简介 Spark Streaming是Apache Spark生态系统中的一个组件,用于实时流式数据处理。它提供了类似于Spark的API,使开发者可以使用相似的编程模型来处理实时数据流。 Spark Streaming的工作原理是将连续的数据流划分成小的批次,并将每个批次作…...
02点亮一个LED
书接上回 上回讲到创建一个示例工程 今天讲如何实现LED的点亮 点亮一个led 所需代码 参考来源网络 延时函数参考: Delay.c #include "stm32f10x.h"/*** brief 微秒级延时* param xus 延时时长,范围:0~233015* retval 无*/ vo…...
【代码分享】
//插入排序 void lnsertionSort(int a[], int n) { int end 0; int tmp 0; int i 0; for (i 0;i < n - 1; i) { end i; tmp a[end 1]; while (end > 0) { if (a[end] > tmp) { a[end 1] a[end]; end–; } else { break; } } a[end 1] tmp; } } //希尔排序…...
windows 使用ffmpeg .a静态库:读取Wav音频并保存PCM
ffmpeg读取Wav音频并保存PCM(源代码保存成 c 文件): // test_ffmpeg.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 ////#include <iostream>#include <libavcodec/avcodec.h> #include <libavform…...
Docker部署ZooKeeper
在分布式系统中,ZooKeeper是一个关键的组件,用于协调和管理多个节点之间的状态。本文将详细介绍如何使用Docker安装和部署ZooKeeper,包括非集群部署和集群部署两种情况。 非集群部署 前期准备 在开始之前,请确保你已经安装了Docker,并且拥有sudo权限。 关闭防火墙和SEL…...
在PyCharm中使用Git
安装Git CMD检查Git版本 打开cmd,输入git version,检查当前下载版本 配置git的user信息 在cmd中输入 git config --global user.name "用户名"git config --global user.email "用户邮箱"输入:git config --list&…...
【JavaSE】 P165 ~ P194 抽象方法,抽象类,接口,接口内容,多接口实现和父类继承,多态,向上转型,向下转型
目录 抽象抽象的概念抽象方法和抽象类的格式抽象方法和抽象类的使用抽象方法和抽象类的注意事项● 练习1. 写一个父类图形类,其中有方法,功能计算面积为抽象方法。2. 抽象类继承。判断对错,没错的分析运行结果3. 发红包,群内用户类作为父类,有…...
LeetCode: 数组中的第K个最大元素
问题描述 在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。 解题思路 解决这个问题有多种方法,下面是几种常见的解题策略: 排序后选择: 将数组排序,…...
亚马逊自养号测评:如何安全搭建环境,有效规避风险
要在亚马逊上进行自养号测评,构建一个真实的国外环境至关重要。这包括模拟国外的服务器、IP地址、浏览器环境,甚至支付方式,以创建一个完整的国际操作环境。这样的环境能让我们自由注册、养号并下单,确保所有操作均符合国际规范。…...
uniApp 调整小程序 单个/全部界面横屏展示效果
我们打开uni项目 小程序端运行 默认是竖着的一个效果 我们打开项目的 pages.json 给需要横屏的界面 的 style 属性 加上 "mp-weixin": {"pageOrientation": "landscape" }界面就横屏了 如果是要所有界面都横屏的话 就直接在pages.json 的 gl…...
【java】18:内部类(2)匿名内部类
(1)本质是类(2)内部类(3)该类没有名字(4)同时还是一个对象 说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名 1.匿名内部类的…...
c语言之字符串的输入和输出
c语言在输出字符串时,用格式符‘%s",代码比较简洁 如果说数组长度大于字符串长度,也只输出\0前的内容 字符串默认后面有\0. 如果字符串有多个\0,会默认在第一个\0结束 #include<stdio.h> int main() {int i;char a…...
戏说c第二十六篇: 测试完备性衡量(代码覆盖率)
前言 师弟:“师兄,我又被鄙视了。说我的系统太差,测试不过关。” 我:“怎么说?” 师弟:“每次发布版本给程夏,都被她发现一些bug,太丢人了。师兄,有什么方法来衡量测试的…...
C语言初阶—函数
函数:子程序,是一个大型程序中的某部分代码,由一个或多个语句块组成,它负责完成某项特定任务,而且相较于其他代码,具有相对独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏&a…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
