云服务器磁盘性能测试:FIO工具在阿里云ECS上的最佳实践

从测试报告看懂磁盘性能:fio结果参数全解析(附阿里云ECS实测数据) 本文深入解析fio测试报告中的关键性能指标,包括读写速度、延迟等参数,并结合阿里云ECS实测数据,帮助开发者选择最适合业务场景的存储配置。通过详细的测试环境搭建和优化建议,提升磁盘性能测试的准确性和实用性。 阅读详情

云服务器磁盘性能测试:FIO工具在阿里云ECS上的深度实践与避坑指南

在云计算的世界里,存储性能往往是决定应用响应速度和用户体验的关键因素。无论是运行数据库、处理大数据分析,还是支撑高并发Web服务,底层磁盘的IOPS、吞吐量和延迟都直接影响着业务的稳定性和效率。然而,许多开发者和运维人员在面对云厂商琳琅满目的云盘规格时,往往感到困惑:ESSD PL0、PL1、PL2、PL3到底有多大区别?本地SSD和云盘在实际负载下表现如何?如何用数据说话,为你的应用选择最合适的存储方案?

这正是FIO(Flexible I/O Tester)工具大显身手的地方。作为一个开源的、功能强大的I/O性能基准测试工具,FIO能够模拟各种真实世界的I/O负载模式,帮助你获得最接近实际应用的性能数据。但仅仅知道几个基础命令是远远不够的。在阿里云ECS这样的生产环境中,测试方法、参数配置、环境准备乃至结果解读,每一个环节都藏着影响数据准确性的“魔鬼”。我曾见过团队因为忽略了缓存影响,测试出的IOPS数据虚高数倍,导致选型失误;也遇到过因未正确设置direct参数,测试结果完全无法反映磁盘真实能力的情况。

本文将带你深入FIO在阿里云ECS上的最佳实践,不仅会详细解析每个关键参数背后的原理,更会分享我在实际项目中积累的测试策略、常见陷阱和优化建议。无论你是正在评估不同云盘规格的选型工程师,还是需要为关键业务系统提供性能保障的运维专家,这篇文章都将为你提供一套完整、可靠、可直接落地的测试方案。

1. 测试前的关键准备:环境、安全与策略

在按下回车键开始第一个FIO测试之前,充分的准备工作能避免后续90%的麻烦。在云环境中测试磁盘性能,与物理服务器有显著不同,你需要特别注意云环境的特性和潜在风险。

1.1 测试环境的选择与隔离

首先,绝对不要在生产环境的系统盘或存有重要数据的数据盘上直接进行FIO压测。FIO的裸盘测试会直接向块设备写入数据,这会彻底破坏现有文件系统和所有数据。在阿里云上,最安全的做法是专门为测试创建一个新的、按量付费的云盘。

重要提示:建议创建一个与生产环境同规格的ECS实例,并挂载一块全新的、未格式化的测试云盘。测试完成后,如果不需要保留数据,直接释放云盘和实例即可,成本可控。如果测试盘需要保留用于其他用途,务必在测试后重新初始化,因为FIO的裸盘测试会破坏磁盘上的任何现有结构。

识别待测试磁盘设备是第一步。通过SSH连接到你的ECS实例后,运行以下命令:

sudo fdisk -lu

你会看到类似这样的输出:

Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors

这里/dev/vda通常是系统盘,而/dev/vdb可能就是你要测试的数据盘。为了确认该磁盘是否已有分区或文件系统(这很危险),使用:

sudo blkid

如果目标磁盘(如/dev/vdb)没有任何输出,说明它是“干净”的裸设备,适合测试。如果显示了文件系统类型(如/dev/vdb1: UUID="..." TYPE="ext4"),那么千万不要直接测试这个设备。

1.2 安装FIO与依赖库

在Alibaba Cloud Linux、CentOS或RHEL系列系统上,安装非常简单:

sudo yum install libaio libaio-devel fio -y

在Ubuntu或Debian系统上:

sudo apt-get update
sudo apt-get install libaio1 libaio-dev fio -y

这里安装的libaio库至关重要。FIO支持多种I/O引擎,但在Linux下进行异步I/O测试时,libaio(Linux native asynchronous I/O)通常是性能最好、最接近真实应用场景的选择。它允许FIO一次性提交多个I/O请求,然后等待一批完成,减少了系统调用的开销,能更好地压满磁盘的队列深度。

1.3 理解测试目标与场景映射

开始测试前,必须明确你要回答什么问题。不同的应用场景对磁盘的诉求截然不同:

应用场景核心性能指标典型I/O模式FIO测试重点
OLTP数据库 (MySQL, PostgreSQL)随机读写IOPS、低延迟小块(4K-16K)随机读写rw=randread/randwrite, bs=4k/16k, 高iodepth
大数据分析 (Hadoop, Spark)高吞吐量 (MB/s)大块顺序读写rw=read/write, bs=128k-1M, 测试带宽
虚拟化/容器混合读写IOPS、延迟随机读写混合,块大小不一rw=randrw, rwmixread=70 (读70%, 写30%)
日志处理 (ELK)顺序写吞吐量追加写、顺序读rw=write, bs=64k-256k
Web静态资源随机读IOPS小文件随机读rw=randread, bs=4k-64k

例如,如果你要为一个MySQL数据库选择云盘,那么4K随机写的IOPS和clat(完成延迟)的99th percentile(P99延迟)将是你的核心关注点。而如果你在评估一个视频处理流水线的存储,那么顺序读写的吞吐量才是关键。

2. FIO核心参数深度解析与实战命令

FIO的强大之处在于其极其丰富的参数集,但这也让初学者望而生畏。下面我们拆解那些对测试结果影响最大的核心参数,并给出在阿里云ECS上的推荐配置。

2.1 I/O模式与块大小:模拟真实负载

rw(读写模式)和bs(块大小)共同定义了I/O负载的基本形态。在阿里云官方文档中,测试ESSD云盘性能时,通常使用以下组合:

  • 测试随机写IOPS:rw=randwrite, bs=4k
  • 测试随机读IOPS:rw=randread, bs=4k
  • 测试顺序写吞吐量:rw=write, bs=1024k (1MiB)
  • 测试顺序读吞吐量:rw=read, bs=1024k
  • 测试随机写延迟:rw=randwrite, bs=4k, iodepth=1
  • 测试随机读延迟:rw=randread, bs=4k, iodepth=1

这里有一个关键细节:为什么测试吞吐量要用1MiB的大块,而测试IOPS要用4K的小块? 这是因为IOPS(每秒I/O操作数)衡量的是磁盘处理小请求的能力,而吞吐量(MB/s)衡量的是传输大数据量的能力。云盘的性能规格表通常会分别列出这两个指标。

一个完整的随机写IOPS测试命令如下:

sudo fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio \
  -bs=4k -size=10G -numjobs=1 -runtime=300 \
  -group_reporting -filename=/dev/vdb -name=randwrite_iops_test

让我们逐一分析:

  • -direct=1:绕过操作系统缓存,直接对磁盘进行I/O。这是获得真实磁盘性能的关键,否则测试的可能只是内存速度。
  • -iodepth=128:I/O队列深度。对于高性能云盘(如ESSD PL2/PL3),提高队列深度有助于压出最大性能。但对于延迟测试,需要设置为1。
  • -size=10G:测试数据总量。应远大于实例内存(避免缓存影响),但也不宜过大,以免测试时间过长。通常为内存的2-3倍。
  • -runtime=300:测试运行时间(秒)。建议至少60秒,让性能曲线稳定。

2.2 队列深度与并发:挖掘磁盘潜力的关键

iodepth(I/O队列深度)和numjobs(并发作业数)是控制并发度的两个维度,但作用层面不同。

  • iodepth:单个线程/进程可以同时保持的未完成I/O请求数量。可以理解为“管道”的宽度。
  • numjobs:并行运行的线程或进程数。相当于同时有多个“管道”在工作。

总并发I/O数 = iodepth × numjobs。对于阿里云的高性能云盘,我通常这样设置:

云盘类型推荐 iodepth推荐 numjobs说明
ESSD PL032-644-8基础性能云盘,队列深度适中
ESSD PL164-1284-8均衡型,可承受较高队列深度
ESSD PL2/PL3128-2568-16高性能型,需要高并发才能发挥潜力
本地SSD32-64根据vCPU数调整本地盘延迟低,但队列深度能力因型号而异

重要发现:在测试ESSD PL3云盘时,我发现当iodepth从64提升到128时,IOPS有显著增长(约30%),但继续提升到256时收益甚微,而延迟却明显增加。这提示我们,找到性能曲线的“拐点”很重要——在延迟可接受的范围内,追求最大吞吐。

你可以通过一个简单的脚本进行队列深度扫描:

for depth in 1 2 4 8 16 32 64 128 256; do
  echo "Testing with iodepth=$depth"
  sudo fio -direct=1 -iodepth=$depth -rw=randwrite -ioengine=libaio \
    -bs=4k -size=5G -numjobs=1 -runtime=60 \
    -group_reporting -filename=/dev/vdb -name=test_depth_$depth \
    --output=result_depth_$depth.log
done

然后分析每个深度下的IOPS和延迟(特别是P99延迟),找到最佳平衡点。

2.3 测试文件与设备选择:裸盘 vs. 文件系统

filename参数决定了测试对象。在阿里云ECS上,你有两种选择:

  1. 裸设备测试:-filename=/dev/vdb

    • 优点:完全绕过文件系统,测试纯粹的块设备性能,结果最“干净”,最能反映云盘底层能力。
    • 缺点:会破坏设备上所有数据,风险高。
    • 适用场景:性能基准测试、规格验证。
  2. 文件系统测试:-filename=/mnt/testfile

    • 优点:测试结果包含了文件系统(如ext4、xfs)的开销,更接近真实应用场景。
    • 缺点:受文件系统配置、日志、元数据操作影响。
    • 适用场景:评估特定文件系统下的实际性能。

经验之谈:我建议分两步走。首先进行裸盘测试,获取磁盘的理论性能上限。然后在格式化后的文件系统上再测试一次,了解文件系统带来的性能损耗。对于EXT4文件系统,通常会有5-15%的性能损失,具体取决于mkfs参数和挂载选项。

如果你选择文件系统测试,创建测试文件的命令如下:

# 创建测试目录
sudo mkdir -p /mnt/fiotest
# 创建一个10GB的测试文件(预分配空间,避免动态扩展影响)
sudo fallocate -l 10G /mnt/fiotest/testfile
# 或者使用dd(较慢但更通用)
# sudo dd if=/dev/zero of=/mnt/fiotest/testfile bs=1M count=10240

然后在FIO命令中使用-filename=/mnt/fiotest/testfile。

3. 阿里云特定场景:云盘 vs. 本地盘的测试差异

阿里云提供了多种存储选项,主要分为云盘(网络附加存储)和本地盘(直接附加存储)。这两者在架构、性能特性和测试方法上都有显著区别。

3.1 云盘测试的特别注意事项

云盘(ESSD、SSD、高效云盘)是通过网络访问的分布式存储。这意味着:

  1. 网络因素:虽然云盘与ECS实例之间的网络是内网且高带宽,但网络延迟仍然存在。测试时,确保实例与云盘在同一可用区,这是性能的基本保证。

  2. 性能突发:部分云盘规格(如ESSD AutoPL)支持性能突发。测试时,需要区分“基准性能”和“突发性能”。建议测试时间足够长(如10-15分钟),观察性能是否稳定。

  3. 多挂载点测试:如果你计划将同一块云盘挂载到多个实例(共享块存储),那么测试时也应该模拟这种场景。虽然FIO本身不支持多主机并发测试,但你可以在单个实例上使用多个numjobs来模拟多路访问的竞争。

下面是一个针对ESSD云盘的完整测试套件,我经常用它来全面评估一块云盘:

#!/bin/bash
DEVICE="/dev/vdb"
OUTPUT_DIR="./fio_results"
mkdir -p $OUTPUT_DIR

# 1. 随机写IOPS (4K, 高队列深度)
echo "Running random write IOPS test..."
sudo fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio \
  -bs=4k -size=20G -numjobs=4 -runtime=300 \
  -group_reporting -filename=$DEVICE -name=essd_randwrite_iops \
  --output=$OUTPUT_DIR/randwrite_iops.log

# 2. 随机读IOPS (4K, 高队列深度)
echo "Running random read IOPS test..."
sudo fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio \
  -bs=4k -size=20G -numjobs=4 -runtime=300 \
  -group_reporting -filename=$DEVICE -name=essd_randread_iops \
  --output=$OUTPUT_DIR/randread_iops.log

# 3. 顺序写吞吐量 (1M块)
echo "Running sequential write throughput test..."
sudo fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio \
  -bs=1024k -size=50G -numjobs=1 -runtime=300 \
  -group_reporting -filename=$DEVICE -name=essd_seq_write_throughput \
  --output=$OUTPUT_DIR/seq_write_throughput.log

# 4. 顺序读吞吐量 (1M块)
echo "Running sequential read throughput test..."
sudo fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio \
  -bs=1024k -size=50G -numjobs=1 -runtime=300 \
  -group_reporting -filename=$DEVICE -name=essd_seq_read_throughput \
  --output=$OUTPUT_DIR/seq_read_throughput.log

# 5. 延迟测试 (队列深度为1)
echo "Running latency test..."
sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio \
  -bs=4k -size=5G -numjobs=1 -runtime=120 \
  -group_reporting -filename=$DEVICE -name=essd_latency_test \
  --output=$OUTPUT_DIR/latency.log

3.2 本地盘测试的独特考量

本地盘(如NVMe SSD本地盘)直接物理连接在宿主机上,延迟极低,但数据可靠性由单机保障,且不能单独扩容。测试本地盘时:

  1. 更高的队列深度需求:本地NVMe SSD通常能支持极高的队列深度。在阿里云官方示例中,本地盘测试使用的iodepth往往比云盘更高(如256甚至512)。

  2. 多job并发:为了充分压满本地盘,需要更多的并发作业。官方示例中常用numjobs=4或更高。

  3. 注意实例规格限制:本地盘的性能也受限于实例规格的CPU和内存资源。确保测试实例有足够的vCPU来处理高并发I/O。

本地盘随机写IOPS测试示例(来自阿里云文档):

sudo fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio \
  -bs=4k -numjobs=4 -time_based -runtime=1000 \
  -group_reporting -filename=/dev/vdb -name=local_nvme_test

注意这里的-time_based参数:它告诉FIO运行指定的时间(runtime=1000秒),而不是写完固定大小的数据就停止。这对于性能稳定的长期测试很有用。

3.3 性能指标解读:如何从输出中提取关键信息

FIO的输出信息丰富但繁杂。运行测试后,你需要关注以下几个关键部分:

IOPS和带宽:

read: IOPS=68.8k, BW=269MiB/s (282MB/s)
write: IOPS=45.2k, BW=177MiB/s (185MB/s)
  • IOPS:每秒I/O操作数,随机读写测试的核心指标。
  • BW:带宽(吞吐量),顺序读写测试的核心指标。

延迟分布(这是评估稳定性的关键):

clat percentiles (usec):
 |  1.00th=[   98],  5.00th=[  110], 10.00th=[  118], 20.00th=[  128],
 | 30.00th=[  136], 40.00th=[  144], 50.00th=[  152], 60.00th=[  160],
 | 70.00th=[  170], 80.00th=[  184], 90.00th=[  210], 95.00th=[  238],
 | 99.00th=[  318], 99.50th=[  382], 99.90th=[  606], 99.95th=[  750],
 | 99.99th=[ 1184]
  • clat:完成延迟,从I/O提交到完成的时间。
  • P99(99.00th):99%的I/O请求在这个延迟内完成。这是服务等级协议(SLA)中常用的指标。
  • P99.9(99.90th):99.9%的I/O请求的延迟,反映尾部延迟。
  • 一个健康的延迟分布应该是:P50与P99的差距不大(如2-3倍),且P99.9没有异常尖峰。

磁盘利用率:

Disk stats (read/write):
  vdb: ios=3445678/2263456, merge=0/12, ticks=4123456/1234567, 
       in_queue=5358023, util=99.87%
  • util:磁盘利用率。在性能测试中,我们通常希望看到接近100%的利用率,这表明测试充分压满了磁盘。
  • 如果util很低但IOPS/带宽也不高,可能是iodepth或numjobs设置不足,或者实例规格(特别是CPU)成为瓶颈。

我习惯用一个简单的Python脚本解析FIO的JSON输出,提取关键指标并生成对比表格:

import json
import glob

results = []
for log_file in glob.glob("fio_results/*.json"):
    with open(log_file, 'r') as f:
        data = json.load(f)
    
    job = data['jobs'][0]
    test_name = data['global options'].get('name', 'unknown')
    
    results.append({
        'test': test_name,
        'read_iops': job['read']['iops'] if 'read' in job else 0,
        'write_iops': job['write']['iops'] if 'write' in job else 0,
        'read_bw_mb': job['read']['bw'] / 1024 if 'read' in job else 0,  # KiB to MiB
        'write_bw_mb': job['write']['bw'] / 1024 if 'write' in job else 0,
        'read_lat_p99_us': job['read']['clat_ns']['percentile']['99.000000'] / 1000 if 'read' in job else 0,
        'write_lat_p99_us': job['write']['clat_ns']['percentile']['99.000000'] / 1000 if 'write' in job else 0,
    })

# 输出为Markdown表格
print("| Test Name | Read IOPS | Write IOPS | Read BW (MiB/s) | Write BW (MiB/s) | Read P99 Lat (us) | Write P99 Lat (us) |")
print("|-----------|-----------|------------|-----------------|------------------|-------------------|--------------------|")
for r in results:
    print(f"| {r['test']} | {r['read_iops']:.0f} | {r['write_iops']:.0f} | {r['read_bw_mb']:.1f} | {r['write_bw_mb']:.1f} | {r['read_lat_p99_us']:.1f} | {r['write_lat_p99_us']:.1f} |")

4. 高级技巧与常见问题排查

掌握了基础测试方法后,让我们深入一些高级场景和实际工作中经常遇到的问题。

4.1 混合读写测试:模拟真实数据库负载

大多数生产负载都不是纯粹的读或写,而是混合操作。FIO的rw=randrw参数可以模拟这种场景,并通过rwmixread和rwmixwrite控制读写比例。

模拟一个典型的数据库负载(70%读,30%写,4K随机):

sudo fio -direct=1 -iodepth=32 -rw=randrw -rwmixread=70 -rwmixwrite=30 \
  -ioengine=libaio -bs=4k -size=30G -numjobs=8 -runtime=600 \
  -group_reporting -filename=/dev/vdb -name=mixed_70_30_test \
  --output=mixed_test.log

这里有几个要点:

  1. 测试时间要足够长:混合负载测试建议至少运行10分钟(-runtime=600),让缓存效应稳定,获得更准确的平均性能。
  2. 观察读写比例是否达标:检查输出中的read和write部分,确认实际比例接近70/30。
  3. 注意资源竞争:混合负载下,读操作可能会从缓存中受益,而写操作需要落盘,两者相互影响。

4.2 避免测试陷阱:那些年我踩过的坑

陷阱一:操作系统缓存导致的虚高性能

这是最常见的问题。如果没有设置-direct=1,或者测试数据量小于内存,那么测试的可能只是内存速度,而不是磁盘真实性能。解决方案:始终使用-direct=1,并确保-size参数远大于可用内存(至少2倍)。

陷阱二:测试时间太短,性能未稳定

云盘(特别是支持突发的类型)在测试初期可能有较高的性能,随后逐渐下降到基准水平。解决方案:使用-time_based -runtime=300确保测试运行固定时间(如5分钟),而不是固定数据量。

陷阱三:CPU成为瓶颈

当numjobs设置过高时,FIO本身可能消耗大量CPU,导致无法压满磁盘。解决方案:监控测试期间的CPU使用率(top或htop)。如果CPU接近100%,而磁盘利用率不高,尝试减少numjobs或使用更高效的ioengine(如libaio vs sync)。

陷阱四:测试文件碎片化影响

在文件系统上测试时,如果测试文件碎片化严重,性能会下降。解决方案:每次测试前创建新的测试文件,或使用fallocate预分配连续空间。

4.3 性能优化建议:基于测试结果的调优

根据FIO测试结果,你可以针对性地优化ECS实例和云盘配置:

  1. 如果随机读写IOPS低于预期:

    • 检查云盘是否已经挂载并格式化为文件系统。裸盘测试性能最高。
    • 增加iodepth和numjobs,但注意监控CPU使用率。
    • 确认实例规格是否足够。计算密集型实例(如c7、g7)通常有更好的CPU性能来处理高并发I/O。
  2. 如果延迟(特别是P99)过高:

    • 降低iodepth。高队列深度会增加平均延迟。
    • 考虑升级到更高性能等级的云盘(如从ESSD PL1升级到PL2)。
    • 对于数据库等延迟敏感型应用,ESSD PL3的亚毫秒级延迟可能是更好的选择。
  3. 如果吞吐量不达标:

    • 检查实例的内网带宽。某些低配实例的内网带宽可能限制云盘性能。
    • 确保使用足够大的bs(如1M)进行顺序读写测试。
    • 对于需要高吞吐的场景,考虑使用多块云盘组建RAID 0(但需注意数据可靠性风险)。

4.4 自动化测试与监控

在生产环境中,定期进行性能基准测试是很有价值的。你可以创建一个自动化脚本,定期测试并记录性能趋势:

#!/bin/bash
# auto_fio_test.sh - 自动化FIO测试与报告

TEST_DEVICE="/dev/vdb"
LOG_DIR="/var/log/fio_tests"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="$LOG_DIR/fio_test_$DATE.log"
JSON_OUTPUT="$LOG_DIR/fio_test_$DATE.json"

# 创建日志目录
mkdir -p $LOG_DIR

# 基础系统信息
echo "=== System Info ===" > $LOG_FILE
uname -a >> $LOG_FILE
echo "" >> $LOG_FILE

echo "=== Disk Info ===" >> $LOG_FILE
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE >> $LOG_FILE
echo "" >> $LOG_FILE

# 运行关键测试
TESTS=(
  "randread_iops:--rw=randread --bs=4k --iodepth=128 --numjobs=4"
  "randwrite_iops:--rw=randwrite --bs=4k --iodepth=128 --numjobs=4"
  "seqread_bw:--rw=read --bs=1024k --iodepth=64 --numjobs=1"
  "seqwrite_bw:--rw=write --bs=1024k --iodepth=64 --numjobs=1"
)

for test_config in "${TESTS[@]}"; do
  IFS=':' read -r test_name test_params <<< "$test_config"
  echo "Running $test_name..." | tee -a $LOG_FILE
  
  sudo fio --name=$test_name --filename=$TEST_DEVICE \
    --direct=1 --ioengine=libaio --size=20G --runtime=120 \
    --time_based --group_reporting --output-format=json \
    $test_params >> $JSON_OUTPUT 2>&1
  
  # 提取关键指标
  if [ -f $JSON_OUTPUT ]; then
    # 使用jq解析JSON,这里简化处理
    echo "  Completed" >> $LOG_FILE
  fi
done

echo "Test completed at $(date)" >> $LOG_FILE
echo "Detailed results in: $JSON_OUTPUT" >> $LOG_FILE

# 可选:发送报告到监控系统或生成图表
# python3 /path/to/analyze_fio.py $JSON_OUTPUT

这个脚本可以配置为cron作业,每周运行一次,帮助你跟踪存储性能的变化,及时发现潜在的性能退化。

4.5 与阿里云监控数据对比

阿里云控制台提供了云盘的监控指标,包括IOPS、吞吐量和延迟。将FIO测试结果与云监控数据对比,可以验证测试的准确性,并了解云盘在真实负载下的表现。

在测试期间,打开阿里云控制台,进入云服务器ECS > 实例详情 > 云盘监控,观察以下指标:

  • 磁盘读IOPS、磁盘写IOPS
  • 磁盘读BPS、磁盘写BPS(吞吐量)
  • 磁盘读等待时间、磁盘写等待时间

理想情况下,FIO测试的峰值应该接近云盘规格的上限,而监控数据反映的是实际工作负载。如果发现监控数据远低于FIO测试结果,可能意味着应用没有充分利用磁盘能力,或者I/O模式不够优化。

通过本文介绍的方法,你应该能够在阿里云ECS上获得准确、可靠的磁盘性能数据。记住,FIO测试不是一次性的任务,而应该成为容量规划、性能调优和故障排查的标准工具。在实际项目中,我经常使用这些技术来验证云盘是否达到承诺的规格,为关键应用选择最合适的存储类型,以及在性能问题出现时快速定位瓶颈所在。

Ubuntu安装方案全解析:虚拟机、服务器与双系统对比 虚拟化技术通过创建隔离的虚拟环境实现多系统并行运行,其核心原理是利用虚拟机监控程序(Hypervisor)抽象硬件资源。在开发环境中,虚拟机方案如VMware和VirtualBox提供了安全沙箱和快照功能,特别适合Linux学习与跨平台开发。服务器部署则依托云计算基础设施,通过SSH远程访问实现弹性资源分配,是持续集成和分布式应用的理想选择。双系统安装直接在物理硬件上运行Ubuntu,可获得原生性能,但需处理引导加载和驱动兼容性问题。根据实测数据,双系统在编译速度和GPU计算上比虚拟机快40%以上,而云服务 阅读详情

相关推荐

Gogs vs Gitea 对比评测:2款自托管 Git 服务在 4 个维度的实测分析

本文对两款自托管Git服务Gogs和Gitea进行了深度评测,从资源占用、功能完备性、社区生态和部署体验四个维度展开分析。实测数据显示,Gogs在低配置环境下表现更优,而Gitea则在高并发和功能扩展性上更具优势。文章为技术决策者提供了详细的选型建议,帮助团队根据实际需求选择最适合的自托管Git解决方案。

weixin_28842269的博客 402

阿里云ECS大测评【免费领阿里云套餐~】

送福利!阿里云热门产品免费领(含ECS),点击进入:https://click.aliyun.com/m/1000370359/

指剑 2721

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 411

【五一专属】阿里云ECS大测评#五一专属|向所有热爱分享的“技术劳动者”致敬#

本篇博客参与阿里云 ECS实例测评,这里采用阿里的C5.large计算型实例 本次对云服务器ECS产品能力的体验和建议,可帮助其他用户选用云服务,使用云服务器ECS创建应用场景测评 首先对实例的硬件(CPU,内存,磁盘)进行测试,采用对比对象为AWS的C5,C5a同等大小实例进行对比,在本篇的“目录二,目录三”可以看到。 其次"使用云服务器ECS创建应用场景测评,基于阿里云ECS c5.large搭建云上博客,论坛,家庭云,Gitlab协同办公",这里根据一般用户的常见使用场景,进行了基于阿里云 ECS c

指剑 8756

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。

汇川H5U搭配步进伺服电机使用CANopen通讯控制电机案例

摘要:本文介绍了基于汇川H5U PLC和STM4260B-CANopen-M步进伺服电机的控制系统搭建流程。主要内容包括:硬件准备(PLC、伺服电机、24V电源)、电机参数默认设置(地址1号、1M波特率)、使用AutoShop软件编写程序(配置CANopen参数、导入电机描述文件、设置PDO参数)以及功能块编程(使能控制、速度控制、绝对位置控制等)。通过查阅通讯手册完成各功能块参数配置,最终在主程序中调用功能块实现控制系统开发。该方案适用于需要精确运动控制的工业自动化场景。

m0_46512607的博客 1596

阿里云FIO测试块存储性能

返回结果磁盘Start可以被8整除则代表4 KiB对齐。否则,请完成4 KiB对齐后再继续性能测试。注意:fio测试会破坏文件系统结构,请在测试前提前创建快照做好数据备份。本文主要针对阿里云k8s产品的worker节点内的云盘进行fio压测。1.检查块存储设备是否已经4 KiB对齐。磁盘大小:500G,高性能云盘。2.安装libaio和FIO。规格:64C128G。

weixin_68380763的博客 1115

一文讲透什么是ADC/DAC中的DDC、DUC、采样率以及数据率等概念

摘要:ADC/DAC中的采样率与数据率概念不同,采样率是转换器的时钟速率,而数据率是数字输出的实际速率。抽取通过滤波降低数据速率,提升信噪比但牺牲带宽;内插则通过插零和滤波提高采样率,将镜像信号移远但增加延迟和功耗。JESD204B标准的高速转换器需平衡通道数与串行速率,内插/抽取技术是关键。文章还解析了DDC、DUC的应用及优缺点,为高速数据转换设计提供参考。(150字)

weixin_49761275的博客 4273

阿里云、腾讯云、百度云的测评哪一个更好用

云服务器是所有云计算服务商提供的最基础产品,国内云服务器就属BAT(阿里云、腾讯云、百度云)三家企业了,其实厂商一般会根据分配的资源划分云服务器的级别和规格。但是由于采用的基础硬件、架构和调优技术存在差别,类似配置的云服务器之间也可能有较大的性能差异。很多用户在选购时往往不知道该选择哪个品牌;如果想了解并比较不同厂商云服务器的差异,最好的方式就是运行基准测试。下面就带给大家BAT(阿里云、腾讯云、百度云)云服务器性能评测,希望能为大家选型带来一点思路。 性能测试准备   在开始测试之前,我们先在三家创建

m0_64068722的博客 2986

ASF-YOLO:一种基于注意尺度序列融合的细胞实例分割YOLO模型

随着样本制备技术和显微成像技术的快速发展,细胞图像的定量处理和分析在医学、细胞生物学等领域发挥着重要作用。基于卷积神经网络(CNN),可以通过神经网络训练学习不同细胞图像的特征信息,具有很强的泛化性能。两阶段的R-CNN系列[1,2,3]及其一阶段变体[4,5]是实例分割任务的经典CNN基础框架。在最近的研究中,You Only Look Once(YOLO)系列[6,7,8,9]已经成为实时实例分割中速度最快、最准确的模型之一。

m0_47867638的博客 9807

Calibre PEX提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文深入解析Calibre PEX工具中hcell与xcell文件的协同工作机制,提供模块级寄生参数提取方案。通过实战案例和避坑指南,帮助工程师精准屏蔽已验证IP模块,提升仿真效率和数据一致性,适用于65nm以下工艺节点的复杂SoC设计。

weixin_29275257的博客 629

ECS云服务器性能基准测试实战:从工具选型到结果分析

在云计算领域,性能基准测试是评估和选择云服务器(ECS)规格的核心技术手段。其原理在于通过标准化的测试工具和方法,量化计算、内存、存储和网络等基础设施组件的性能表现,从而为技术决策提供客观数据支撑。这项技术的核心价值在于帮助工程师摆脱对厂商宣传数据的单一依赖,通过可复现的实测,精准评估实例的“真实性能”,实现成本与性能的最优平衡。典型的应用场景包括:为CPU密集型应用(如视频转码)筛选计算优化型实例,为内存数据库评估内存带宽与延迟,或在不同云厂商间进行性价比横向对比。本文将聚焦于**ECS C基准测试项目*

weixin_30735745的博客 482

PaddleOCR实战:从零开始训练自己的OCR模型(附完整代码与数据集处理技巧)

本文提供了一份详尽的PaddleOCR实战指南,手把手教你从零开始训练专属的OCR模型。内容涵盖高质量训练数据的准备与标注技巧、预训练模型的选型对比、关键参数调优策略,并附有完整的代码示例。通过遵循本文的步骤,开发者可以高效构建并优化贴合自身业务场景的高精度OCR模型,实现从数据到部署的全流程掌握。

weixin_29263201的博客 571

云服务器评测--BAT(阿里云、腾讯云、百度云)云服务器哪家强?

云服务器是所有云计算服务商提供的最基础产品,国内云服务器就属BAT(阿里云、腾讯云、百度云)三家企业了,其实厂商一般会根据分配的资源划分云服务器的级别和规格。但是由于采用的基础硬件、架构和调优技术存在差别,类似配置的云服务器之间也可能有较大的性能差异。很多用户在选购时往往不知道该选择哪个品牌;如果想了解并比较不同厂商云服务器的差异,最好的方式就是运行基准测试。下面就带给大家BAT(阿里云、腾讯云、

fjqabc的博客 3万+

Matlab_Marr小波尺度变换图

多尺度的连续小波变换分解后时间尺度图 墨西哥Marr小波函数: %delta 小波变换尺度 %N     小波函数的长度 %s     原始信号 %g     原始信号某个尺度下的小波变化系数 function g=Singularity_Detection(delta,N,s); %保持信号长度 n=length(s); % 构造墨西哥小帽小波函数 for index_x=1

桔色小西瓜 6602

数字图像处理 基于matlab、opencv计算图像的梯度方向和梯度幅值

图像可以被视为标量场(即二维函数)。通过微分将标量场转换为矢量场。梯度是一个向量,描述了在x或y方向上移动时,图像变化的速度。我们使用导数来回答这样的问题,图像梯度的大小告诉图像变化的速度,而梯度的方向告诉图像变化最快的方向。因为梯度有方向和大小,所以将这些信息编码为向量是很自然的。该向量的长度提供了梯度的大小,而其方向提供了梯度方向。因为梯度在每个位置可能不同,所以我们在每个图像位置用不同的向量来表示它。

学以致用 知行合一 3203

云服务器哪家好?云服务器评测对比

云服务器是所有云计算服务商提供的最基础产品,国内云服务器就属BAT(阿里云、腾讯云、百度云)三家企业了,其实厂商一般会根据分配的资源划分云服务器的级别和规格。但是由于采用的基础硬件、架构和调优技术存在差别,类似配置的云服务器之间也可能有较大的性能差异。很多用户在选购时往往不知道该选择哪个品牌;如果想了解并比较不同厂商云服务器的差异,最好的方式就是运行基准测试。下面就带给大家BAT(阿里云、腾讯云、...

系统点赞了我的博客 1787

MOSFET雪崩特性参数解析

但是,一些电源在输出短路时,初级中会产生较大的电流,加上初级电感,器件就会有雪崩损坏的可能,因此在这样的应用条件下,就要考虑器件的雪崩能量。对于那些在MOSFET的D和S极产生较大电压的尖峰应用,就要考虑器件的雪崩能量,电压的尖峰所集中的能量主要由电感和电流所决定,因此对于反激的应用,MOSFET关断时会产生较大的电压尖峰。雪崩击穿能量标定了器件可以容忍的瞬时过冲电压的安全值,其依赖于雪崩击穿需要消散的能量。EAS单脉冲雪崩击穿能量, EAS标定了器件可以安全吸收反向雪崩击穿能量的高低。

Airer_00的博客 811

2026年主流云服务器横评:阿里云/腾讯云/华为云实测对比

本文对比测试了阿里云、腾讯云、华为云等主流云厂商的入门级2核4G云服务器。测试显示CPU性能差异在5%以内,磁盘IO和网络延迟表现接近。价格上新用户首年750-820元,续费1100-1300元。选型建议:个人开发者任选即可,中小企业关注价格和售后,大规模系统优选阿里/腾讯云,政企项目考虑华为云。核心考量因素包括价格、生态配套、售后服务和地域节点,入门级配置性能差异不大,建议根据实际需求选择。

2602_96657974的博客 935

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

云盘参数和性能测试方法

云服务器 ECS 的云盘既可以单独使用、又可以组合使用,以满足不同应用场景的需求。阅读本章后,您可以根据自己要求,选择使用合适的数据存储选项。 云盘为 ECS 实例提供数据块级别的云盘,采用三副本的分布式机制,为 ECS 实例提供 99.9999999% 的数据可靠性保证。根据性能的不同,云盘又可以分为普通云盘、高效云盘和 SSD 云盘等类型。 ...

weixin_34220623的博客 1126

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

新买的云服务器数据盘用不了?CentOS 7.6 挂载 /dev/vdb 硬盘保姆级避坑指南

本文详细介绍了在CentOS 7.6云服务器上如何正确挂载/dev/vdb数据盘的全流程,包括磁盘分区、文件系统创建、挂载点设置以及持久化配置。通过实战步骤和原理剖析,帮助开发者避免常见错误,提升存储管理效率,特别适合阿里云、腾讯云等ECS实例用户参考。

weixin_30847939的博客 302

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【阿里云云计算工程师 ACP 认证】02、弹性块存储 EBS

块存储介绍

GG Bond 的博客 1157

FastCFS在eRDMA与传统网络环境下对比测试分享

FastCFS在eRDMA与传统网络环境下对比测试分享

Huazie 419

Linux Swap 分区 vs Swap 文件:3 种创建方案性能与适用场景对比

本文深入对比了Linux系统中Swap分区与Swap文件的三种创建方案,包括传统分区、dd创建文件和fallocate创建文件,分析了它们在性能、适用场景和动态调整方面的差异。通过实测数据揭示分区方案在I/O吞吐量上的优势,以及fallocate方案在云服务器中的快速部署价值,为系统管理员提供全面的Swap配置指南。

axfcjwkbi259888707的博客 360

Docker 24.0 存储路径迁移:3种方法对比与 daemon.json 配置详解

本文详细介绍了Docker 24.0存储路径迁移的三种方法,重点解析了通过修改daemon.json配置文件实现存储路径变更的最佳实践。针对生产环境中常见的系统盘空间不足问题,提供了从准备工作到迁移验证的完整解决方案,帮助用户优化Docker存储管理并提升I/O性能。

aiqixiao2017的博客 324
上一篇: 从韦恩图到热图:用Glimma让你的RNA-seq分析报告动起来(附完整R脚本)
下一篇: 游戏开发必备:Unity中三维旋转的5种实现方式对比(含罗德里格公式)
sql99
博客等级 码龄19年 168粉丝 1905原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值