使用top和iotop分析Linux写入性能问题,本文将解释如何解决性能问题。
如果你已经使用top和iotop确定存在写入性能问题,那你需要做几件事。首先是服务器的设计。许多服务器都安装在一个巨大的分区里,集成了操作系统和数据集中进程。这很不理想,因为只存在一个活动的文件系统、一个从RAM输入数据到磁盘的进程,并且只有一个日志进程。因此如果你的服务器遭受性能写入问题,确保写入密集型进程所需的数据在不同分区上,而不是在剩余的文件里。
在使用自定义分区安装服务器时,你所使用的文件系统也扮演了角色。有两个文件系统提供了更好的写入性能,它们是XFS和Ext4。幸好Ext4是所有最新Linux版本上的默认文件系统,只需要确保你的分区使用这个文件系统格式化了的。
不过,使用不同分区安装服务器可能还不够。默认下,对于读和写要求一样多的使用案例来说,多数Linux服务器调整为平均使用。但是你的服务器可能需要不同的设置。
有两个参数与目前的性能行为相关。首先,有个I/O调度程序,这是服务器里每样设备都拥有的一个设置。接下来,有个你文件系统正在使用的日志模式。首先让我们看看I/O调度程序。
I/O调度程序设置
每样设备都有自己的I/O调度程序。你可以在/sys/block/<device>/queue目录里找到当前设置。要显示当前内容,使用cat scheduler命令。会出现以下提示:
root@texas:/sys/block/sda/queue# cat scheduler
noop anticipatory deadline [cfq]
如你所见,有四个不同的可用设置,目前所选的是cfq设置。这意味着I/O调度程序为读和写分配了均衡的时间空挡。因此让我们从更改这个设置到deadline开始。使用deadline意味着调度程序尽量延迟,以便写入更有效率。要更改当前设置,可以使用下面的命令:
echo deadline > /sys/block/sda/queue/scheduler
日志设置
在更改设置后,你可能想看见一些进程。但是会出现更多事物。所有现代的文件系统都使用日志。日志确保文件系统的整合性。日志里三种不同的模式,其中data=journal是最安全的,但绝对是最慢的方法,data=writeback是最不安全的,但是最快的模式。默认的值通常设置为data=ordered,它在速度和数据完整性上都是最中庸的。
处于性能原因,这样做很好,尤其是如果iotop显示kjournald2进程有大量数据吞吐量(这个进程照看日志)。要适用这个选项,在加载文件系统时必须使用它,因此你必须包括它在快捷表中。下面可以显示如何使用这个选项显示文件系统。
/dev/sda3 / ext4 acl,user_xattr,data=writeback 1 1
遭受性能问题的许多服务器实际是遭受写入性能,不过修复这个问题不困难。这里介绍应用一些简单的设计方针和参数优化优化服务器以便获得更好的写入性能。