文件系统的读写性能与什么相关?

单个文件系统的读写性能上限(峰值)与文件系统的当前使用容量线性相关且成正比例关系,即使用容量越大,吞吐性能上限(峰值)越高。

为什么使用Nginx写日志到文件系统耗时很长?

  • 背景信息:

    与Nginx日志相关的指令有两条。log_format用来设置日志的格式,access_log用来指定日志文件的存放路径、格式的名称和缓存大小。

  • 问题描述:

    Nginx写日志到文件系统耗时很长,写入性能差。

  • 问题原因:

    access_log指令中的日志文件路径包含变量,每次写日志时都会重新打开文件,再写入日志,然后关闭文件。NAS为了保证数据的可见性,会在关闭文件时将数据写回服务端,性能消耗较大。

  • 解决方案:
    • 方案一:删除access_log指令中的变量,使用固定路径存储日志文件。
    • 方案二:使用open_log_file_cache指令设置经常被使用的日志文件描述符缓存,提高包含变量的日志文件存放路径的性能。具体配置,请参见open_log_file_cache
      建议配置:
      open_log_file_cache max=1000 inactive=1m valid=3m min_uses=2;

为什么SMB文件系统执行I/O操作会延迟?

  • 问题描述:

    通过挂载点直接访问SMB文件系统,在执行I/O操作会有几分钟的等待时间。

  • 问题原因:
    • 安装了NFS客户端,实际业务不使用,产生等待时间。
    • 启用了WebClient服务,导致Internet文件服务器登录SMB文件系统失败。
    • 注册表配置项中包含了NFS权限Nfsnp,导致打开文件失败。
  • 解决方案:
    1. 首次访问SMB文件系统时,请ping挂载点,查看计算节点和文件系统连通性,以及时延是否在正常范围。
      • 如果执行ping命令失败,请检查您的网络设置,确保网络连接正常。
      • 如果延时较长,请ping挂载IP。当ping IP比ping DNS延时小很多,判断可能是DNS问题,请检查您的DNS服务器配置。
    2. 如果已安装NFS客户端,且用不到NFS服务,请删除NFS客户端。
    3. 禁用WebClient服务。
    4. 查看注册表配置项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder,如果注册值包含Nfsnp,请删除Nfsnp,然后重启实例。
说明
  • 您可以使用fio工具,查看性能指标是否异常。
    fio.exe --name=./iotest1 --direct=1 --rwmixread=0 --rw=write --bs=4K --numjobs=1 --thread --iodepth=128 --runtime=300 --group_reporting --size=5G --verify=md5 --randrepeat=0 --norandommap --refill_buffers --filename=\\<mount point dns>\myshare\testfio1
  • 建议您使用大数据块进行I/O读写操作,如果数据块较小,会消耗更多的网络资源。如果不能修改数据块大小,可以通过构造BufferedOutputStream,将具有指定缓冲区大小的数据写入。

为什么Windows server SMB协议I/O性能无法提升?

  • 问题原因:

    Windows SMB客户端默认不开启large mtu选项,因此影响I/O性能的提升。

  • 解决方案:

    您可以通过修改注册表配置项来开启large mtu选项,注册表路径:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters

    在该路径下,增加DWORD类型的键,命名为DisableLargeMtu,设置其值为0,重启后才能生效。

如何提升IIS访问NAS的性能?

  • 问题原因:

    IIS采用NAS Share的方式访问NAS,在访问一个文件时,IIS后台会多次访问NAS。不同于访问本地文件系统,每次访问NAS至少要有一次网络交互,虽然每次访问的时长很短,但是多次访问时长叠加可能会造成客户端响应总时间较长。

  • 解决方案:
    1. 请您使用SMB重定向器组件,进行优化。具体操作,请参见SMB2 Client Redirector Caches Explained
      其中,注册表路径为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters。请将如下三个配置项调至600及以上。
      • FileInfoCacheLifetime
      • FileNotFoundCacheLifetime
      • DirectoryCacheLifetime
      说明 如果三个注册表配置项都不存在:
      1. 请确认使用的是SMB文件系统。
      2. 确认Windows版本是否支持这三个注册表项配置项。如果Windows版本支持而注册表配置项不存在,请手动创建。具体操作,请参见Performance tuning for file servers
    2. 建议把IIS访问频繁的JS/CSS等网页程序相关的内容存放在本地。

如果当前IIS读写性能无法满足您的业务需求,请您提交工单咨询。

为什么Linux操作系统上NFS客户端运行性能差?

  • 问题描述:

    Linux操作系统中出现NFS客户端读写速度只有几MB/s。

  • 问题原因:

    在Linux操作系统中,NFS客户端对于同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能。

  • 解决方案:

    安装NFS客户端后,修改同时发起的NFS请求数量,提高NFS性能。具体操作,请参见如何修改同时发起的NFS请求数量

如何提升通用型NAS文件系统的读写带宽?

通用型NAS文件系统的读写带宽随文件系统的使用容量线性增长。文件系统读写带宽与使用容量的关系,请参见通用型NAS

通过在文件系统写入空洞文件可增加文件系统使用容量,从而提升文件系统的读写带宽。文件空洞在阿里云NAS上占用实际容量,按实际大小计费。更多信息,请参见通用型NAS计费说明

例如在容量型文件系统写入1000 GiB空洞文件,其读写带宽可提升150 MB/s;在性能型文件系统写入1000 GiB空洞文件,其读写带宽可提升600 MB/s。
  • Linux
    dd if=/dev/zero of=/mnt/sparse_file.txt bs=1073741824000 count=1
    其中,/mnt为文件系统在计算节点上的挂载路径。
  • Windows
    fsutil file createnew Z:\sparse_file.txt 1073741824000
    其中,Z:\为文件系统在计算节点上的挂载路径。