使用PHP脚本测试硬盘写入速度指南

月亮慢半拍
月亮慢半拍
发布时间:2026-10-14| 5人浏览过
原创

本文介绍如何使用PHP编写简单的脚本,通过创建大文件来实测服务器的硬盘写入速度。该脚本将生成约1GB的数据块并持续写入到指定文件中,最终输出总耗时及平均每秒字节数,帮助用户直观了解磁盘IO性能。

结果或目标

我们需要得到一个准确的数值,反映当前环境(物理磁盘或虚拟存储)在连续写入场景下的最大吞吐量。通常单位为 byte/s 或 MB/s。这种方法简单粗暴但有效,能快速暴露IO瓶颈。

准备条件

  • 已配置好的 PHP 运行环境(CLI模式最佳,Web模式需注意超时限制)。

  • 足够大的可用磁盘空间,至少预留 1.5GB 以上空间(防止临时文件堆积导致报错)。

  • 对目录具有读写权限。

第1步:编写测速脚本

首先创建一个 PHP 文件,例如 test_write_speed.php。脚本的核心逻辑是先生成一个固定的字符串块,然后通过循环不断将其追加到一个临时文件中。

  1. 设置入口与限制:调用 set_time_limit(0) 解除脚本执行时间的限制,防止因写入大文件而触发超时错误。

  2. 生成数据块:使用 str_pad 函数构造一个包含特定长度(如512字节)的字符串。在实际运行中,这行代码原稿存在变量未定义的错误,修正后应确保 $str 有初始值。建议修改为:$str = str_repeat('0', 512); 以保证语法正确性。

  3. 初始化文件指针:使用 fopen('./temp', 'a+') 打开或创建名为 temp 的文件,用于接收写入的数据。

  4. 确定写入量:设定目标写入字节数 $bytes = 1000000000;(即1GB)。注意这里使用的是十进制基数(10亿字节),若需精确千兆单位可调整为 1024*1024*1024。

  5. 执行写入循环:这是核心步骤。记录开始时间后,进入 while 循环。每次循环使用 fwrite 将数据块写入文件,累加已写入的字节数,直到达到设定的总量。

具体代码实现

以下是经过逻辑梳理后的完整代码片段。请注意,原代码中的 $str 缺少初始化,此处已补充默认行为以确保代码可直接运行:

<?php
// 解除脚本运行时间限制
set_time_limit(0);

// 初始化一个512字节的字符串用于填充
$str = str_pad("", 512, "0");
if (empty($str)) $str = str_repeat("0", 512); // 兜底处理

// 打开或创建目标文件
$file = fopen("./test_disk_io.tmp", "a+");
if (!$file) {
    die("无法打开文件进行写入\n");
}

$i = 0;
$target_bytes = 1000000000; // 目标写入字节数: 1GB

// 格式化常量以便后续计算展示
$total_mega = $target_bytes / 1000000;

echo "Test Start. Writing 1GB...\n";
$starttime = time();

// 循环写入
while ($i < $target_bytes) {
    $written = fwrite($file, $str);
    if ($written === false) {
        echo "写入错误,停止\n";
        break;
    }
    $i += $written;
}

// 计算时间与速度
$endtime = time();
$usetime = $endtime - $starttime;

// 避免除以零
if ($usetime > 0) {
    $speed_byte = $target_bytes / $usetime;
    $speed_mb = $total_mega / $usetime;

    echo "Create file took {$usetime} seconds.\n";
    echo "Speed: {$speed_byte} byte/s\n";
    echo "Speed: {$speed_mb} M/s\n";
} else {
    echo "测试时间为0秒,可能未实际写入。\n";
}

// 关闭资源
fclose($file);
?>

完成判断与注意事项

当控制台输出类似 Create file took X seconds 的信息时,表示测试结束。生成的 test_disk_io.tmp 文件即为实际写入结果的验证。

  • 风险提醒:此脚本会消耗磁盘空间并产生大量I/O操作。请在非生产高峰期或拥有充足资源的测试机上运行。运行结束后,记得手动删除生成的 test_disk_io.tmp 文件以释放空间。

  • 参数调整:若想测试更小的IO能力,可将 $target_bytes 减小;若想更精准,可使用 microtime(true) 获取毫秒级耗时。

简要总结

通过简单的PHP文件写入操作,我们可以低成本地评估服务器的底层磁盘性能。这对于排查网站加载慢、数据库响应延迟等问题具有参考价值。以上就是使用PHP脚本测试硬盘写入速度的详细内容,更多关于磁盘IO性能优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。