bench.sh:一行命令测试Linux服务器基准测试
简介
bench.sh 是一个 Linux 系统性能基准测试工具。它的测试结果如下图:给出服务器的整体配置信息,IO 性能,网络性能。很多人使用它测试 vps 性能。
一键运行
服务器在国外可以使用以下命令运行测试
wget -qO- bench.sh | bash
复制脚本到本地运行
服务器在国内只能从 github 复制脚本到本地运行。脚本内容已经贴到下面:复制代码块,保存到 bench.sh 文件中,chmod +x 赋权, ./bench.sh 运行。
#!/usr/bin/env bash
#
# Description: A Bench Script by Teddysun
#
# Copyright (C) 2015 - 2023 Teddysun <i@teddysun.com>
# Thanks: LookBack <admin@dwhd.org>
# URL: https://teddysun.com/444.html
# https://github.com/teddysun/across/blob/master/bench.sh
#
trap _exit INT QUIT TERM_red() {printf '\033[0;31;31m%b\033[0m' "$1"
}_green() {printf '\033[0;31;32m%b\033[0m' "$1"
}_yellow() {printf '\033[0;31;33m%b\033[0m' "$1"
}_blue() {printf '\033[0;31;36m%b\033[0m' "$1"
}_exists() {local cmd="$1"if eval type type >/dev/null 2>&1; theneval type "$cmd" >/dev/null 2>&1elif command >/dev/null 2>&1; thencommand -v "$cmd" >/dev/null 2>&1elsewhich "$cmd" >/dev/null 2>&1filocal rt=$?return ${rt}
}_exit() {_red "\nThe script has been terminated. Cleaning up files...\n"# clean uprm -fr speedtest.tgz speedtest-cli benchtest_*exit 1
}get_opsy() {[ -f /etc/redhat-release ] && awk '{print $0}' /etc/redhat-release && return[ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return[ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return
}next() {printf "%-70s\n" "-" | sed 's/\s/-/g'
}speed_test() {local nodeName="$2"if [ -z "$1" ];then./speedtest-cli/speedtest --progress=no --accept-license --accept-gdpr >./speedtest-cli/speedtest.log 2>&1else./speedtest-cli/speedtest --progress=no --server-id="$1" --accept-license --accept-gdpr >./speedtest-cli/speedtest.log 2>&1fiif [ $? -eq 0 ]; thenlocal dl_speed up_speed latencydl_speed=$(awk '/Download/{print $3" "$4}' ./speedtest-cli/speedtest.log)up_speed=$(awk '/Upload/{print $3" "$4}' ./speedtest-cli/speedtest.log)latency=$(awk '/Latency/{print $3" "$4}' ./speedtest-cli/speedtest.log)if [[ -n "${dl_speed}" && -n "${up_speed}" && -n "${latency}" ]]; thenprintf "\033[0;33m%-18s\033[0;32m%-18s\033[0;31m%-20s\033[0;36m%-12s\033[0m\n" " ${nodeName}" "${up_speed}" "${dl_speed}" "${latency}"fifi
}speed() {speed_test '' 'Speedtest.net'speed_test '21541' 'Los Angeles, US'speed_test '43860' 'Dallas, US'speed_test '40879' 'Montreal, CA'speed_test '24215' 'Paris, FR'speed_test '28922' 'Amsterdam, NL'speed_test '24447' 'Shanghai, CN'speed_test '5530' 'Chongqing, CN'speed_test '60572' 'Guangzhou, CN'speed_test '32155' 'Hongkong, CN'speed_test '23647' 'Mumbai, IN'speed_test '13623' 'Singapore, SG'speed_test '21569' 'Tokyo, JP'
}io_test() {(LANG=C dd if=/dev/zero of=benchtest_$$ bs=512k count="$1" conv=fdatasync && rm -f benchtest_$$) 2>&1 | awk -F '[,,]' '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//'
}calc_size() {local raw=$1local total_size=0local num=1local unit="KB"if ! [[ ${raw} =~ ^[0-9]+$ ]]; thenecho ""returnfiif [ "${raw}" -ge 1073741824 ]; thennum=1073741824unit="TB"elif [ "${raw}" -ge 1048576 ]; thennum=1048576unit="GB"elif [ "${raw}" -ge 1024 ]; thennum=1024unit="MB"elif [ "${raw}" -eq 0 ]; thenecho "${total_size}"returnfitotal_size=$(awk 'BEGIN{printf "%.1f", '"$raw"' / '$num'}')echo "${total_size} ${unit}"
}# since calc_size converts kilobyte to MB, GB and TB
# to_kibyte converts zfs size from bytes to kilobyte
to_kibyte() {local raw=$1awk 'BEGIN{printf "%.0f", '"$raw"' / 1024}'
}calc_sum() {local arr=("$@")local ss=0for i in "${arr[@]}"; dos=$((s + i))doneecho ${s}
}check_virt() {_exists "dmesg" && virtualx="$(dmesg 2>/dev/null)"if _exists "dmidecode"; thensys_manu="$(dmidecode -s system-manufacturer 2>/dev/null)"sys_product="$(dmidecode -s system-product-name 2>/dev/null)"sys_ver="$(dmidecode -s system-version 2>/dev/null)"elsesys_manu=""sys_product=""sys_ver=""fiif grep -qa docker /proc/1/cgroup; thenvirt="Docker"elif grep -qa lxc /proc/1/cgroup; thenvirt="LXC"elif grep -qa container=lxc /proc/1/environ; thenvirt="LXC"elif [[ -f /proc/user_beancounters ]]; thenvirt="OpenVZ"elif [[ "${virtualx}" == *kvm-clock* ]]; thenvirt="KVM"elif [[ "${sys_product}" == *KVM* ]]; thenvirt="KVM"elif [[ "${sys_manu}" == *QEMU* ]]; thenvirt="KVM"elif [[ "${cname}" == *KVM* ]]; thenvirt="KVM"elif [[ "${cname}" == *QEMU* ]]; thenvirt="KVM"elif [[ "${virtualx}" == *"VMware Virtual Platform"* ]]; thenvirt="VMware"elif [[ "${sys_product}" == *"VMware Virtual Platform"* ]]; thenvirt="VMware"elif [[ "${virtualx}" == *"Parallels Software International"* ]]; thenvirt="Parallels"elif [[ "${virtualx}" == *VirtualBox* ]]; thenvirt="VirtualBox"elif [[ -e /proc/xen ]]; thenif grep -q "control_d" "/proc/xen/capabilities" 2>/dev/null; thenvirt="Xen-Dom0"elsevirt="Xen-DomU"fielif [ -f "/sys/hypervisor/type" ] && grep -q "xen" "/sys/hypervisor/type"; thenvirt="Xen"elif [[ "${sys_manu}" == *"Microsoft Corporation"* ]]; thenif [[ "${sys_product}" == *"Virtual Machine"* ]]; thenif [[ "${sys_ver}" == *"7.0"* || "${sys_ver}" == *"Hyper-V" ]]; thenvirt="Hyper-V"elsevirt="Microsoft Virtual Machine"fifielsevirt="Dedicated"fi
}ipv4_info() {local org city country regionorg="$(wget -q -T10 -O- ipinfo.io/org)"city="$(wget -q -T10 -O- ipinfo.io/city)"country="$(wget -q -T10 -O- ipinfo.io/country)"region="$(wget -q -T10 -O- ipinfo.io/region)"if [[ -n "${org}" ]]; thenecho " Organization : $(_blue "${org}")"fiif [[ -n "${city}" && -n "${country}" ]]; thenecho " Location : $(_blue "${city} / ${country}")"fiif [[ -n "${region}" ]]; thenecho " Region : $(_yellow "${region}")"fiif [[ -z "${org}" ]]; thenecho " Region : $(_red "No ISP detected")"fi
}install_speedtest() {if [ ! -e "./speedtest-cli/speedtest" ]; thensys_bit=""local sysarchsysarch="$(uname -m)"if [ "${sysarch}" = "unknown" ] || [ "${sysarch}" = "" ]; thensysarch="$(arch)"fiif [ "${sysarch}" = "x86_64" ]; thensys_bit="x86_64"fiif [ "${sysarch}" = "i386" ] || [ "${sysarch}" = "i686" ]; thensys_bit="i386"fiif [ "${sysarch}" = "armv8" ] || [ "${sysarch}" = "armv8l" ] || [ "${sysarch}" = "aarch64" ] || [ "${sysarch}" = "arm64" ]; thensys_bit="aarch64"fiif [ "${sysarch}" = "armv7" ] || [ "${sysarch}" = "armv7l" ]; thensys_bit="armhf"fiif [ "${sysarch}" = "armv6" ]; thensys_bit="armel"fi[ -z "${sys_bit}" ] && _red "Error: Unsupported system architecture (${sysarch}).\n" && exit 1url1="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-${sys_bit}.tgz"url2="https://dl.lamp.sh/files/ookla-speedtest-1.2.0-linux-${sys_bit}.tgz"if ! wget --no-check-certificate -q -T10 -O speedtest.tgz ${url1}; thenif ! wget --no-check-certificate -q -T10 -O speedtest.tgz ${url2}; then_red "Error: Failed to download speedtest-cli.\n" && exit 1fifimkdir -p speedtest-cli && tar zxf speedtest.tgz -C ./speedtest-cli && chmod +x ./speedtest-cli/speedtestrm -f speedtest.tgzfiprintf "%-18s%-18s%-20s%-12s\n" " Node Name" "Upload Speed" "Download Speed" "Latency"
}print_intro() {echo "-------------------- A Bench.sh Script By Teddysun -------------------"echo " Version : $(_green v2023-10-15)"echo " Usage : $(_red "wget -qO- bench.sh | bash")"
}# Get System information
get_system_info() {cname=$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')cores=$(awk -F: '/^processor/ {core++} END {print core}' /proc/cpuinfo)freq=$(awk -F'[ :]' '/cpu MHz/ {print $4;exit}' /proc/cpuinfo)ccache=$(awk -F: '/cache size/ {cache=$2} END {print cache}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')cpu_aes=$(grep -i 'aes' /proc/cpuinfo)cpu_virt=$(grep -Ei 'vmx|svm' /proc/cpuinfo)tram=$(LANG=Cfree | awk '/Mem/ {print $2}')tram=$(calc_size "$tram")uram=$(LANG=Cfree | awk '/Mem/ {print $3}')uram=$(calc_size "$uram")swap=$(LANG=Cfree | awk '/Swap/ {print $2}')swap=$(calc_size "$swap")uswap=$(LANG=Cfree | awk '/Swap/ {print $3}')uswap=$(calc_size "$uswap")up=$(awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60} {printf("%d days, %d hour %d min\n",a,b,c)}' /proc/uptime)if _exists "w"; thenload=$(LANG=Cw | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//')elif _exists "uptime"; thenload=$(LANG=Cuptime | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//')fiopsy=$(get_opsy)arch=$(uname -m)if _exists "getconf"; thenlbit=$(getconf LONG_BIT)elseecho "${arch}" | grep -q "64" && lbit="64" || lbit="32"fikern=$(uname -r)in_kernel_no_swap_total_size=$(LANG=Cdf -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs --total 2>/dev/null | grep total | awk '{ print $2 }')swap_total_size=$(free -k | grep Swap | awk '{print $2}')zfs_total_size=$(to_kibyte "$(calc_sum "$(zpool list -o size -Hp 2> /dev/null)")")disk_total_size=$(calc_size $((swap_total_size + in_kernel_no_swap_total_size + zfs_total_size)))in_kernel_no_swap_used_size=$(LANG=Cdf -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs --total 2>/dev/null | grep total | awk '{ print $3 }')swap_used_size=$(free -k | grep Swap | awk '{print $3}')zfs_used_size=$(to_kibyte "$(calc_sum "$(zpool list -o allocated -Hp 2> /dev/null)")")disk_used_size=$(calc_size $((swap_used_size + in_kernel_no_swap_used_size + zfs_used_size)))tcpctrl=$(sysctl net.ipv4.tcp_congestion_control | awk -F ' ' '{print $3}')
}
# Print System information
print_system_info() {if [ -n "$cname" ]; thenecho " CPU Model : $(_blue "$cname")"elseecho " CPU Model : $(_blue "CPU model not detected")"fiif [ -n "$freq" ]; thenecho " CPU Cores : $(_blue "$cores @ $freq MHz")"elseecho " CPU Cores : $(_blue "$cores")"fiif [ -n "$ccache" ]; thenecho " CPU Cache : $(_blue "$ccache")"fiif [ -n "$cpu_aes" ]; thenecho " AES-NI : $(_green "\xe2\x9c\x93 Enabled")"elseecho " AES-NI : $(_red "\xe2\x9c\x97 Disabled")"fiif [ -n "$cpu_virt" ]; thenecho " VM-x/AMD-V : $(_green "\xe2\x9c\x93 Enabled")"elseecho " VM-x/AMD-V : $(_red "\xe2\x9c\x97 Disabled")"fiecho " Total Disk : $(_yellow "$disk_total_size") $(_blue "($disk_used_size Used)")"echo " Total Mem : $(_yellow "$tram") $(_blue "($uram Used)")"if [ "$swap" != "0" ]; thenecho " Total Swap : $(_blue "$swap ($uswap Used)")"fiecho " System uptime : $(_blue "$up")"echo " Load average : $(_blue "$load")"echo " OS : $(_blue "$opsy")"echo " Arch : $(_blue "$arch ($lbit Bit)")"echo " Kernel : $(_blue "$kern")"echo " TCP CC : $(_yellow "$tcpctrl")"echo " Virtualization : $(_blue "$virt")"echo " IPv4/IPv6 : $online"
}print_io_test() {freespace=$(df -m . | awk 'NR==2 {print $4}')if [ -z "${freespace}" ]; thenfreespace=$(df -m . | awk 'NR==3 {print $3}')fiif [ "${freespace}" -gt 1024 ]; thenwritemb=2048io1=$(io_test ${writemb})echo " I/O Speed(1st run) : $(_yellow "$io1")"io2=$(io_test ${writemb})echo " I/O Speed(2nd run) : $(_yellow "$io2")"io3=$(io_test ${writemb})echo " I/O Speed(3rd run) : $(_yellow "$io3")"ioraw1=$(echo "$io1" | awk 'NR==1 {print $1}')[[ "$(echo "$io1" | awk 'NR==1 {print $2}')" == "GB/s" ]] && ioraw1=$(awk 'BEGIN{print '"$ioraw1"' * 1024}')ioraw2=$(echo "$io2" | awk 'NR==1 {print $1}')[[ "$(echo "$io2" | awk 'NR==1 {print $2}')" == "GB/s" ]] && ioraw2=$(awk 'BEGIN{print '"$ioraw2"' * 1024}')ioraw3=$(echo "$io3" | awk 'NR==1 {print $1}')[[ "$(echo "$io3" | awk 'NR==1 {print $2}')" == "GB/s" ]] && ioraw3=$(awk 'BEGIN{print '"$ioraw3"' * 1024}')ioall=$(awk 'BEGIN{print '"$ioraw1"' + '"$ioraw2"' + '"$ioraw3"'}')ioavg=$(awk 'BEGIN{printf "%.1f", '"$ioall"' / 3}')echo " I/O Speed(average) : $(_yellow "$ioavg MB/s")"elseecho " $(_red "Not enough space for I/O Speed test!")"fi
}print_end_time() {end_time=$(date +%s)time=$((end_time - start_time))if [ ${time} -gt 60 ]; thenmin=$((time / 60))sec=$((time % 60))echo " Finished in : ${min} min ${sec} sec"elseecho " Finished in : ${time} sec"fidate_time=$(date '+%Y-%m-%d %H:%M:%S %Z')echo " Timestamp : $date_time"
}! _exists "wget" && _red "Error: wget command not found.\n" && exit 1
! _exists "free" && _red "Error: free command not found.\n" && exit 1
# check for curl/wget
_exists "curl" && local_curl=true
# test if the host has IPv4/IPv6 connectivity
[[ -n ${local_curl} ]] && ip_check_cmd="curl -s -m 4" || ip_check_cmd="wget -qO- -T 4"
ipv4_check=$( (ping -4 -c 1 -W 4 ipv4.google.com >/dev/null 2>&1 && echo true) || ${ip_check_cmd} -4 icanhazip.com 2> /dev/null)
ipv6_check=$( (ping -6 -c 1 -W 4 ipv6.google.com >/dev/null 2>&1 && echo true) || ${ip_check_cmd} -6 icanhazip.com 2> /dev/null)
if [[ -z "$ipv4_check" && -z "$ipv6_check" ]]; then_yellow "Warning: Both IPv4 and IPv6 connectivity were not detected.\n"
fi
[[ -z "$ipv4_check" ]] && online="$(_red "\xe2\x9c\x97 Offline")" || online="$(_green "\xe2\x9c\x93 Online")"
[[ -z "$ipv6_check" ]] && online+=" / $(_red "\xe2\x9c\x97 Offline")" || online+=" / $(_green "\xe2\x9c\x93 Online")"
start_time=$(date +%s)
get_system_info
check_virt
clear
print_intro
next
print_system_info
ipv4_info
next
print_io_test
next
install_speedtest && speed && rm -fr speedtest-cli
next
print_end_time
next
相关文章:
bench.sh:一行命令测试Linux服务器基准测试
简介 bench.sh 是一个 Linux 系统性能基准测试工具。它的测试结果如下图:给出服务器的整体配置信息,IO 性能,网络性能。很多人使用它测试 vps 性能。 一键运行 服务器在国外可以使用以下命令运行测试 wget -qO- bench.sh | bash复制…...
广播IP与共享IP的关系
什么是广播IP? 广播IP是指一种特殊的IP地址,用于在网络中向所有设备发送信息。广播地址通常是某个网络段的最后一个地址,例如,在一个子网掩码为255.255.255.0的网络中(即/24子网),其网络地址可…...
正则表达式和re模块
正则表达式(Regular Expression,简称Regex或RegExp)是计算机科学中的一个重要概念,它通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式是对字符串操作的一种逻辑公式,通过事先定义…...
不同的浏览器、服务器和规范对 URL 长度的限制
不同的浏览器、服务器和规范对 URL 长度的限制有所不同。通常的限制如下: 1. 浏览器限制: 常见浏览器对 URL 长度的限制在 2,000 到 8,000 个字符之间。例如: Internet Explorer: 大约 2,083 个字符。Google Chrome: 理论上支持超过 32,00…...
NASA:ATLAS/ICESat-2 L3 A沿线内陆地表水数据V006数据集
目录 简介 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3A Along Track Inland Surface Water Data V006 简介 ATLAS/ICESat-2 L3 A沿线内陆地表水数据V006 ATLAS/ICESat-2 L3 A沿线内陆地表水数据V006是指由ATLAS/ICESat-2卫星获取的针对陆地…...
数据结构之链表(1),单链表
目录 前言 一、什么是链表 二、链表的分类 三、单链表 四、单链表的实现 五、SList.c文件完整代码 六、使用演示 总结 前言 本文讲述了什么是链表,以及实现了完整的单链表。 ❤️感谢支持,点赞关注不迷路❤️ 一、什么是链表 1.概念 概念:链…...
如何构建鲁棒高性能 Prompt 的方法?
你好,我是三桥君 在当今时代,利用大型语言模型如ChatGPT进行文本生成和交互已成为一种趋势。然而,要充分发挥这些模型的能力,尤其是在生产环境中,我们需要精心设计和优化我们的提示词(prompt)。…...
基于Springboot+微信小程序 的高校社团管理小程序(含源码+数据库+lw)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...
Vue 响应式监听 Watch 最佳实践
一. 前言 上一篇文章我们学习了 watch 的基础知识,了解了它的基本使用方法及注意事项,本篇文章我们继续了解在Vue 中 响应式监听 watch 的妙用。了解 watch 的基础使用请参考上一篇文章: 详解 Vue 中 Watch 的使用方法及注意事项https://bl…...
md编辑器语法
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
RabbitMQ常用管理命令及管理后台
RabbitMQ管理命令 1、用户管理1.1、新增一个用户1.2、查看当前用户列表1.3、设置用户角色1.4、设置用户权限1.5、查看用户权限 2、RabbitMQ的web管理后台2.1、查看rabbitmq 的插件列表2.2、启用插件2.3、禁用插件2.4、访问RabbitMQ的web后台2.4、通过web页面新建虚拟主机 ./rab…...
从准备面试八股文,感悟到技术的本质
工作前几年听说过,大学最重要的几门课其实是数据结构和算法、操作系统、计算机组成原理、计算机网络。 初听时不以为然,感觉没什么用。 近期准备面试八股文得到了一些感悟。这句话随着工作年限和对程序的理解越来越深入,含金量越来越高。 最…...
云手机的默认ip地址是什么
云手机(Cloud Phone)是一种基于云计算技术的虚拟手机,它可以在云端运行,使用户能够通过互联网访问手机应用和服务。云手机的IP地址通常取决于以下几个因素: 1. 云服务提供商 不同的云服务提供商(如AWS、G…...
对接阿里asr和Azure asr
1:对接阿里asr 1.1:pom <dependency><groupId>com.alibaba.nls</groupId><artifactId>nls-sdk-recognizer</artifactId><version>2.2.1</version> </dependency>1.2:生成token package c…...
未来数字世界相关技术、应用:AR/VR/MR;数字人、元宇宙、全息显示
一、AR/VR/MR 增强现实(AR)、虚拟现实(VR)和混合现实(MR)是三种不同的技术,它们都旨在增强用户对现实世界的感知和交互体验。以下是它们的详细介绍: 增强现实(AR) 增强现实(Augmented Reality, AR) 是一种将虚拟信息叠加到现实世界中的技术。通过AR技术,用户可…...
在 Java 中提供接口方法而不是实现接口
问题 我正在阅读有关Java中的接口的文章。其中提到我们必须实现compareTo方法才能在ArrayList容器上调用sort,例如Employee类应该实现 Comparable接口。 后面解释了为什么Employee类不能简单地提供compareTo方法而不实现Comparable接口?之所以需要接口…...
伪类选择器
一、基本概念 伪类选择器以冒号(:)开头,后面跟着伪类名。它不直接对应DOM中的任何元素,而是用于描述元素的特殊状态或位置。通过使用伪类选择器,可以在不修改HTML文档结构的情况下,为元素添加或修改样式。…...
亚信安全天穹5分钟勒索体检 免费试用今起上线
对于勒索攻击的认知 你是否还停留在“2.0时代”? 勒索攻击无疑是企业面临的最大威胁,2024年上半年,勒索组织数量同步增长超过50%,勒索攻击数量也持续攀升,平均勒索赎金突破520万美元。 当前,勒索攻击治理…...
高校竞赛管理系统的设计与实现
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大,容错率低&am…...
物联网行业中通信断线重连现象介绍以及如何实现
01 概述 断线重连是指在计算机网络中,当网络连接遇到异常中断或者断开时,系统会自动尝试重新建立连接,以保证网络通信的连续性和稳定性。这是一种常见的网络通信技术,广泛应用于各种计算机网络场景,包括互联网、局域…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
