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

磁盘性能测试与分析:结合fio和iostat的完整方案

磁盘性能测试与分析:结合fio和iostat的完整方案

磁盘性能是影响现代计算机系统整体运行效率的关键因素之一,特别是对于高I/O负载的应用如数据库、虚拟化环境等。本文将详细介绍如何利用fio和iostat工具全面评估磁盘性能,包括IOPS、带宽、延迟等核心指标,并通过不同参数组合测试发现潜在瓶颈。通过系统化的测试流程,用户能够获取准确的磁盘性能数据,为存储优化和硬件选型提供科学依据。

一、测试工具安装与验证

fio(Flexible I/O Tester)和iostat是Linux环境下常用的磁盘性能测试与监控工具。安装fio和iostat是测试的第一步,不同Linux发行版的安装命令略有差异。对于CentOS/RHEL系统,用户可以使用以下命令安装:

sudo yum install -y fio
sudo yum install -y sysstat

而对于Ubuntu/Debian系统,则需要使用:

sudo apt-get update
sudo apt-get install -y fio
sudo apt-get install -y sysstat

安装完成后,必须验证工具是否成功安装,确保后续测试能够顺利进行。验证方法如下:

fio --version  # 检查fio版本,如显示"fiotest version 3.x.x"则安装成功
iostat --help   # 检查iostat帮助信息,确认命令可用

若使用非主流发行版(如Alpine Linux),则需要根据具体系统选择合适的包管理器或考虑手动编译安装。值得注意的是,fio需要libaio库支持,某些系统可能需要额外安装开发包:

# CentOS/RHEL
sudo yum install -y libaio libaio-devel# Ubuntu/Debian
sudo apt-get install -y libaio-dev

二、fio配置与参数详解

fio配置文件通常采用INI格式,分为全局参数和任务参数两部分。全局参数适用于所有任务,任务参数则针对特定测试场景。一个典型的fio配置文件结构如下

[global]
ioengine=libaio  # 使用Linux原生异步I/O引擎
direct=1         # 绕过操作系统缓存,直接进行I/O操作
time_based=1     # 基于时间运行测试
runtime=60       # 测试持续时间为60秒
size=1G          # 每个测试文件大小为1GB
refill_buffers=1 # 每次I/O操作使用新缓冲区,避免缓存干扰
norandommap=1    # 禁用随机映射表,确保数据写入一致性
filename_format=$jobname.$filenum # 自动创建测试文件名
group_reporting=1 # 合并多线程测试结果,方便分析[job1]
name=seqread     # 测试任务名称
rw=read          # 读写模式:顺序读取
bs=1M            # 数据块大小:1MB
numjobs=1        # 并发任务数:1个线程
iodepth=16       # I/O队列深度:16个请求同时处理

关键参数解析

  • rw:定义测试模式,可选值包括read(顺序读)、write(顺序写)、randread(随机读)、randwrite(随机写)和randrw(随机读写混合)。
  • bs:指定每次I/O操作的数据块大小,直接影响测试的IOPS和带宽。小块(如4k)适合测试IOPS,大块(如1M)适合测试吞吐量。
  • numjobs:控制并发任务数,增加numjobs可以提升总IOPS,但需考虑磁盘并行能力限制。SSD通常建议设置为1-4,而HDD可能需要更低值。
  • iodepth:表示I/O队列深度,每个线程可以同时处理的I/O请求数。SSD建议设置为16-64,HDD建议设置为1-8。过高的队列深度可能导致延迟增加。
  • direct:设为1表示绕过系统缓存,直接进行I/O操作,获得更真实的设备性能数据。在顺序读写测试中,缓存可能显著提升性能,但会掩盖磁盘真实能力。

测试路径选择:测试文件应直接写入磁盘设备(如/dev/sdb1)或临时文件系统(如/tmp),避免文件系统层对性能的影响。若测试文件系统性能,则可指定具体文件路径。

三、IOPS测试与参数调整分析

IOPS(每秒输入/输出操作数)是衡量存储设备随机读写能力的核心指标。通过调整iodepth和numjobs参数,可以观察磁盘IOPS性能的变化趋势,这对理解磁盘并行处理能力至关重要。

测试命令示例

fio --name=randread --ioengine=libaio --rw=randread --bs=4k --size=1G --numjobs=1 --runtime=60 --time_based --ramp_time=10 --iodepth=16 --filename=/dev/sdb1 --direct=1

参数调整逻辑

  1. iodepth调整:队列深度直接影响同时处理的I/O请求数量。对于SSD,随着iodepth增加,IOPS通常呈线性增长趋势,直到达到设备最大并行能力(如32-64)。此时继续增加iodepth可能导致await(平均等待时间)显著增加,性能反而下降。例如,某NVMe SSD在iodepth=1时IOPS为20,000,到iodepth=32时达到峰值60,000,继续增加到64时IOPS反而降至55,000,await从0.5ms增加到2.0ms。

  2. numjobs调整:增加并发任务数可以提升总IOPS,但存在资源竞争上限。当numjobs超过CPU核心数或磁盘并行处理能力时,性能提升可能不再明显。例如,测试4个线程(numjobs=4)时,总IOPS为每个线程的IOPS之和;当增加到16个线程时,由于资源竞争,总IOPS可能仅提升50%。

测试场景设计:建议设计阶梯式参数测试,观察IOPS变化趋势。例如,对随机读测试:

  • iodepth从1到64,每次增加8
  • numjobs从1到8,每次增加2
  • 固定块大小bs=4k

测试结果解读:fio测试结束后会输出详细的性能统计信息,重点关注以下指标:

  • IOPS:每秒完成的读写操作数,直接反映磁盘I/O能力。
  • Bandwidth:每秒传输的数据量,单位为MB/s或GB/s。
  • Latency:I/O操作的平均延迟,包括提交延迟(slat)、完成延迟(clat)和总延迟(lat)。

实际案例分析:某企业级SATA SSD在不同参数组合下的随机读IOPS测试结果:

iodepthnumjobsIOPSBandwidth (MB/s)Average Latency (ms)
111,5006.00.67
8110,20040.80.98
32128,500114.01.40
64129,800119.22.25
164112,000448.01.34
328215,000860.02.01

从表格中可以看出,当iodepth增加到32时,单线程IOPS达到峰值28,500,继续增加到64时,性能提升有限,但延迟显著增加。增加numjobs到4,同时保持iodepth=16,总IOPS提升至112,000,显示良好的并行处理能力。当numjobs增加到8时,总IOPS提升至215,000,但平均延迟也增加到2.01ms,表明磁盘可能接近饱和状态。

四、顺序读写带宽测试与block size分析

带宽(吞吐量)是衡量磁盘顺序读写能力的关键指标,反映了磁盘在连续传输大文件时的能力。块大小(block size)是影响带宽测试结果的重要参数,通常顺序读写测试使用较大的块(如64k-4M)。

测试命令示例

# 顺序读测试
fio --name=seqread --ioengine=libaio --rw=read --bs=1M --size=10G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sdb1 --direct=1# 顺序写测试
fio --name=seqwrite --ioengine=libaio --rw=write --bs=1M --size=10G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sdb1 --direct=1

block size影响分析

块大小直接影响单次I/O操作的数据量和总I/O操作次数。带宽通常随block size增大而提升,但存在硬件上限。例如,测试顺序写带宽:

  • 当bs=4k时,IOPS可能很高(如20,000),但带宽仅为80MB/s(20,000 IOPS × 4KB/1024)。
  • 当bs=1M时,IOPS可能降至5,000,但带宽可达4,882MB/s(5,000 IOPS × 1MB)。
  • 当bs=4M时,IOPS可能稳定在5,000,但带宽达到19,531MB/s,接近磁盘理论带宽上限。

测试参数选择:顺序读写测试建议使用较大的block size(如64k、128k、1M、4M),并保持numjobs=1。通过调整block size,可以观察磁盘带宽随数据块大小变化的趋势,从而评估其在不同工作负载下的性能表现。

测试结果解读:fio顺序读写测试结果中,重点关注Bandwidth(带宽)、IOPS(每秒操作数)和Latency(延迟)。例如,某SAS硬盘的顺序写测试结果:

seqwrite: (g=0): write=10.0GB (10737418240 bytes), 10000.0KiB/s (10.2MB/s), 31750KiB/s (31.0MB/s), 31750KiB/s (31.0MB/s)
seqwrite: (g=0): write=10.0GB (10737418240 bytes), 10000.0KiB/s (10.2MB/s), 31750KiB/s (31.0MB/s), 31750KiB/s (31.0MB/s)

从结果中可以看出,该SAS硬盘在顺序写模式下,带宽达到31MB/s,IOPS约为25,400(31MB/s ÷ 1MB/1024 ≈ 30.7k IOPS)。结合磁盘理论带宽(如SAS 6Gbps理论带宽约600MB/s),实际带宽与理论值存在较大差距,可能表明磁盘性能不足或存在其他瓶颈。

五、iostat监控与性能瓶颈判断

iostat是监控磁盘I/O性能的权威工具,通过结合iostat监控可以更全面地评估磁盘性能瓶颈。iostat -x命令提供扩展的磁盘统计信息,包含关键性能指标。

iostat监控命令

iostat -x 1  # 每秒刷新一次,显示扩展磁盘统计信息

关键监控指标解析

  1. %util:被I/O操作消耗的CPU百分比。理想情况下应小于80%,超过90%表明磁盘接近饱和,无法处理更多I/O请求。例如,当运行高负载fio测试时,若%util持续接近100%,则表明磁盘是性能瓶颈。

  2. await:平均每次设备I/O操作的等待时间(毫秒)。对于SSD,正常范围为0.1-1ms;对于HDD,正常范围为10-30ms。如果await显著高于svctm(平均服务时间),则表明I/O队列过长,磁盘响应变慢。

  3. r/sw/s:每秒完成的读/写操作数,直接反映IOPS性能。r/sw/s的总和即为TPS(每秒事务数)。

  4. rrqm/swrqm/s:每秒合并的读/写请求数。高值表明内核优化了相邻I/O请求,合并为更大的请求,这在顺序读写中常见。

磁盘性能瓶颈判断逻辑

  • 磁盘饱和瓶颈:当%util接近100%且await显著增加时,表明磁盘本身无法处理更多I/O请求,可能是磁盘IOPS或带宽达到上限。
  • I/O队列瓶颈:当avgqu-sz(平均I/O队列长度)大于10时,表明有大量I/O请求在排队等待处理,系统I/O处理能力不足。
  • CPU等待瓶颈:当CPU部分的%iowait(CPU等待I/O的时间百分比)持续高于10%时,表明CPU因等待磁盘I/O而空闲,可能是存储系统或应用程序设计问题。
  • 资源竞争瓶颈:当%utilawait均未达到瓶颈值,但I/O性能低于预期时,可能是系统资源(如CPU、内存)竞争导致,需要结合其他工具(如top、vmstat)分析。

联合测试方法:在实际测试中,建议在运行fio测试的同时,打开另一个终端执行iostat监控。例如:

  • 终端A:运行fio测试命令(如随机写IOPS测试)
  • 终端B:运行iostat -dx 1实时监控磁盘性能

通过这种方式,可以同时获取测试数据和实时性能指标,为分析提供更全面的视角。

六、磁盘性能综合评估与优化建议

磁盘性能评估指标

  1. 随机读写性能:重点关注IOPS和平均延迟。对于SSD,随机读IOPS通常在20,000-100,000,随机写IOPS在10,000-50,000;延迟在0.1-1ms。对于HDD,随机读写IOPS通常在50-200,延迟在5-15ms。

  2. 顺序读写性能:重点关注带宽和吞吐量。对于SSD,顺序读写带宽通常在500-3000MB/s;对于HDD,顺序读写带宽通常在50-200MB/s。

  3. 系统资源利用率:监控CPU的%iowait、内存使用情况和系统负载。如果%iowait持续高于10%,表明CPU因等待I/O而空闲,可能需要优化应用程序或存储配置。

性能瓶颈识别与优化

  • 磁盘饱和瓶颈:当%util接近100%且await显著增加时,表明磁盘本身性能不足。优化方向包括更换更高性能的磁盘(如从HDD升级到SSD)、增加磁盘数量(如RAID配置)或优化I/O请求模式(如减少随机写入)。
  • I/O队列瓶颈:当avgqu-sz大于10时,表明I/O队列过长。优化方向包括调整fio的iodepth和numjobs参数(如降低iodepth)、优化应用程序的I/O请求模式或增加系统I/O处理能力(如增加CPU核心数)。
  • CPU等待瓶颈:当%iowait持续高于10%时,表明CPU因等待I/O而空闲。优化方向包括优化应用程序的I/O处理逻辑、减少I/O请求数量或使用更高效的I/O引擎(如libaio替代sync)。
  • 接口带宽限制:当带宽测试结果接近磁盘理论带宽上限时,表明接口成为瓶颈。优化方向包括升级接口类型(如从SATA升级到NVMe)、优化数据传输路径或使用更高效的文件系统。

实际案例分析:某企业级存储系统在运行数据库时出现性能问题,通过fio和iostat联合测试发现:

  • 使用fio进行随机写测试(rw=randwrite,bs=4k)时,IOPS仅为1,200,远低于预期的5,000 IOPS。
  • 同时运行iostat监控发现,%util达到95%,await为5.2ms,远高于SSD正常范围(0.1-1ms)。
  • 进一步分析显示,该存储系统使用SATA接口连接SSD,理论带宽为600MB/s,但实际顺序写带宽仅为300MB/s,表明接口带宽限制了性能。

基于以上分析,解决方案是将存储系统升级为NVMe接口,同时优化数据库I/O请求模式(如增加批量写入操作)。升级后,随机写IOPS提升至35,000,顺序写带宽达到2,800MB/s,显著改善了系统性能。

七、测试实践与注意事项

测试环境准备

  • 确保测试磁盘无其他负载干扰,关闭不必要的后台服务。
  • 测试文件应足够大(如10GB以上),避免因文件过小而提前完成测试。
  • 对于顺序读写测试,建议使用refill_buffers=1参数确保每次I/O操作使用新缓冲区,避免缓存干扰。

测试参数选择建议

  • 随机读写测试:使用小块(如4k)和合理的队列深度(SSD推荐16-64,HDD推荐1-8)。
  • 顺序读写测试:使用大块(如1M-4M)和较低的队列深度(如1-4)。
  • 混合读写测试:通过rwmixread参数设置读写比例(如rwmixread=70表示70%读,30%写)。

测试结果验证:同一测试场景建议运行3-5次,取平均值以减少结果波动。如果测试结果差异较大,需检查系统稳定性或测试参数设置。

磁盘类型适配测试

不同类型的磁盘对参数的敏感度不同,需根据磁盘类型调整测试策略:

  • SSD:支持高IOPS和低延迟,测试重点应放在小块随机读写性能。推荐参数:rw=randrwbs=4k-16kiodepth=32-64
  • HDD:顺序读写性能较好,但随机读写能力有限。测试重点应放在顺序读写带宽和大块随机读写。推荐参数:rw=randrwbs=64k-256kiodepth=1-4
  • 混合存储系统:如SSD缓存+HDD存储的系统,需测试不同工作负载下的性能表现,尤其是随机读写和顺序读写的切换场景。

测试数据示例:某NVMe SSD在随机读写混合测试(70%读,30%写)中的性能表现:

randrw: (g=0): rw=randrw, rwmixread=70, rwmixwrite=30, bs=4k-4k/4k-4k, ioengine=libaio, iodepth=32
randrw: (g=0): rw=randrw, rwmixread=70, rwmixwrite=30, bs=4k-4k/4k-4k, ioengine=libaio, iodepth=32
randrw: (g=0): rw=randrw, rwmixread=70, rwmixwrite=30, bs=4k-4k/4k-4k, ioengine=libaio, iodepth=32
randrw: (g=0): rw=randrw, rwmixread=70, rwmixwrite=30, bs=4k-4k/4k-4k, ioengine=libaio, iodepth=32
randrw: (g=0): rw=randrw, rwmixread=70, rwmixwrite=30, bs=4k-4k/4k-4k, ioengine=libaio, iodepth=32
randrw: (g=0): rw=randrw, rwmixread=70, rwmixwrite=30, bs=4k-4k/4k-4k, ioengine=libaio, iodepth=32
randrw: (g=0): rw=randrw, rwmixread=70, rwmixwrite=30, bs=4k-4k/4k-4k, ioengine=libaio, iodepth=32
randrw: (g=0): rw=randrw, rwmixread=70, rwmixwrite=30, bs=4k-4k/4k-4k, ioengine=libaio, iodepth=32

从结果中可以看出,该NVMe SSD在随机读写混合测试中,总IOPS达到95,000,平均延迟仅为0.35ms,带宽高达372MB/s,表明其性能优异,可满足高并发I/O需求。

八、总结与最佳实践

磁盘性能测试是存储系统优化和硬件选型的重要依据。通过合理使用fio和iostat工具,可以全面评估磁盘的IOPS、带宽、延迟等关键指标,并结合系统资源利用率判断潜在瓶颈。

最佳实践建议

  1. 明确测试目标:根据实际应用场景选择测试模式(顺序/随机读写)和参数(block size、iodepth等)。例如,数据库系统通常需要高随机读写性能,而视频处理可能更关注顺序写带宽。

  2. 合理选择参数组合:SSD测试建议使用小块(4k-16k)和高队列深度(32-64),而HDD测试应使用较大块(64k-256k)和较低队列深度(1-4)。

  3. 关注关键指标阈值:SSD的await应小于1ms,%util可接近100%;HDD的await应小于30ms,%util超过70%可能为瓶颈。

  4. 结合系统资源分析:除了磁盘性能,还需关注CPU的%iowait和内存使用情况,全面评估系统瓶颈。

  5. 多次测试取平均值:由于系统负载波动,同一测试场景建议运行3-5次,取平均值以获得更准确的结果。

通过系统化的磁盘性能测试与分析,用户能够获取客观的性能数据,为存储优化和硬件升级提供科学依据。理解不同工作负载下的磁盘性能特点,才能做出最合理的存储架构设计和调优决策

说明:报告内容由通义AI生成,仅供参考。

相关文章:

磁盘性能测试与分析:结合fio和iostat的完整方案

磁盘性能测试与分析:结合fio和iostat的完整方案 磁盘性能是影响现代计算机系统整体运行效率的关键因素之一,特别是对于高I/O负载的应用如数据库、虚拟化环境等。本文将详细介绍如何利用fio和iostat工具全面评估磁盘性能,包括IOPS、带宽、延迟…...

随机森林(Random Forest)

随机森林(Random Forest)是一种基于决策树的集成学习算法,它通过构建多个决策树并将它们的预测结果进行综合,从而提高模型的准确性和稳定性。 1.基本原理 随机森林属于集成学习中的“Bagging”方法。其核心思想是通过构建多个决…...

C#数据类型

🧩 一、布尔值(bool) 表示逻辑值:true 或 false bool isTrue true; bool isFalse false;📌 二、整数(Integer Types) C# 支持多种有符号和无符号整数类型: 类型大小范围sbyte8…...

FastAPI 实现 Express 框架的 p-limit(1) 防并发操作

背景 以下是将 Electron 主进程中的 CURD 逻辑(Express 实现)迁移到 FastAPI 的完整方案,包含技术选型、实现步骤和注意事项,确保主进程与子进程解耦且稳定运行: 关键点 注意用 conda 安装 python 版本时&#xff0c…...

STC8H系列单片机STC8H_H头文件功能注释

#ifndef __STC8H_H__ // 条件编译:如果未定义__STC8H_H__宏 #define __STC8H_H__ // 则定义该宏,防止头文件被重复包含 / //包含本头文件后,不用另外再包含"REG51.H" // 提示:本头文件已包含基本寄存器定义 sfr P0 = …...

C#中BackgroundWorker的概念与用法详解

一、BackgroundWorker 概念 BackgroundWorker 是 C# 中用于在后台线程中运行操作的组件,它允许你在不影响用户界面(UI)响应能力的情况下执行耗时操作。 它位于 System.ComponentModel 命名空间内,主要用于 Windows 窗体应用程序中…...

RM算法的地下宫殿

证: X n 1 X n β n ( ξ n − X n ) ( 1 − β n ) X n β n ξ n X_{n1}X_n\beta_n(\xi_n-X_n)(1-\beta_n)X_n\beta_n\xi_n Xn1​Xn​βn​(ξn​−Xn​)(1−βn​)Xn​βn​ξn​。由数学归纳法可得 X n 1 ∑ j 1 n ξ j β j ∏ i j n − 1 ( 1 − β…...

WEB安全--Java安全--LazyMap_CC1利用链

一、前言 该篇是基于WEB安全--Java安全--CC1利用链-CSDN博客的补充,上篇文章利用的是TransformedMap类,而CC链的原作者是利用的LazyMap类作为介质进行的触发。 所以本文将分析国外原作者在ysoserial commonscollections1中给出的CC1利用链。 二、回顾梳…...

【Matlab】最新版2025a发布,深色模式、Copilot编程助手上线!

文章目录 一、软件安装1.1 系统配置要求1.2 安装 二、新版功能探索2.1 界面图标和深色主题2.2 MATLAB Copilot AI助手2.3 绘图区升级2.4 simulink2.5 更多 延迟一个月,终于发布了🤭。 一、软件安装 1.1 系统配置要求 现在的电脑都没问题,老…...

[网络升级指南] 服务器网卡/带宽如何选?1GbE vs 10GbE vs 25GbE+ 性能与成本深度解析 (2025)

更多服务器知识,尽在hostol.com 嘿,各位服务器“舰长”们!当你为你的“星际飞船”(服务器)配备了顶级的 CPU“引擎”、超大的内存“能源核心”、以及光速 SSD“曲速引擎”之后,是不是觉得它就能在数字宇宙…...

Nginx与Tomcat负载均衡集群配置指南

目录 一、资源清单 二、基础环境 三、安装配置Tomcat 四、安装配置Nginx 一、资源清单 主机 操作系统 IP地址 tomcat1 OpenEuler24.03 192.168.16.142 tomcat2 OpenEuler24.03 192.168.16.143 Nginx OpenEuler24.03 192.168.16.144 二、基础环境 hostnamectl …...

已解决(亲测有效!):安装部署Docker Deskpot之后启动出现Docker Engine Stopped!

文章目录 已解决:安装部署Docker Deskpot之后启动出现Docker Engine Stopped!个人环境介绍自己的解决问题思路(详细过程附截图)1.打开控制面板2.点击程序和功能3.点击启动或关闭windows功能4.Hyper-V5.右键菜单栏的windows图标点击…...

C++多态实现的必要条件剖析

在C中,多态的一个必要条件确实是通过基类的指针或引用调用虚函数。这一要求背后的原因与C如何实现动态绑定(运行时多态)密切相关。下面详细解释了为什么需要使用基类的指针或引用来实现多态。 动态绑定与静态绑定 静态绑定(编译期…...

25.5.15

没有比水题更令人开心的事情了 典型的并查集题目,并查集分为并和查,并就是把有关系的父亲根结点设为同一个,查就是在成功构造后对其进行查询 查通过递归实现 if (x f[x])return x; return f[x] find(f[x]); 由于并查集的特点&#xff0…...

WebSocket:实时通信(如聊天应用)从零到一的深度解析

简介 在现代互联网应用中,实时通信已成为不可或缺的核心功能。从在线聊天到金融数据监控,从协同办公到在线游戏,实时性需求推动了WebSocket技术的广泛应用。本文将从底层协议原理出发,结合企业级开发场景,系统讲解WebSocket的实现机制、实战技巧与优化策略。通过完整的代…...

二程运输的干散货船路径优化

在二程运输中,干散货船需要将货物从一个港口运输到多个不同的目的地港口。路径优化的目标是在满足货物运输需求、船舶航行限制等条件下,确定船舶的最佳航行路线,以最小化运输成本、运输时间或其他相关的优化目标。 影响因素 港口布局与距离:各个港口之间的地理位置和距离…...

【Java ee初阶】http(1)

HTTP 全称为“超文本传输协议”,由名字可知,这是一个基于文本格式的协议,而TCP,UDP,以太网,IP...都是基于二进制格式的协议。 如何区别该协议是基于哪种格式的协议? 形如这种协议格式&#xf…...

《Deepseek从入门到精通》清华大学中文pdf完整版

资源介绍: 《DeepSeek:从入门到精通》是由清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室的精心撰写的一份专业文档。该文档以通俗易懂的方 式,全面介绍了DeepSeek的使用方法,为用户提供了极具价值的指导。 这份文档内容丰…...

【图片识别工具】批量单据识别批量重命名,批量OCR识别图片文字并重命名,批量改名工具的使用步骤和注意事项

一、适用场景 ​​财务与发票管理​​:企业需处理大量电子发票或扫描件,通过OCR识别发票代码、金额等关键信息,自动重命名为发票号_金额.pdf格式,便于归档与税务审计。 ​​物流单据处理​​:物流公司需从运单中提取单…...

重磅发布!OpenAI 推出最新模型 GPT-4.1 系列!

今日凌晨,OpenAI宣布开放全新模型GPT-4.1,并于即日起在ChatGPT中投入使用。 超长上下文与卓越编码能力 GPT-4.1作为OpenAI的最新模型,支持长达100万tokens的上下文,是OpenAI首次发布的长窗口模型。相较于前代,GPT-4.1…...

游戏引擎学习第281天:在房间之间为摄像机添加动画效果

回顾并为今天的内容定下基调 这次我们要继续深入处理实体系统。在前一阶段对实体系统做了一些很酷的改动,但现在到了要认真面对和完善它的时候。 今天的主要目标是修复并优化摄像机在房间之间移动时的逻辑。在上一次的实现中,我们重新启用了基于房间的…...

机器学习 --- 模型选择与调优

机器学习 — 模型选择与调优 文章目录 机器学习 --- 模型选择与调优一,交叉验证1.1 保留交叉验证HoldOut1.2 K-折交叉验证(K-fold)1.3 分层k-折交叉验证Stratified k-fold 二,超参数搜索三,鸢尾花数据集示例四,现实世界数据集示例…...

PostgreSQL pgrowlocks 扩展详解

一、简介 pgrowlocks 是 PostgreSQL 官方提供的扩展模块,用于查看指定表中每一行当前的行级锁(Row Lock)信息。它非常适用于: 并发冲突排查行级锁等待分析死锁前兆探测热点数据行分析 二、安装与启用 1. 安装前提(…...

Makefile 详解

Makefile 是一个用于自动化构建过程的脚本文件,主要用于管理源代码的编译和链接过程。它定义了项目中的依赖关系以及如何从源文件生成目标文件。 基本概念 Make:一个构建自动化工具,读取 Makefile 中的指令目标(Target):要生成的…...

IntelliJ IDEA 集成AI编程助手全解析:从Copilot到GPT-4o Mini的实践

目录 AI编程助手的演进与核心价值GitHub Copilot深度集成指南国产新星DeepSeek配置实战GPT-4o Mini低成本接入方案三大助手对比与场景适配企业级安全与本地化部署未来发展趋势与开发者启示1. AI编程助手的演进与核心价值 1.1 技术演进图谱 #mermaid-svg-LwYPrW2Y2Pqvqgf0 {fon…...

wps excel将表格输出pdf时所有列在一张纸上

记录:wps excel将表格输出pdf时所有列在一张纸上 1,调整缩放比例 2,将表格的所有铺满到这套虚线...

【开源Agent框架】OWL:面向现实任务自动化的多智能体协作框架深度解析

一、基本介绍 1.1 项目概述 OWL(Optimized Workforce Learning)是基于CAMEL-AI框架构建的创新型多智能体协作系统,旨在通过动态智能体交互实现复杂任务的自动化处理。项目在GAIA基准测试中以69.09的平均分位列开源框架榜首,展现了强大的任务处理能力。 技术特性矩阵: 多…...

120页WORD方案 | 2025企业数字化转型AI大模型数字底座项目设计方案

这份文档是一份关于企业数字化转型AI大模型数字底座项目的设计方案,涵盖了从项目概述、业务需求分析到技术架构设计等多个方面。它详细阐述了企业为何需要构建AI大模型底座,以及如何通过这一底座实现智能化决策支持、业务流程优化和客户体验提升。方案中…...

Vue3 本地环境 Vite 与生产环境 Nginx 反向代理配置方法汇总【反向代理篇】

文章目录 一、前言二、问题场景三、开发环境配置(Vite)四、生产环境配置(Nginx)4.1 初始错误配置4.2 正确配置方案4.3 配置解析4.4高级配置选项 五、常见问题排查六、开发环境 vs 生产环境对比七、总结 一、前言 在前后端分离架构…...

机器视觉对位手机中框点胶的应用

在手机制造的精密世界里,每一个环节都关乎着产品的最终品质,而手机中框点胶工艺更是其中关键一环。点胶不仅起到固定内部组件、增强结构强度的作用,还影响着手机的防水、防尘性能。然而,随着手机设计日益轻薄化、复杂化&#xff0…...

Elasticsearch性能调优全攻略:从日志分析到集群优化

#作者:猎人 文章目录 前言搜索慢查询日志索引慢写入日志性能调优之基本优化建议性能调优之索引写入性能优化提升es集群写入性能方法:性能调优之集群读性能优化性能调优之搜索性能优化性能调优之GC优化性能调优之路由优化性能调优之分片优化 前言 es里面…...

Electron 主进程中使用Worker来创建不同间隔的定时器实现过程

背景 目前主进程使用 timer.setInterval 来做间隔任务执行,但是总有用户反馈养号卡主不执行了,或者某个操作不执行了,为了排除主进程的运行造成 setInterval 阻塞可能,将 setInterval 单独处理,可以排除主进程对定时器…...

用户安全架构设计

一、主动踢出,被动踢出 二、密码设计策略:密码复杂度,密码安全检查,密码失效设计,账号锁定设计,密码存储和传输加密 三、密码找回策略:密保问题,下行短信验证码,上行短信…...

2025年黑客扫段攻击激增:如何构建智能防御体系保障业务安全?

引言 2025年,随着全球物联网设备突破500亿台,黑客利用自动化工具发起的扫段攻击(IP段扫描漏洞利用)已成为企业业务安全的最大威胁之一。单次攻击可覆盖数万个IP,精准定位未修复漏洞,导致数据泄露、服务瘫痪…...

基于大模型预测胃穿孔预测与围手术期管理系统技术方案

目录 1. 系统架构模块2. 关键算法实现2.1 术前预测模型(Transformer多模态融合)2.2 术中实时分析(在线学习LSTM)3. 模块流程图(Mermaid)3.1 数据预处理系统3.2 术前预测系统3.3 术中实时分析系统4. 技术验证模块4.1 模型可解释性验证4.2 边缘计算部署架构1. 系统架构模块…...

Java转Go日记(三十六):简单的分布式

1.1.1. 简单的分布式server 目前分布式系统已经很流行了,一些开源框架也被广泛应用,如dubbo、Motan等。对于一个分布式服务,最基本的一项功能就是服务的注册和发现,而利用zk的EPHEMERAL节点则可以很方便的实现该功能。EPHEMERAL节…...

操作系统-进程与线程

操作系统 操作系统用来保护系统资源和提高稳定性的重要机制 文章目录 用户态和内核态为什么要区分状态? 进程管理进程,线程进程/线程切换进程的5种状态进程通信线程通讯进程调度算法 用户态和内核态 用户态 应用程序运行时所在的模式,权限受限…...

人体肢体渲染-一步几个脚印从头设计数字生命——仙盟创梦IDE

人体肢体动作数据集-太极拳 渲染代码 # 初始化Pygame pygame.init()# 设置窗口尺寸 WINDOW_WIDTH 800 WINDOW_HEIGHT 600 window pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption("动作回放")# 设置帧率 FPS 30 clock pyg…...

如何安全配置好CDN用于防止DDoS与Web攻击 ?

保护网站免受DDoS和Web攻击是至关重要的,CDN(内容分发网络)可以作为一种有效的防御工具。以下是一些安全配置CDN以防止DDoS和Web攻击的最佳实践: 1. 选择可靠的CDN提供商 安全功能: 选择拥有强大安全功能的CDN提供商…...

01-数据结构概述和时间空间复杂度

数据结构概述和时间空间复杂度 1. 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。 2. 什么是算法 算法(Algorithm)就是定义良好的计算…...

【ArcGIS技巧】根据地块、界址点图层生成界址线

"农经权二轮延包我已经写的差不多了,需要的一些生成四至、分割地块的功能也分享了替代的插件。前面刚分享完界址点的生成,今天分享界址线的生成,有需要的自取,至此,基本可以用这些功能完成出成果工作。" 1、…...

PC:使用WinSCP密钥文件连接sftp服务器

1. 打开winscp工具,点击“标签页”->“新标签页” 2. 点击“高级"->“高级” 3. 点击"验证"->“选择密钥文件” 选择ppk文件,如果没有ppk文件选择pem文件,会自动生成ppk文件 点击确定 4. 输入要连接到的sftp服务器的…...

RedHat7 如何更换yum镜像源

RedHat7如何更换yum镜像源? # 删除系统自带 yum rpm -qa|grep -e yum -e python-urlgrabber |xargs rpm -e --nodeps# 下载yum与wget的rpm软件包 curl -O http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-168.el7.centos.noarch.rpm curl -O ht…...

k8s 1.10.26 一次containerd失败引发kubectl不可用问题

k8s 1.10.26 一次containerd失败引发kubectl不可用问题 开机k8s 1.10.26时,报以下错误 [rootmaster ~]# kubectl get no E0515 08:03:00.914894 7993 memcache.go:265] couldnt get current server API group list: Get "https://192.168.80.50:6443/api?…...

Qt信号槽机制与UI设计完全指南:从基础原理到实战应用

目录 前言一、信号槽1.1 传参1.2 Qt信号与槽的对应关系1.2.1一对多关系1.2.2 多对一关系 二、Designer三、Layout 布局3.1 基础用法3.2 打破布局3.3 贴合窗口3.4 伸展器(Spacer)3.5 嵌套布局 四、ui指针五、QWidget六、QLabel 标签使用指南总结 前言 本…...

微信小程序van-dialog确认验证失败时阻止对话框的关闭

使用官方(Vant Weapp - 轻量、可靠的小程序 UI 组件库)的before-close&#xff1a; wxml&#xff1a; <van-dialog use-slot title"名称" show"{{ show }}" show-cancel-button bind:cancel"onClose" bind:confirm"getBackInfo"…...

嵌入式学习--江科大51单片机day7

我们在听课的过程中&#xff0c;可能对老师讲的有疑问&#xff0c;或者有些自己的理解&#xff0c;我们可以去问豆包&#xff0c;包括在写博客的时候我也是&#xff0c;不断去问豆包保证思考的正确性。&#xff08;有人感觉豆包很low啊&#xff0c;其实这些基础性的东西豆包一般…...

spark和hadoop之间的区别和联系

Spark和Hadoop的对比 1. 架构层面 Hadoop&#xff1a; HDFS&#xff08;分布式文件系统&#xff09;&#xff1a;Hadoop的核心组件之一&#xff0c;用于存储大规模数据。它将数据分散存储在多个节点上&#xff0c;通过冗余存储&#xff08;默认三副本&#xff09;来保证数据…...

antd mobile 点击 TabBar 切换页面

switchRoute 函数&#xff0c;navigate 点击的 path import { Button, TabBar } from "antd-mobile"; import { useEffect } from "react"; import { Outlet, useNavigate } from "react-router-dom"; import { useDispatch } from "react…...

20250515让飞凌的OK3588-C的核心板在Linux R4下适配以太网RTL8211F-CG为4线百兆时的接线图

20250515让飞凌的OK3588-C的核心板在Linux R4下适配以太网RTL8211F-CG为4线百兆时的接线图 2025/5/15 20:19 缘起&#xff1a;以前做的网线找不到了&#xff0c;那就再来一条吧。 引脚定义要从头来过&#xff1f;还好找到了一条。 开干&#xff01; 万用表一对/点&#xff0c;几…...