MySQL性能压测工具SysBench详解(非常详细)

news/2024/4/27 8:51:35/文章来源:https://blog.csdn.net/oschina_41731918/article/details/128000593

概述

背景

最近需要给不同的客户部署数据库,各自的预算不一样,购买的服务器配置也不一样。那么我们就需要对其数据库的支撑能力进行一定测试,以保证满足业务真是的需要

数据库性能指标

指标英文含义说明
QPSQuery Per Second数据库每秒执行的SQL数,包含insert、select、update、delete等。
TPSTransaction Per Second数据库每秒执行的事务数,每个事务中包含18条SQL语句。

sysbench简介

sysbench 支持以下几种测试模式:
1、CPU 运算性能
2、磁盘 IO 性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX 线程性能–互斥基准测试
6、数据库性能(OLTP 基准测试)

安装

二进制方式

RHEL/CentOS:


curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench

Debian/Ubuntu


curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench

优化内核,提升SysBench Client

执行如下命令配置SysBench Client,使内核可以使用所有的CPU处理数据包(默认设置为使用2个CPU),同时减少CPU之间的上下文切换。


sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff>$x/rps_cpus; done'
sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries"
sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"
sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"

其中:ffffffff表示使用32个CPU(1个f表示4个CPU)。请根据实际配置修改,例如ECS为8核CPU,则输入ff。

快速体验

以下命令可以输出各个检测项的帮助文档


# IO
sysbench  --test=fileio help# CPU
sysbench  --test=cpu help# 内存
sysbench  --test=memory help# 线程
sysbench  --test=threads help# 互斥性能
sysbench  --test=mutex help# 事务处理
sysbench --test=oltp help

格式

通用格式:
sysbench [options]... [testname] [command]

参数说明可选值
testname测试项可以是 fileio, memory, cpu, threads, mutex 等测试项,也可以是工具或者自定义的lua脚本。PS:没有这一项,直接执行sysbench,cli会等待输入。
command命令prepare:执行测试之前的预备操作,如 创建文件,填充数据等;run:运行测试;cleanup:测试结束后清空数据;
help帮助展示测试的使用方式信息

也可以使用sysbench --help 展示所有使用手册。

内置lua脚本

/usr/share/sysbench目录下有常用操作的lua脚本,要自定义脚本实现特定功能时,可参考这些脚本。


bulk_insert.lua
oltp_common.lua
oltp_delete.lua
oltp_insert.lua
oltp_point_select.lua
oltp_read_only.lua
oltp_read_write.lua
oltp_update_index.lua
oltp_update_non_index.lua
oltp_write_only.lua
select_random_points.lua
select_random_ranges.lua

使用

文件IO

磁盘IO性能测试,主要查看请求数(request)和总体的吞吐量(total)。

参数说明默认
–file-num=N创建文件的数量默认值:128。
–file-block-size=N每次IO操作的block大小默认值:16K。
–file-total-size=SIZE所有文件大小总和2G
–file-test-mode=STRING测试模式:
seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)。
–file-io-mode=STRING文件操作模式:sync(同步),async(异步),mmap(快速map映射)sync
–file-async-backlog=N每个线程排队的异步操作数128
–file-extra-flags=[LIST,…]使用额外的标志符来打开文件{sync,dsync,direct}默认值空
–file-fsync-freq=N在完成N次请求之后,执行fsync(),0表示不使用fsync。
fsync主要是同步磁盘文件,因为可能有系统和磁盘缓冲的关系100
–file-fsync-all[=on、off]每次写操作后执行fsync()
每次执行写操作后就执行一次fsyncoff
–file-fsync-end[=on、off]测试结束后执行fsync()on
–file-fsync-mode=STRING使用fsync或fdatasync方法进行同步
文件同步函数的选择,同样是和API相关的参数,由于多个操作系统对于fdatasync支持不同,因此不建议使用fdatasync。fsync
–file-merged-requests=N尽可能的合并N个IO请求数,0表示不合并0
–file-rw-ratio=N测试时候的读写比例1.5(即3:2)

预备测试


sysbench --test=fileio --file-num=2 --file-block-size=1024 --file-total-size=1G prepare

执行测试

1、测试顺序读写,请求10000次,如果不能在30秒内完成,测试结束


sysbench fileio \
--file-num=2 \
--file-block-size=1024 \
--file-total-size=1G \
--file-test-mode=seqrewr \
--time=30 \
--events=10000 \
--threads=4 \
--file-fsync-freq=200 \
--file-extra-flags=direct run

2、测试随机读写,请求10000次,如果不能在30秒内完成,测试结束


sysbench --test=fileio \
--file-num=2 \
--file-block-size=1024 \
--file-total-size=1G \
--file-test-mode=rndrw \
--time=30 \
--events=10000 \
--threads=4 \
--file-fsync-freq=200 \
--file-extra-flags=direct run

3、测试随机读,请求10000次,如果不能在30秒内完成,测试结束


sysbench --test=fileio \
--file-num=2 \
--file-block-size=1024 \
--file-total-size=1G \
--file-test-mode=rndrd \
--time=30 \
--events=10000 \
--threads=4 \
--file-fsync-freq=200 \
--file-extra-flags=direct run

清理文件


sysbench --test=fileio --num-threads=4  --file-total-size=1G --file-test-mode=rndrw cleanup

结果说明


### 版本说明
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)Running the test with following options:
### 线程数
Number of threads: 4
Initializing random number generator from current timeExtra file open flags: directio
### 文件数、单个文件大小
2 files, 5GiB each
### 文件总大小
10GiB total file size
### 单次最大I/O操作block 10k
Block size 10KiB
### I/O读取请求次数
Number of IO requests: 10000
### 读写测试比例 3/2:1.5
Read/Write ratio for combined random IO test: 1.50
### 200次请求会执行记录数据
Periodic FSYNC enabled, calling fsync() each 200 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Initializing worker threads...Threads started!### 文件操作
File operations:reads/s:                      1411.72writes/s:                     941.22fsyncs/s:                     25.19
### 吞吐量
Throughput:read, MiB/s:                  13.79written, MiB/s:               9.19
### 总统计
General statistics:total time:                          4.2069stotal number of events:              10000  
### fileio 磁盘测试,在4秒范围内进行随机读写这个行为一共进行了10000次,实际执行时间为4.2069秒### 潜在数据
Latency (ms):min:                                    0.04avg:                                    1.68max:                                   45.7695th percentile:                        3.96sum:                                16810.76
### 这部分数据应该统计的是线程真正执行的时间,总共16810.76ms, 单次执行最少时间为0.04ms,
### 最多时间为45.76ms, 平均时间为1.68ms, 95%次的执行时间在3.96ms左右;Threads fairness:events (avg/stddev):           2500.0000/26.24execution time (avg/stddev):   4.2027/0.00
### 归纳总结,线程执行时间为4.2027s, 执行平均次数为2500次,上下差为:26.24

CPU测试

选项

sysbench的cpu测试是在指定时间内,循环进行素数计算。

素数(也叫质数)就是从1开始的自然数中,无法被整除的数,比如2、3、5、7、11、13、17等。编程公式:对正整数n,如果用2到根号n之间的所有整数去除,均无法整除,则n为素数。

选项说明默认值
–cpu-max-prime素数生成数量的上限默认值为 10000
–threads线程数默认值为 1
–time运行时长,单位秒默认值为10 ,如果时间还有剩就再进行一轮素数计算,直到时间耗尽。每完成一轮就叫一个 event 。相同时间,比较的是谁完成的event多
–eventsevent上限次数默认值为0,则表示不限event次数。相同event次数,比较的是谁用时更少

测试


sysbench cpu --cpu-max-prime=20000 --threads=2 run

结果


[root@Reseach sysbench-test]# sysbench cpu --cpu-max-prime=20000 --threads=2 run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)Running the test with following options:
Number of threads: 2 // 指定线程数为2
Initializing random number generator from current timePrime numbers limit: 20000 // 每个线程产生的素数上限均为2万个Initializing worker threads...Threads started!CPU speed:events per second:  1955.47 // 所有线程每秒完成了650.74次eventGeneral statistics:total time:                          10.0006s  // 共耗时10秒total number of events:              19559 // 10秒内所有线程一共完成了6510次eventLatency (ms):min:                                    0.87 // 完成1次event的最少耗时3.03秒avg:                                    1.02 // 所有event的平均耗时3.07毫秒max:                                    1.71 // 完成1次event的最多耗时3.27毫秒95th percentile:                        1.67 // 95%次event在3.13秒毫秒内完成sum:                                19995.36 // 每个线程耗时10秒,2个线程叠加耗时就是20秒Threads fairness:events (avg/stddev):           9779.5000/6.50 // 平均每个线程完成3255次event,标准差为44execution time (avg/stddev):   9.9977/0.00 // 每个线程平均耗时10秒,标准差为0

如果有2台服务器进行CPU性能对比,当素数上限和线程数一致时:

  • 相同时间,比较event
  • 相同event,比较时间
  • 时间和event都相同,比较stddev(标准差)

线程性能测试

选项

选项说明默认值
–thread-yields=N每个请求产生多少个线程1000
–thread-locks=N每个线程的锁的数量8

测试

sysbench --test=threads --num-threads=4 --thread-yields=12 --thread-locks=2 run

结果


General statistics:total time:                          10.0001stotal number of events:              2357161Latency (ms):min:                                    0.00avg:                                    0.02max:                                   18.4495th percentile:                        0.05sum:                                39356.63Threads fairness:events (avg/stddev):           589290.2500/577.33execution time (avg/stddev):   9.8392/0.00

互斥性能测试

Mutex请求的性能与CPU主频及物理CPU个数有关

选项

选项说明默认值
–mutex-num=N互斥数组的总大小4096
–mutex-locks=N每个线程要执行的互斥锁数50000
–mutex-loops=N在互斥锁之外执行的空循环数10000

测试


sysbench mutex --mutex-num=2048  --mutex-locks=5000 --mutex-loops=5000 run

结果


General statistics:total time:                          0.0075stotal number of events:              1Latency (ms):min:                                    7.48avg:                                    7.48max:                                    7.4895th percentile:                        7.43sum:                                    7.48Threads fairness:events (avg/stddev):           1.0000/0.00execution time (avg/stddev):   0.0075/0.00

内存性能测试

选项

选项说明默认值
–memory-block-size=SIZE测试时内存块大小。1K
–memory-total-size=SIZE传输数据的总大小。100G
–memory-scope=STRING内存访问范围{global,local}global
–memory-hugetlb=[on、off]从HugeTLB池内存分配off
–memory-oper=STRING内存操作类型。{read, write, none}write
–memory-access-mode=STRING存储器存取方式{seq,rnd}seq

测试


sysbench --test=memory \
--threads=2 \
--events=10000 \
--memory-total-size=1G \
--memory-block-size=8K \
--memory-oper=read run

sysbench --test=memory \
--threads=2 \
--events=100000 \
--memory-total-size=50G \
--memory-block-size=8K \
--memory-oper=write run

数据库OLTP

选项说明

选项描述默认值
–threads工作线程数1
–events总的请求数,默认为0 表示无限制0
–time执行时间(秒),0表示无限制0
–warmup-time预热时间,可以实现在 CPU/database/page/caches 预热之后再进行统计,这样得到的数据指标更准确0
–rateTPS,事务数。0表示无限制0
–thread-init-timeout工作线程初始化的等待时间(秒)30
–thread-stack-size每一线程栈大小32k
–report-interval多少秒输出一次报告,0表示禁止立即报告0
–debug调试模式off
–validate在可能的情况下对测试结果进行验证off
–help打印有关常规语法或指定测试的帮助,然后退出off
–verbosity日志级别,0-致命错误,5-调试信息4
–percentilesysbench衡量所有已处理请求的执行时间,以显示统计信息,如最小、平均和最大执行时间。95
–luajit-cmd执行LuaJIT控制命令

随机数生成算法

选项描述默认值
–rand-type默认情况下使用随机数分布{uniform,gaussian,special,pareto,zipfian}。基准脚本可以选择使用默认分布,也可以明确指定,即覆盖默认分布。special
–rand-seed随机数生成器的种子。当为0时,当前时间用作RNG种子。0
–rand-spec-iter特殊分布的迭代次数12
–rand-spec-pct“特殊”值将属于特殊分布的整个范围的百分比1
–rand-spec-res用于特殊分布的“特殊”值百分比75
–rand-pareto-h帕累托分布的形状参数0.2
–rand-zipfian-expzipfian分布的形状参数0.8

支持的lua脚本

选项说明
oltp_read_only只读测试
oltp_read_write读写测试
oltp_insert简单插入测试
bulk_insert批量插入测试
oltp_deletedelete删除测试
oltp_update_index带索引的更新测试
oltp_update_non_index不带索引的更新测试
oltp_point_select等值查询测试
select_random_points随机等值查询测试
select_random_ranges随机范围查询测试

脚本参数

选项说明默认值
–auto_inc[=on/off]使用 AUTO_INCREMENT 列作为主键(对于 MySQL),或者它在其他 DBMS 中的替代项。禁用时,使用客户端生成的 ID[on]
–create_secondary[=on/off]除了 PRIMARY KEY 创建二级索引[on]
–delete_inserts=N每个事务的 DELETE/INSERT 组合数[1]
–distinct_ranges=N每个事务的 SELECT DISTINCT 查询数[1]
–index_updates=N每个事务的 UPDATE 索引查询数[1]
–mysql_storage_engine=STRING存储引擎,如果使用 MySQL[innodb]
–non_index_updates=N每个事务的 UPDATE 非索引查询数[1]
–order_ranges=N每个事务的 SELECT ORDER BY 查询数[1]
–pgsql_variant=STRING使用 PostgreSQL 驱动程序运行时使用此 PostgreSQL 变体。当前唯一支持的变体是“redshift”。启用后,create_secondary 自动禁用,delete_inserts 设置为 0
–point_selects=N每个事务的点 SELECT 查询数[10]
–range_selects[=on/off]启用/禁用所有范围 SELECT 查询[on]
–range_size=N范围 SELECT 查询的范围大小[100]
–secondary[=on/off]使用二级索引代替 PRIMARY KEY[off]
–simple_ranges=N每个事务的简单范围 SELECT 查询数[1]
–skip_trx[=on/off]不要启动显式事务并在 AUTOCOMMIT 模式下执行所有查询[off]
–sum_ranges=N每个事务的 SELECT SUM() 查询数[1]
–table_size=N每个表的行数[10000]
–tables=N表的个数[1]

测试

OLTP读写混合场景

SQL类型比例SQL语句
point_selects10SELECT c FROM sbtest100 WHERE id=?
simple_ranges1SELECT c FROM sbtest100 WHERE id BETWEEN ? AND ?
sum_ranges1SELECT SUM(k) FROM sbtest100 WHERE id BETWEEN ? AND ?
order_ranges1SELECT c FROM sbtest100 WHERE id BETWEEN ? AND ? ORDER BY c
distinct_ranges1SELECT DISTINCT c FROM sbtest100 WHERE id BETWEEN ? AND ? ORDER BY c
index_updates1UPDATE sbtest100 SET k=k+1 WHERE id=?
non_index_updates1UPDATE sbtest100 SET c=? WHERE id=?
deletesDELETE FROM sbtest100 WHERE id=?
inserts_ignore1INSERT IGNORE INTO sbtest100 (id, k, c, pad) VALUES (?, ?, ?, ?)

表结构

执行以下sysbench命令可以创建,sysbench的内置表。


sysbench --db-driver=mysql \
--mysql-host=127.0.0.1 \
--mysql-port=33106 \
--mysql-user=root \
--mysql-password=Abc123456 \
--mysql-db=test_db \
--table_size=25000 \
--tables=250 \
--events=0 \
--time=600 \
oltp_read_write prepare

可以生成如下表结构


mysql> show create table sbtest168;
+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                                                                                                                                                                                                      |
+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sbtest168 | CREATE TABLE `sbtest168` (`id` int NOT NULL AUTO_INCREMENT,`k` int NOT NULL DEFAULT '0',`c` char(120) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',`pad` char(60) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',PRIMARY KEY (`id`),KEY `k_168` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=25001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci |

只写

##准备数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
oltp_write_only run##运行 workload
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
--events=0 \
--time=600 \
--threads=192 \
--percentile=95 \
--report-interval=1 \
oltp_write_only run##清理数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \ 
oltp_write_only cleanup

只读(point select)

##准备数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
oltp_read_only prepare##运行 workload
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
--events=0 \
--time=600 \
--threads=512 \
--percentile=95 \
--range_selects=0 \
--skip-trx=1 \
--report-interval=1 \
oltp_read_only run##清理数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
oltp_read_only cleanup

只读(range select)

##准备数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
oltp_read_only prepare##运行 workload
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
--events=0 \
--time=600 \
--threads=512 \
--percentile=95 \
--skip-trx=1 \
--report-interval=1 \
oltp_read_only run##清理数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
oltp_read_only cleanup

混合读写(point select)


##准备数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
oltp_read_write run##运行 workload
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
--events=0 \
--time=600 \
--range_selects=0 \
--threads=XXX \
--percentile=95 \
--report-interval=1 \
oltp_read_write run##清理数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
oltp_read_write cleanup

混合读写(range select)


##准备数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
oltp_read_write run##运行 workload
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
--events=0 \
--time=600 \
--threads=XXX \
--percentile=95 \
--report-interval=1 \
oltp_read_write run##清理数据
sysbench --db-driver=mysql \
--mysql-host=XXX \
--mysql-port=XXX \
--mysql-user=XXX \
--mysql-password=XXX \
--mysql-db=XXX \
--table_size=XXX \
--tables=XXX \
oltp_read_write cleanup

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位指出。保持热爱,奔赴下一场山海。🏃🏃🏃

参考文档:

Github文档

sysbench 使用详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72671.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树、二叉搜索树、二叉树的最近祖先、二叉树的层序遍历【零神基础精讲】

来源0x3f:https://space.bilibili.com/206214 文章目录二叉树[104. 二叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-binary-tree/)[111. 二叉树的最小深度](https://leetcode.cn/problems/minimum-depth-of-binary-tree/)[129. 求根节点到叶节点…

黑马 Vue 快速入门 笔记

黑马 Vue 快速入门 笔记0 VUE相关了解0.1 概述0.2 MVVM0.3 JavaScript框架0.4 七大属性0.5 el:挂载点1 VUE基础1.0 第一个vue代码:Hello,vue1.1 v-bind 设置元素的属性 简写 :1.2 v-if , v-else , v-else-ifv-if , v-e…

XC7K70T-1FBG676C应用XC7K70T-L2FBG484E Kintex-7, FPGA 规格参数

概述Kintex-7 FPGA为快速增长应用和无线通信提供最优性价比和低功耗。Kintex-7 FPGA允许设计人员构建卓越带宽和12位数字可编程模拟,同时满足成本和功耗要求。144GMACS数字信号处理器 (DSP) 的独特功耗使得多功能Kintex-7器件成为便携式超声波设备和下一代通信等应用…

文案女王彭芳如何转变为“百万发售系统”创始人?我们来探个究竟!

智多星老师 她的输出跟智多星老师几乎毫无二致,是抄袭还是纯属巧合呢? 你们问的这个问题我也想知道,为了了解真相,我让我的一个学生把那个叫“彭芳老师”的视频给我看,当看到她的简介时,我非常震惊&#…

Elasticsearch在Linux中的单节点部署和集群部署

目录一、Elasticsearch简介二、Linux单节点部署1、软件下载解压2、创建用户3、修改配置文件4、切换到刚刚创建的用户启动软件5、测试三、Linux集群配置1、拷贝文件2、修改配置文件3、分别修改文件所有者4、启动三个软件5、测试四、问题总结1、在elasticsearch启动时如果报错内存…

numpy的常见数据类型

常见数据类型介绍Python 原生的数据类型相对较少, bool、int、float、str等。这在不需要关心数据在计算机中表示的所有方式的应用中是方便的。然而,对于科学计算,通常需要更多的控制。为了加以区分 numpy 在这些类型名称末尾都加了“_”。类型…

ES mapping 详解

nested 类型??? _all _routing; ES-mapping Elasticsearch根据业务创建映射mapping结构分析:keyword和text(一)_elasticsearch keyword mapping_周全全的博客-CSDN博客 0.Mapping样例 {"mapping…

【MySQL进阶】 锁

😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享Java相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…

[手把手教你]实现简单的登录跳转以及tab栏的动态渲染

需求:实现login登录页输入用户名和密码, 匹配失败显示提示信息, 成功则跳转到index主页index页面中各组件通过嵌套路由实现,点击一级菜单可以动态显示二级菜单1.使用vite搭建项目安装初始化npm init vuelatest选择配置进入项目目录,安装模块npm i, 启动项目npm run dev2.项目目…

S5P6818_系统篇(2)源码编译及烧录

源码获取 源码获取和操作流程 1.下载liunux下的系统制作脚本,可以烧录系统和构建镜像 git clone https://github.com/friendlyarm/sd-fuse_s5p6818.git 如果出现git错误可使用如下方法: git config --global http.sslverify false 2.阅读该工具rea…

软件测试5年,一路走来的艰辛路程

前言 不论你是什么时候开始接触测试这个行业的,你首先听说的应该是功能测试。通过一些测试手段来验证开发做出的代码是否符合产品的需求?当然你也有自己对功能测试的理解,但是最近两年感觉功能测试好像不太受欢迎,同时不少同学真的…

Linux 基础知识之文件系统

目录一、文件系统1.文件种类2.Linux和Windows文件后缀的不同3.查看文件类型3.绝对路径与相对路径二、系统分区三、目录结构一、文件系统 1.文件种类 Linux中一切皆文件。目光所及,皆是文件。文件的种类共有七种,每种文件都有自己的独特标识:…

SCADA-1-组态前期需求调研篇

近期有朋友找到我,说scada组态系统开源的很少,不少开发者借此售卖这种软件,我回了句:这有什么难的,不就是拖拖拽拽,再绑定上数据源,实现动态效果嘛。。。(先装了个X)一、…

【C++】类和对象入门必知

面向过程和面向对象的初步认识类的引入类的定义类的访问限定符封装类的作用域类的实例化类对象模型this指针C语言和C实现Stack的对比面向过程和面向对象的初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解…

3717: yuyu学数数

描述yuyu开始学数数了,她要爸爸给他一些火柴棍,她要拼出很多数来。yuyu每次说要拼什么数字,爸爸就得想想要给她几根,好累啊,于是就只好写程序了。输入输入数据有多组,每组占一行,每行一个非负整…

版本控制软件SVN

SVN学习 1 版本控制软件定义及用途 版本控制软件是为适应软件配置管理的需要,控制软件的修改,减少混乱,提高软件生产效率,其是软件质量保证的重要环节软件配置管理是对软件修改进行标识、组织和控制的技术,用来协调和…

数据结构:循环队列的实现(leetcode622.设计循环队列)

目录 一.循环队列简单介绍 二.用静态数组实现循环队列 1.数组循环队列结构设计 2.数组循环队列的堆区内存申请接口 3.数据出队和入队的接口实现 4.其他操作接口 5.数组循环队列的实现代码总览 三.静态单向循环链表实现循环队列 1.链表循环队列的结构设计 2.创建静…

Linux服务:Nginx服务配置及相关模块

目录 一、Nginx配置文件 1、主配置文件解析 2、子配置文件启用 二、子配置文件使用 1、创建虚拟主机实验 2、基于端口虚拟主机实验 三、Nginx模块 1、access模块 2、自定义错误页面 3、状态页开启 一、Nginx配置文件 1、主配置文件解析 ①yum安装主配置文件位置&…

攻击者失手,自己杀死了僵尸网络 KmsdBot

此前,Akamai 的安全研究员披露了 KmsdBot 僵尸网络,该僵尸网络主要通过 SSH 爆破与弱口令进行传播。在对该僵尸网络的持续跟踪中,研究人员发现了一些有趣的事情。 C&C 控制 对恶意活动来说,最致命的就是夺取对 C&C 服务…

Anaconda环境配置

1.进入清华大学镜像网站Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror,下载稳定版Anaconda3-5.2.0,如下图。2.放到整理好的文件夹中,双击安装包进行安装。3.安装过程中需要改变的默认值如下&#xff…