当前位置: 首页 > news >正文

如何搭建JMeter分布式集群环境来进行性能测试

在性能测试中,当面对海量用户请求的压力测试时,单机模式的JMeter往往力不从心。如何通过分布式集群环境,充分发挥JMeter的性能测试能力?这正是许多测试工程师在面临高并发、海量数据时最关注的问题。那么,如何轻松搭建JMeter分布式集群环境,实现性能测试的最大化呢?

你是否也曾为测试负载过大而不知所措?你是否对JMeter的分布式集群功能充满好奇?今天,我们将详细讲解如何通过搭建JMeter分布式集群环境,帮助你轻松应对高并发、高负载的性能测试需求!

  • 分布式测试的优势
    在分布式测试环境中,多个负载机(Slave)协同工作,可以生成更高的并发量,突破单机的资源限制。

  • 真实案例
    某大型电商平台曾通过JMeter分布式集群测试,模拟上百万用户访问场景,精准定位系统瓶颈,成功避免了购物节期间的崩溃事故。

前提条件

  在开始之前,请确保满足以下前提条件:

  ·确保 JMeter 能够访问待测试的服务器(可以通过虚拟机上的 curl 命令来检查连通性),如果无法访问,你可能需要调研当前环境是否能够用来作为压力源;

  · 确保所有系统上使用相同版本的 JMeter(我们当前使用的是 5.6.3)。混用不同版本可能无法正常工作;

  · 确保系统上的防火墙已禁用或正确打开了相关端口;

  概念

  控制节点:运行 jmeter-client 的系统,它控制测试。该系统可以是你的笔记本电脑(需要先打开防火墙)或虚拟机。

  工作节点:运行 jmeter-server 的系统,它接收来自 jmeter-client 的指令并向目标系统发送请求,通常是虚拟机。

  目标:我们计划进行压力测试的 Web 服务器。

  安装

  对于 MacOS

  使用 Homebrew 安装 JMeter,并通过 jmeter --version 命令验证安装:

 brew install jmeterjmeter --version

  在我编写本文时,使用的版本是 5.6.3。

  对于 Ubuntu20

  不要 使用 apt install jmeter 命令安装 JMeter,因为 apt 安装的版本已过时(2.13),加载 .jmx 文件将会报错从而无法正常工作。

  手动安装:

  1. 在 VM 上安装 JDK:

  sudo apt install openjdk-11-jre-headless`

  2. 从 https://jmeter.apache.org/download_jmeter.cgi 下载压缩包文件(通过你的 笔记本电脑),然后将其上传至 VM。

  3. 使用 scp/rsync 上传至虚拟机,然后解压最新的 JMeter 压缩包。在笔记本电脑上输入以下命令(请记得修改目标目录):

  rsync -avz apache-jmeter-5.6.3/ <remote-host>:/path/to/place

  4. 将文件移动至正确位置并修改 PATH 环境变量:

  # 移动至合适的目录,比如 /opt/jmeter sudo mv /path/to/place /opt/ # 将其添加到 PATH,你可以将其写入 ~/.bashrc 文件以持久化配置 vim ~/.bashrcexport PATH=/opt/jmeter/bin:$PATH # 退出 vim 并使用 source 命令生效 source ~/.bashrc

  5. 检查版本,确保一切就绪:

  jmeter --version    

  输出结果应如下所示:

      _    ____   _    ____ _   _ _____       _ __  __ _____ _____ _____ ____     / \  |  _ \ / \  / ___| | | | ____|     | |  \/  | ____|_   _| ____|  _ \    / _ \ | |_) / _ \| |   | |_| |  _|    _  | | |\/| |  _|   | | |  _| | |_) |   / ___ \|  __/ ___ \ |___|  _  | |___  | |_| | |  | | |___  | | | |___|  _ <  /_/   \_\_| /_/   \_\____|_| |_|_____|  \___/|_|  |_|_____| |_| |_____|_| \_\ 5.6.3  Copyright (c) 1999-2024 The Apache Software Foundation

  配置

  在运行分布式模式之前,需要完成以下配置:

  在控制节点

  将服务器 IP 添加到客户端的 Properties 文件中

  在 $JMETER_HOME/bin/jmeter.properties 文件中(本文的路径是 /opt/jmeter/bin/jmeter.properties),找到名为 "remote_hosts" 的单元,添加正在运行的 JMeter 服务器的 IP 地址。可以添加多个服务器,用逗号分隔,例如:

  # Edit the line: remote_hosts=127.0.0.1 and configure as below:remote_hosts=10.0.0.1,10.0.0.2,10.0.0.3

  通过更改值并取消注释来禁用 rmi.ssl:

  server.rmi.ssl.disable=true

  同时,强烈建议将默认的 jmeter.reportgenerator.overall_granularity 值从 60 秒更改为 5 秒,以获得更好的报告体验!

  jmeter.reportgenerator.overall_granularity=5000

  否则,你的报告可能就会长成这样:


  更改此值后,上述的报告将更易读:


  在工作节点

  通过更改值并取消注释来禁用 rmi.ssl:

  server.rmi.ssl.disable=true

  然后启动 jmeter-server 以监听来自控制节点的命令:

  jmeter-server

  你应看到如下输出:

  $ jmeter-server   
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release Created remote object: UnicastServerRef2 [liveRef: [endpoint:[10.0.0.1:38803](local),objID:[-7d9e7ab6:1916e54ddb2:-7fff, -6565134591293374723]]]

​​​​​​​

  使用方式

  单节点模式

  使用单节点模式进行调试,命令如下:

  jmeter -n -t <script_path> -l <results-file>

  选项 -n:以非 GUI 模式运行 JMeter

  选项 -t:要运行的 JMeter 测试(.jmx)文件

  选项 -l:指定结果日志文件

  分布式模式

  注意:

  所有服务器将运行相同的测试计划。JMeter 不会在服务器之间分配负载,每台服务器都会运行完整的测试计划。因此,如果你设置 1000 个线程并有 6 台 JMeter 服务器,你最终将注入 6000 个线程。

  如果 jmeter.properties 文件配置正确,只需在执行命令时添加 -r 选项,例如:

  jmeter -n -t <script_path> -l <results-file> -r

  选项 -r:使用 remote_hosts 属性中指定的所有节点。

  你还可以使用 -R 选项指定希望使用的节点,例如:

  jmeter -n -t <script_path> -l <results-file> -R 10.0.0.1,10.0.0.2

  此时只有 10.0.0.1 和 10.0.0.2 会参与测试,输出将如下所示:​​​​​​​

  $ jmeter -n -t demo.jmx -l result.csv -r  WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release  WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release  WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release  WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release  Creating summariser <summary>  Created the tree successfully using demo.jmx  Configuring remote engine: 10.0.0.1  Configuring remote engine: 10.0.0.2  Starting distributed test with remote engines: [10.0.0.1, 10.0.0.2] @ 2024 Aug 20 14:11:02 CST (1724134262441)  Warning: Nashorn engine is planned to be removed from a future JDK release  Remote engines have been started:[10.0.0.1, 10.0.0.2]  Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445  summary +      1 in 00:00:00 =   17.2/s Avg:     1 Min:     1 Max:     1 Err:     0 (0.00%) Active: 2 Started: 2 Finished: 0  summary +   5999 in 00:00:10 =  605.8/s Avg:     0 Min:     0 Max:     3 Err:     0 (0.00%) Active: 0 Started: 200 Finished: 200  summary =   6000 in 00:00:10 =  602.2/s Avg:     0 Min:     0 Max:     3 Err:     0 (0.00%)  Tidying up remote @ 2024 Aug 20 14:11:12 CST (1724134272743)  … end of run

  HTML 报告生成

  要从现有结果文件生成报告,使用以下命令:

  jmeter -g <result-file> -o <Path to output folder>

  或者在负载测试完成后立即生成报告,使用以下命令:

  jmeter -n -t <script_path> -l <result-file> -r -e -o <Path to output folder>

  假设你运行以下命令:

  jmeter -n -t demo.jmx -l result.csv -r -e -o report

  然后你将看到如下输出:​​​​​​​

  $ ll ./report/total 32drwxr-xr-x  4 dohong users 4096 Aug 20 14:44 ./drwx------ 10 dohong users 4096 Aug 20 14:44 ../drwxr-xr-x  5 dohong users 4096 Aug 20 14:44 content/-rw-r--r--  1 dohong users 9669 Aug 20 14:44 index.htmldrwxr-xr-x  5 dohong users 4096 Aug 20 14:44 sbadmin2-1.0.7/-rw-r--r--  1 dohong users  890 Aug 20 14:44 statistics.json

  双击打开 index.html 文件你就会得到类似如下的报告:

  左侧导航栏可以切换不同的页面查看不同的统计数据和图表,至此,分布式压测的环境搭建就全部大功告成了。

  注意事项

  ·将 jmeter.reportgenerator.overall_granularity 的值从 60000 改为 5000 强烈建议,这可以带来更好的报告体验。

  · 无需手动同步测试脚本到工作节点,JMeter 会为你完成同步,但仍需要将本地脚本同步到控制节点;

  · 使用 CLI 模式 而非 GUI 模式,避免性能下降;

  · 使用尽可能少的监听器;如果使用 -l 标志记录结果,监听器可以删除或禁用。

  · 在负载测试过程中不要使用 "查看结果树" 或 "查看表格中的结果" 监听器,它们应仅在脚本调试阶段使用,否则性能可能会下降 3 倍!

  · 如果测试需要大量数据,尤其是随机化或加密/解密数据,请将测试数据提前生成并通过 CSV 数据集读取文件,这可以避免运行时浪费资源。

在当前的技术趋势中,微服务架构云原生的普及,使得系统规模更庞大、模块更多,性能测试的重要性更加突出。JMeter分布式测试成为企业应对复杂性能测试需求的首选方案。

搭建JMeter分布式集群不仅提升了性能测试的能力,也为系统性能优化提供了更加全面的数据支撑。掌握这项技能,让你的性能测试如虎添翼

“高并发不是系统的敌人,而是推动性能优化的良师益友——关键在于你是否具备掌控它的能力!”

 

相关文章:

如何搭建JMeter分布式集群环境来进行性能测试

在性能测试中&#xff0c;当面对海量用户请求的压力测试时&#xff0c;单机模式的JMeter往往力不从心。如何通过分布式集群环境&#xff0c;充分发挥JMeter的性能测试能力&#xff1f;这正是许多测试工程师在面临高并发、海量数据时最关注的问题。那么&#xff0c;如何轻松搭建…...

蓝桥杯准备训练(lesson2 ,c++)

3.1 字符型 char //character的缩写在键盘上可以敲出各种字符&#xff0c;如&#xff1a; a &#xff0c; q &#xff0c; &#xff0c; # 等&#xff0c;这些符号都被称为字符&#xff0c;字符是⽤单引号括 起来的&#xff0c;如&#xff1a; ‘a’ &#xff0c; ‘b’ &…...

【踩坑】Collectors.toMap 抛出 NullPointerException 异常

1. 场景重现 public class Test01 {public static void main(String[] args) {List<Person> list Arrays.asList(new Person("anna", 17, 0), new Person("bob", 18, 1), new Person("jack", 20, null));Map<String, Integer> nam…...

泷羽sec专题课笔记-- Linux作业--开机自启动方法以及破解

本笔记为 泷羽sec 《红队全栈课程》学习笔记&#xff0c;课程请可自行前往B站学习&#xff0c;课程/笔记主要涉及网络安全相关知识、系统以及工具的介绍等&#xff0c;请使用该课程、本笔记以及课程和笔记中提及工具的读者&#xff0c;遵守网络安全相关法律法规&#xff0c;切勿…...

OpenCV

MFC&#xff08;C&#xff09;的使用 1、官网下载 https://opencv.org/ 选 Library - Release - 选择你需要的版本 2、安装 3、配置环境变量 将 OpenCV 的bin目录 C:\Program Files\OpenCV481\opencv\build\bin添加到系统的PATH环境变量中。这使得在运行程序时能够找到 Open…...

Wwise 使用MIDI文件、采样音频

第一种&#xff1a;当采样音频只有一个文件的时候 1.拖入MIDI文件到Interactive Music Hierarchy层级 2.拖入采样音频到Actor-Mixer Hierarchy层级 3.勾选MIDI显示出面板&#xff0c;设置Root Note与采样音频音高相同&#xff0c;这里是C#5 4.播放测试&#xff0c;成功&…...

OpenStack-Glance组件

Glance Glance使用磁盘格式和容器格式基础配置镜像转换 Glance 是 OpenStack 的镜像服务&#xff0c;负责存储、发现和管理虚拟机镜像。它允许用户创建和共享镜像&#xff0c;用于启动虚拟机实例。 Glance 的主要功能 &#xff08;1&#xff09;虚拟机镜像的管理 支持镜像的上…...

写译热点单词 | 50篇文章整理 | 手敲自用

目录 文化类 政治类 经济类 教育类 科技类 健康类 安全类 体育类 第二版 删去了部分不太常用的 文化类 1. 阴历: lunar calendar 2. 阳历: solar calendar 3. 春节: the Spring Festival 4. 除夕: Chinese New Year’s Eve 5. 清明节: Tomb Sweeping Day 6. 重阳…...

【UE5 C++】判断两点连线是否穿过球体

目录 前言 方法一 原理 代码 测试 结果 方法二 原理 一、检查连线与球体的相交情况 二、检查距离与球体半径的关系 三、检查连线与球体的相交 代码 前言 通过数学原理判断空间中任意两点的连线是否穿过球体&#xff0c;再通过射线检测检验算法的正确性。 方法一 …...

A1228 php+Mysql旅游供需平台的设计与实现 导游接单 旅游订单 旅游分享网站 thinkphp框架 源码 配置 文档 全套资料

旅游供需平台 1.项目描述2. 开发背景与意义3.项目功能4.界面展示5.源码获取 1.项目描述 随着社会经济的快速发展&#xff0c;生活水平的提高&#xff0c;人们对旅游的需求日益增强&#xff0c;因此&#xff0c;为给用户提供一个便利的查看导游信息&#xff0c;进行导游招募的平…...

【linux】服务器Ubuntu20.04安装cuda11.8教程

【linux】服务器Ubuntu20.04安装cuda11.8教程 文章目录 【linux】服务器Ubuntu20.04安装cuda11.8教程到官网找到对应版本下载链接终端操作cudnn安装到官网下载下载后解压进入解压后的目录&#xff1a;将头文件复制到 /usr/local/cuda/include/ 目录&#xff1a;将库文件复制到 …...

SpringMVC其他扩展

一、全局异常处理机制: 1.异常处理两种方式: 开发过程中是不可避免地会出现各种异常情况的&#xff0c;例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题&#xff0c;甚至直接导致程序崩溃。因此&#xff0c;在开发过程中&#xff0c;…...

用“*”构成一个倒三角形:JAVA

输入&#xff1a;5 输出&#xff1a; ******* ***** *** * 代码&#xff1a; import java.util.Scanner; //倒三角 public class FF6 {public static void main(String[] args) {Scanner scannernew Scanner(System.in);while (scanner.hasNextInt()){int nscanner…...

洛谷P2670扫雷游戏(Java)

三.P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n 行 m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩…...

Windows 11 环境下 条码阅读器输入到记事本的内容不完整

使用Windows11时&#xff0c;为什么记事本应用程序中的扫描数据被截断或不完整?为什么sdo 特殊字符的显示与Windows 10 记事本应用程序不同? 很多人认为和中文输入法有关&#xff0c;其实主要问题出在这个windows11下的记事本程序上&#xff0c;大家知道这个就可以了&#x…...

C# 动态类型 Dynamic

文章目录 前言1. 什么是 Dynamic&#xff1f;2. 声明 Dynamic 变量3. Dynamic 的运行时类型检查4. 动态类型与反射的对比5. 使用 Dynamic 进行动态方法调用6. Dynamic 与 原生类型的兼容性7. 动态与 LINQ 的结合8. 结合 DLR 特性9. 动态类型的性能考虑10. 何时使用 Dynamic&…...

设计模式10:观察者模式(订阅-发布)

系列总链接&#xff1a;《大话设计模式》学习记录_net 大话设计-CSDN博客 参考&#xff1a;简说设计模式——工厂方法模式 - JAdam - 博客园 参考&#xff1a;简单工厂模式(Simple Factory Pattern) - 回忆酿的甜 - 博客园 一&#xff1a;概述 观察者模式&#xff0…...

2020 年 12 月青少年软编等考 C 语言四级真题解析

目录 T1. 开餐馆思路分析T2. 邮票收集思路分析T3. 带通配符的字符串匹配思路分析T4. 删除数字思路分析T1. 开餐馆 北大信息学院的同学小明毕业之后打算创业开餐馆。现在共有 n n n 个地点可供选择。小明打算从中选择合适的位置开设一些餐馆。这 n n n 个地点排列在同一条直线…...

高级java每日一道面试题-2024年12月03日-JVM篇-什么是Stop The World? 什么是OopMap? 什么是安全点?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是Stop The World? 什么是OopMap? 什么是安全点? 我回答: 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;Stop The World、OopMap 和 安全点 是与垃圾回收&#xff08;GC&#xff09;和性能优化密切相关的概念。理…...

探索 Apache Commons Collections 4:Java 集合框架的强大扩展

在 Java 开发中&#xff0c;集合框架是处理数据的核心工具。然而&#xff0c;标准 Java 集合框架虽然功能强大&#xff0c;但在某些场景下仍显得不够灵活。Apache Commons Collections 4&#xff08;以下简称 commons-collections4&#xff09;作为一个强大的工具库&#xff0c…...

NIO(New IO)和BIO(Blocking IO)的区别

Java中的NIO&#xff08;New IO&#xff09;和BIO&#xff08;Blocking IO&#xff09;的区别及NIO的核心组件 Java中的NIO&#xff08;New IO&#xff09;和BIO&#xff08;Blocking IO&#xff09;是两种不同的网络通信模型&#xff0c;各自具有独特的特性和适用场景。下面将…...

【串口助手开发】visual studio 使用C#开发串口助手,生成在其他电脑上可执行文件,可运行的程序

1、改成Release&#xff0c;生成解决方案 串口助手调试成功后&#xff0c;将Debug改为Release&#xff0c;点击生成解决方案 2、运行exe文件 生成解决方案后&#xff0c;在bin文件夹下&#xff0c; Release文件夹下&#xff0c;生成相关文件 复制一整个Release文件夹&#xf…...

Linux 编译 convert_geotiff 时遇到的几个问题

步骤1&#xff1a;安装libgeotiff-dev 在ubuntu上&#xff0c;安装命令为&#xff1a; sudo apt-get install libgeotiff-dev在macos上&#xff0c;安装命令为&#xff1a; brew install libgeotiff在Linux上安装命令为&#xff1a; sudo yum install libgeotiff-devel注意…...

执行存储过程报:This function has none of DETERMINISTIC, NO SQL ???

执行存储过程时报如下错你该怎么整&#xff1f; [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)来…...

JAVA |日常开发中Servlet详解

JAVA &#xff5c;日常开发中Servlet详解 前言一、Servlet 概述1.1 定义1.2 历史背景 二、Servlet 的生命周期2.1 加载和实例化2.2 初始化&#xff08;init 方法&#xff09;2.3 服务&#xff08;service 方法&#xff09;2.4 销毁&#xff08;destroy 方法&#xff09; 三、Se…...

Spring Cloud Alibaba 之 “Sentinel”

从网上下载好sentinel-dashboard-1.6.3.jar&#xff0c;然后执行 java -jar sentinel-dashboard-1.6.3.jar,执行成功之后在浏览器输入localhost:8080&#xff0c;Sentinel的登录名和密码都是sentinel,登陆成功之后看到只有一个首页。 接下来开始整合Spring Cloud Alibaba Sen…...

UE4外挂实现分析-PC端-附源码

UE4外挂实现分析-PC端 游戏分析 分析工具&#xff1a; Cheat Engine 7.5 x64dbg IDA Pro 参考文章&#xff1a; UE4逆向笔记之GWORLD GName GameInstance - 小透明‘s Blog 【项目源码下载】https://download.csdn.net/download/Runnymmede/90079718 本次分析的游戏使用UE4.2…...

力扣88题:合并两个有序数组

力扣88题&#xff1a;合并两个有序数组 题目描述 给定两个按非递减顺序排列的整数数组 nums1 和 nums2&#xff0c;以及它们的长度 m 和 n&#xff0c;要求将 nums2 合并到 nums1&#xff0c;使得合并后的数组仍按非递减顺序排列。 输入与输出 示例 1&#xff1a; 输入&am…...

Lua面向对象实现

Lua中的面向对象是通过表&#xff08;table&#xff09;来模拟类实现的&#xff0c;通过setmetatable(table,metatable)方法&#xff0c;将一个表设置为当前表的元表&#xff0c;之后在调用当前表没有的方法或者键时&#xff0c;会再查询元表中的方法和键&#xff0c;以此来实现…...

小程序 模版与配置

WXML模版语法 一、数据绑定 1、数据绑定的基本原则 &#xff08;1&#xff09;在data中定义数据 &#xff08;2&#xff09;在WXML中使用数据 2、在data中定义页面的数据 3、Mustache语法的格式&#xff08;双大括号&#xff09; 4、Mustache语法的应用场景 &#xff08;…...

【Elasticsearch】实现分布式系统日志高效追踪

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

探索Go语言中的循环单链表

简介 循环单链表是一种特殊的链表数据结构&#xff0c;它的最后一个节点指向链表的头节点&#xff0c;形成一个闭环。今天我们将探讨如何在Go语言中实现和操作这种数据结构。 为什么选择循环单链表&#xff1f; 连续访问&#xff1a;在循环单链表中&#xff0c;可以无限循环…...

[go-redis]客户端的创建与配置说明

创建redis client 使用go-redis库进行创建redis客户端比较简单&#xff0c;只需要调用redis.NewClient接口创建一个客户端 redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379",Password: "",DB: 0, })NewClient接口只接收一个参数red…...

Windows 和 Linux 系统命令行操作详解:从文件管理到进程监控

1.切换盘符与目录操作 在命令行中&#xff0c;切换盘符和目录是最常见的操作。尽管 DOS 和 Linux 在这些操作上有所不同&#xff0c;但它们都能实现相似的功能。 (1)切换盘符 ①DOS命令&#xff1a;在 DOS 中&#xff0c;切换盘符非常简单&#xff0c;使用 盘符名:&#xff…...

SpringBoot中@Import和@ImportResource和@PropertySource

1. Import Import注解是引入java类&#xff1a; 导入Configuration注解的配置类&#xff08;4.2版本之前只可以导入配置类&#xff0c;4.2版本之后也可以导入普通类&#xff09;导入ImportSelector的实现类导入ImportBeanDefinitionRegistrar的实现类 SpringBootApplication…...

etcd-v3.5release-(3)-readIndexRead

笔记1&#xff1a;读操作包括两种&#xff0c;readIndex和serilizable&#xff0c;readIndex指一致性读&#xff0c;一旦a读到了数据x&#xff0c;那么a及a以后的数据都能读到x&#xff0c;readIndex读会先确认本leader是不是有效地leader&#xff0c;如果有效则记录此刻的comm…...

Chrome 中小于 12px 文字的实现方式与应用场景详解

让 Chrome 支持小于 12px 的文字 在 Web 开发中,有时需要将文字显示为小于 12px 的尺寸,尤其是在设计精细的 UI 元素时。虽然大多数浏览器支持小于 12px 的字体大小,但 Chrome 默认情况下会通过调整文本渲染来确保文字可读性,尤其在非常小的文字尺寸下,可能会进行抗锯齿处…...

数据挖掘之数据预处理

​​​​​​​ 引言 数据挖掘是从大量数据中提取有用信息和知识的过程。在这个过程中&#xff0c;数据预处理是不可或缺的关键步骤。数据预处理旨在清理和转换数据&#xff0c;以提高数据质量&#xff0c;从而为后续的数据挖掘任务奠定坚实的基础。由于现实世界中的数据通常…...

slam学习笔记6---样例展示雅可比手推过程

背景&#xff1a;一直在使用模板、自动化求导&#xff0c;对于背后雅可比推导只剩一个基本概念&#xff0c;有必要好好梳理巩固一下。本人水平有限&#xff0c;若推导过程有误&#xff0c;欢迎评论区提出。 假设一个二维slam问题&#xff0c;使用欧式距离观测模型&#xff0c;…...

ThreadLocal 详解

ThreadLocal 详解 ThreadLocal 是 Java 提供的一种线程本地存储机制&#xff0c;用于为每个线程提供独立的变量副本&#xff0c;变量的值仅在线程内可见&#xff0c;从而实现线程隔离。这种特性在需要为每个线程维护独立状态的场景中非常有用&#xff0c;例如用户上下文、事务…...

SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测

之前和很多群友聊天发现对2016的无域和负载均衡满心期待&#xff0c;毕竟可以简单搭建而且可以不适用第三方负载均衡器&#xff0c;SQL自己可以负载了。windows2016已经可以下载使用了&#xff0c;那么这回终于可以揭开令人憧憬向往的AlwaysOn2016 负载均衡集群的神秘面纱了。 …...

Unity 基于Collider 组件在3D 物体表面放置3D 物体

实现 从鼠标点击的屏幕位置发送射线&#xff0c;以射线监测点击到的物体&#xff0c;根据点击物体的法线向量调整放置物体的位置及朝向。 Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, 100)) {obj.transform.…...

项目搭建:springboot,mybatis, maven

创建一个基于Spring Boot、MyBatis和Maven的项目可以简化很多配置&#xff0c;因为Spring Boot自带了很多自动配置的功能。下面我将给出一个简单的示例来展示如何搭建这样一个项目。 ### 1. 创建一个新的Spring Boot项目 你可以通过Spring Initializr&#xff08;https://sta…...

网页端五子棋对战(四)---玩家匹配实现上线下线处理

文章目录 1.游戏大厅用户匹配1.1请求和响应1.2设计匹配页面1.3获取玩家信息1.4玩家信息的样式设置1.5初始化我们的websocket1.6点击按钮和客户端交互1.7点击按钮和服务器端交互 2.服务器端实现匹配功能框架2.1方法重写2.2借用session 3.处理上线下线3.1什么是上线下线3.2实现用…...

Linux笔记---进程:进程替换

1. 进程替换的概念 进程替换是指在一个正在运行的进程中&#xff0c;用一个新的程序替换当前进程的代码和数据&#xff0c;使得进程开始执行新的程序&#xff0c;而不是原来的程序。 这种技术通常用于在不创建新进程的情况下&#xff0c;改变进程的行为。 我们之前谈到过for…...

【AI日记】24.12.04 kaggle 比赛 Titanic-7

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容&#xff1a; 学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster学习机器学习基础&#xff08;pandas&#xff0c;numpy&#xff0c;sklearn&#xff0c;seaborn&#xff0c;matplotl…...

使用 Flutter 进行移动应用开发:深入探索

文章目录 前言一、介绍二、安装 Flutter 环境三、Flutter 应用结构与基础组件四、状态管理策略五、高级主题结语 前言 随着移动技术的迅猛发展&#xff0c;跨平台开发的需求日益增长。开发者们一直在寻找一种既能保证应用性能又能减少开发成本和时间的技术方案。Flutter 应运而…...

SQLServer 服务器只接受 TLS1.0,但是客户端给的是 TLS1.2

Caused by: javax.net.ssl.SSLHandshakeException: the server selected protocol version TLS10 is not accepted by client preferences [TLS12] 原因描述&#xff1a;SQLServer 服务器只接受 TLS1.0&#xff0c;但是客户端给的是 TLS1.2 解决方法如下&#xff1a; 打开文件…...

Linux命令行解释器的模拟实现

欢迎拜访&#xff1a;羑悻的小杀马特.-CSDN博客 本篇主题&#xff1a;Linux命令行解释器 制作日期&#xff1a;2024.12.04 隶属专栏&#xff1a;linux之旅 本篇简介&#xff1a; 主线带你用ubuntu版系统步步分析实现基础版本的shell&#xff1b;比如支持重定向操作&#xff0…...

模块化设计割草机器人系统研究与实现(系统架构师论文)

摘要&#xff1a; 割草机器人项目旨在实现自主草坪修剪&#xff0c;以提高园艺工作的效率。本文以具体项目为背景&#xff0c;介绍系统架构师在项目开发过程中的架构设计策略、关键技术应用、问题解决方案和优化措施。首先&#xff0c;本文分析割草机器人项目的总体架构需求&a…...