性能类 为什么在目录下并发创建文件,每秒创建的文件数量达不到IOPS标称的值? 创建文件涉及到“为新文件分配磁盘空间”和“将新文件加入目录”至少2个IO指令: “为新文件分配磁盘空间”可以并发执行,并发程度受文件系统大小影响,文件系统越大,并发程度越高。 “将新文件加入目录”如果修改的是同一目录,不能并发执行。修改速度受IO时延影响较大,如文件系统时延为1ms,无并发的情况下1秒内能完成1000次IO,单目录的创建性能就不会超过1000文件/秒。 解决方案: 避免单个目录包含过多的文件,建议单目录下文件数量不超过1万个。 扩容文件系统,可以提升文件系统的读写性能。 如何解决向多台云主机中挂载的NFS文件系统中写入数据延迟问题? 问题描述: 云主机1更新了文件A,但是云主机2立即去读取时,仍然获取到的是旧的内容。 问题原因: 这涉及两个原因:第一个原因是,云主机1在写入文件A后,并不会立即进行刷新(flush),而是先进行PageCache操作,依赖于应用层调用fsync或者close来进行刷新。第二个原因是,云主机2存在文件缓存,可能不会立即从服务器获取最新的内容。例如,在云主机1更新文件A时,云主机2已经缓存了数据,当云主机2再次读取时,仍然使用了缓存中的旧内容。 解决方案: 方案一:在云主机1更新文件后,一定要执行close或者调用fsync。在云主机2读取文件之前,重新打开文件,然后再进行读取。 方案二:关闭云主机1和云主机2的所有缓存。这会导致性能较差,所以请根据实际业务情况选择适合的方案。关闭云主机1的缓存:在挂载时,添加noac参数,确保所有写入立即落盘。挂载命令示例如下: plaintext 挂载命令,noac 本地挂载路径1 关闭云主机2的缓存:在挂载时,添加actimeo0参数,忽略所有缓存。挂载命令示例如下: plaintext 挂载命令,actimeo0 本地挂载路径2 根据实际情况以上方案可以确保云主机1更新文件后,云主机2能立即获取到最新内容。 注意 挂载命令在天翼云官网控制台中文件系统详情页复制。 请务必确认挂载命令中具备noresvport参数,防止文件系统卡住。