如何提高CentOS分区读写速度
/var(日志)、/home(用户文件)、/data(数据库)),避免单个分区过大导致碎片增多。例如,数据库分区单独划分,减少其他分区IO对其的影响。noatime和nodiratime选项:noatime禁止记录文件访问时间,nodiratime禁止记录目录访问时间,减少对磁盘的写操作(默认情况下,每次读取文件都会更新atime,增加IO负载)。修改/etc/fstab文件,例如:/dev/sda1 /data xfs defaults,noatime,nodiratime 0 0
修改后执行mount -oremount /data使设置生效。mkfs.xfs -l logdev=/dev/sdb1 /dev/sda1 # 将日志写入单独设备
或修改现有文件系统日志大小(需卸载分区):xfs_admin -l -L /dev/sda1 # 查看日志大小
xfs_growfs -L 1G /dev/sda1 # 调整日志大小为1G
注意:日志模式调整需权衡数据安全性(如系统崩溃可能导致日志丢失)。noop(无队列逻辑,直接提交请求给SSD)或none(内核4.10+),因为SSD没有机械臂移动,无需调度。deadline(避免IO饥饿,适合数据库、高频写入场景)或bfq(适合桌面环境,注重响应时间)。cat /sys/block/sda/queue/scheduler(显示[noop] deadline anticipatory cfq,方括号内为当前调度器)。echo deadline > /sys/block/sda/queue/scheduler。/etc/default/grub,在GRUB_CMDLINE_LINUX中添加elevator=deadline,然后执行grub2-mkconfig -o /boot/grub2/grub.cfg更新GRUB配置。lvmcache工具配置,例如:pvcreate /dev/sdb1 # SSD分区
vgextend my_vg /dev/sdb1
lvcreate -L 10G -n lv_cache my_vg /dev/sdb1 # 创建缓存逻辑卷
lvcreate -L 50G -n lv_data my_vg /dev/sda1 # 原始数据逻辑卷
lvconvert --type cache --cachevol lv_cache my_vg/lv_data # 将SSD作为缓存
bcache-tools,并配置内核模块(modprobe bcache)。tmpfs(内存文件系统)挂载高频访问的临时目录(如/tmp),例如:mount -t tmpfs -o size=4G tmpfs /tmp
注意:内存缓存会在系统重启后丢失,适合临时文件。vm.swappiness参数控制内核使用Swap的倾向(默认60,值越高越易使用Swap)。减少Swap使用可避免物理内存充足时因Swap导致的性能抖动,建议设置为10-20:echo 10 > /proc/sys/vm/swappiness
echo "vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p # 使配置生效
vm.dirty_ratio(系统内存脏页占比阈值,默认20%)和vm.dirty_background_ratio(后台刷脏页的阈值,默认10%)控制脏页(未写入磁盘的修改数据)的刷新频率。降低阈值可减少脏页积累,提高数据写入的及时性,但会增加IO负载。建议设置为:echo "vm.dirty_ratio = 20" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio = 10" >> /etc/sysctl.conf
sysctl -p
/etc/security/limits.conf文件,例如:* soft nofile 65535 # 单进程最大打开文件数(软限制)
* hard nofile 100000 # 单进程最大打开文件数(硬限制)
生效方式:重启系统或执行ulimit -n 65535临时生效。iostat(yum install sysstat -y)监控磁盘IO等待时间(await,单位ms)、吞吐量(tps,每秒传输次数)等指标,识别性能瓶颈。例如:iostat -dx 1 # 查看磁盘详细IO统计(1秒刷新一次)
关注await(若大于20ms,说明磁盘IO较慢)、%util(若接近100%,说明磁盘满负荷运行)。df -h查看磁盘使用情况,清理无用文件(如日志/var/log、临时文件/tmp),避免磁盘空间不足导致性能下降。e4defrag /dev/sda1,仅ext4文件系统),减少文件碎片,提高读写速度。SSD无需碎片整理。