机器调优-读写性能

以下脚本后复制,直接执行,可以对比多台机器的性能

#!/bin/bash

#sh 作为脚本解释器

echo "=== System Info ==="

打印分隔标题,便于阅读输出

uname -r

显示当前 Linux 内核版本(用于判断是否因内核差异导致行为不同)

free | head -2

显示内存使用情况(-h 表示人类可读格式),只取前两行(总内存和已用/空闲概览)

df -T .

显示当前目录所在文件系统的类型(如 ext4、xfs)和挂载信息,

用于确认是否为本地磁盘及文件系统类型

echo -e "\n=== Dirty Page Settings ==="

打印脏页(dirty page)相关内核参数标题

-e 允许解释转义字符(如 \n 换行)

sysctl vm.dirty_ratio vm.dirty_background_ratio vm.dirty_expire_centisecs vm.dirty_writeback_centisecs

查询影响 Page Cache 写回行为的关键内核参数:

- dirty_ratio: 脏页占总内存比例上限(超过则阻塞写入)

- dirty_background_ratio: 后台开始刷盘的阈值

- dirty_expire_centisecs: 脏页最大存活时间(单位:厘秒,3000 = 30秒)

- dirty_writeback_centisecs: 后台刷盘线程唤醒间隔(500 = 5秒)

这些参数是"非 direct I/O 性能差异"的最常见原因

echo -e "\n=== Test without direct (with sync) ==="

测试普通写入(走 Page Cache)并强制同步到磁盘

time sh -c "dd if=/dev/zero of=testfile bs=1024 count=10000 2>/dev/null; sync"

- dd 生成 10,000 × 1024 = 10MB 的零文件,写入当前目录

- 2>/dev/null 屏蔽 dd 的统计输出,只保留 time 的耗时

- sync 确保所有缓存数据真正落盘,测量完整写入+刷盘时间

- time 测量整个命令(dd + sync)的执行耗时

rm -f testfile

强制删除刚创建的 testfile,避免残留(-f 表示不提示、忽略不存在)

echo -e "\n=== Test with direct ==="

测试 Direct I/O(绕过 Page Cache,直接写磁盘)

time dd if=/dev/zero of=testfile bs=1024 count=10000 oflag=direct 2>/dev/null

- oflag=direct:启用 Direct I/O,绕过操作系统缓存

- 此模式反映真实磁盘吞吐能力

- 同样屏蔽 dd 输出,仅保留 time 耗时

rm -f testfile

再次删除 testfile,确保无残留

相关推荐
迪康Defender4 天前
终端供应链安全:应用白名单与软件正版化检测落地|终端安全治理实践
运维·服务器·网络·安全·web安全·自动化·运维开发
天空依然蔚蓝10 天前
分享一个自动检测网站在线状态的python程序
python·运维开发·1024程序员节
迪康Defender11 天前
PHP 高危漏洞应急分析:从风险原理到端点侧纵深防护
运维·开发语言·安全·自动化·php·运维开发·远程工作
ZENERGY-众壹16 天前
光伏监控平台实测,三款时序数据库在 50 万测点下的真实表现
数据库·架构·运维开发·时序数据库·光伏运维
曹牧17 天前
在Win7上找回SVN密码
运维开发
迪康Defender22 天前
终端安全运维:浅谈迪康端点安全一体化管理系统工具箱实用能力
运维·安全·信息可视化·自动化·运维开发·学习方法·远程工作
迪康Defender25 天前
终端安全行为分析:审计日志如何转化为业务报表?落地实践与避坑指南
运维·经验分享·安全·信息可视化·自动化·安全威胁分析·运维开发
迪康Defender1 个月前
终端安全审批体系设计:如何平衡安全管控与业务连续性
运维·服务器·安全·运维开发·学习方法·业界资讯·远程工作
rememberme0011 个月前
Windows Server 服务器监控部署文档(Prometheus + Grafana)
运维开发·数据可视化
daxiangxm1 个月前
GEO策略:让AI直接引用你的内容
开发语言·团队开发·运维开发·个人开发·数据库开发