问题:

使用vdbench进行单层100w目录,每个目录30个文件,共3000w文件读写时,在创建文件得时候IO会出现断断续续得情况。

分析过程:

1、  nfs抓包分析

使用vdbench创建一个文件得流程eg: vdb_f0398.file:

Lookup call -> lookup reply ->create call ->create reply ->write call ->write reply

2、  当vdbench IO归0时,观察存储端状态

1)  read IO特别大,write IO为0

看4标识

2)  zfs arc到了limit点为,arc_prune数值增加,意味着频繁得回收arc,但arc大小为变化

看上图1是设定的arc_meta_limit,2是已经使用的arc_meta空间,一般触发回收时会高出limit限制几百M,3是回收次数。其在arc_meta使用触发回收时短时间内多次回收调用,但是回收的arc空间很少,之后不再回收,导致arc一直是full的状态。

3)  arc相关参数变化

没有释放arc

看图5标识,此处为有写IO时,此时为readdir执行完了一次后,在对应的目录下创建了30个文件(vdbech配置的)。

4)  使用perf分析进程变化情况

发现进程lz4_decompress_zfs 进程变化比较明显

5)  通过dump_stack打印lz4的调用栈:

从打印情况看两个可疑点,出问题的时候zfs_readdir 和 reconnect_path被不停的调用

6)  从这两个地方分析是否存在问题

1》  zfs_readdir其dump_stack情况

分析内部代码,打印事件发现:

会发现while执行的次数和时间会随着目录数的增加线性增长,100w目录查询一次一般会超过10s(8s-180s,当时应该受到arc回收影响,没出现IO归零时不会调用到此函数)

2》  reconnect_path情况

出现问题时,exportfs参数没有收到期望的具体vdb.1_6795.dir目录名,而是根目录/(注意此处设置nfsd thread数为1,默认是32,会进行32次根目录的调用,其造成阻塞的概率增大,并耗时非常长)

由此触发了zfs_readdir

此处引出问题,为什么参数会是根目录????

7)  当arc缓存开始执行回收操作时,出现问题

而多次回收内存并未释放多少,前面图示可以看出。

8)  由上联合起来分析汇总:

当arc使用接近限制阈值的时候,触发回收操作,而回收操作只回收一点,但将原来的目录缓存破坏掉,使用新创建的文件元数据来填充arc,大量的arc缓存无法释放。导致当服务器端nfs执行 lookup确定要创建的文件是否合法时,触发了reconnect_path->zfs_readdir等操作,来进行所有目录的重新匹配,而此时arc已经满了无法缓存,导致接下来的每次lookup都要执行一遍readdir。

此处引出问题,为什么缓存释放不了???

3、  由上分析,猜测服务器vdbench缓存了inode,dentry等信息

通过在跑vdbench IO时,观察服务器内存使用情况发现,随着创建文件夹和文件,内存使用明显

尝试在存储端arc接近缓存阈值时,清除服务器的缓存,主要是dentry、inode信息。多次测试发现问题不再重现。Arc可以正常释放,并且释放速度较快。

4、  综上确定问题出现vdbenc IO,在创建文件夹和文件的时候会影响zfs ARC缓存释放,引出问题:

1)  vdbench 在没有创建完文件之前会维护这些link?

2)  Nfs客户端做的缓存?

3)  此现象对其他公司nas产品是否一样?

4)  需要存储端解决此问题?如何解决?

5、arc小于2G回收会出问题这个大概率是之前的因素影响,还在分析代码并测试中~~。测试了一次1.5G的在服务器端正常释放缓存后,没啥问题。

记一次NAS故障分析(ZFS NFS)的更多相关文章

  1. CentOS7搭建NAS,包括NFS、ISCSI

    第一步:安装 更新系统 yum update 安装iftop yum install epel-release yum install iftop 安装NFS yum install nfs-util ...

  2. 自己家里搭建NAS服务器有什么好方案?

    转自:https://www.zhihu.com/question/21359049 作者:陈二发链接:https://www.zhihu.com/question/21359049/answer/6 ...

  3. 【树莓派】【转载】Raspberry Pi (树莓派)折腾记

    在网上看到一篇对树莓派折腾记录比较详细的文章,时间比较早,但是有些东西没变. 对于新手而言,还是有点参考价值.文章参见:http://skypegnu1.blog.51cto.com/8991766/ ...

  4. NAS简介

    转自IBM资料库:https://community.emc.com/docs/DOC-15977 在20世纪80年代初,英国纽卡斯尔大学布赖恩.兰德尔教授 ( Brian Randell)和同事通过 ...

  5. 脑残手贱:被NFS祸害的调度系统

    建议:任何时候,都要三思而后行!!! 事请的缘由 系统中采用slurm调度系统来进行并行计算.但是在GPU节点上,无论如何都无法启动slurmd,报插件初始化错误的故障. 因此需要编译新的munge和 ...

  6. 9 云计算系列之Cinder的安装与NFS作为cinder后端存储

    preface 在前面我们知道了如何搭建Openstack的keystone,glance,nova,neutron,horizon这几个服务,然而在这几个服务中唯独缺少存储服务,那么下面我们就学习块 ...

  7. Linux系统中连接使用NAS

    在使用NAS时,需要先确定NAS上的NFS服务和SMB的服务都开启了: 然后需要用NAS上的用户去登录,这里用的是admin: # smbclient -L 192.168.1.40 -U admin ...

  8. MAC OS 中mount nfs 报错问题.

    记一下 MAC OS 中mount nfs 报错问题. 环境和配置文件 NFS 服务端 Ubuntu 安装 apt install nfs-kernel-server 服务端的配置文件 cat /et ...

  9. OpenStack之基础知识

    一.云计算 云计算(cloud computing)是基于互联网的相关服务的增加.使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源.云是网络.互联网的一种比喻说法.过去在图中往往 ...

随机推荐

  1. ESP32:蓝牙BLE控制M3508电机

    ESP32:蓝牙BLE控制M3508电机 先给各位朋友拜个年,祝大家新春快乐,事事顺利,身体健康啊! 还是熟悉的3508,内容概述: ESP32主控 蓝牙BLE通信 使用实时系统(FreeRTOS) ...

  2. 如何使用 pytorch 实现 yolov3

    前言 看了 Yolov3 的论文之后,发现这论文写的真的是很简短,神经网络的具体结构和损失函数的公式都没有给出.所以这里参考了许多前人的博客和代码,下面进入正题. 网络结构 Yolov3 将主干网络换 ...

  3. json中传递数组和list

    json的数据类型:List,数组,数字,字符串,逻辑值,对象,null 1.如果json传递的是数组,格式: { "name":"网站", "num ...

  4. Java8 Stream 的一些操作和介绍

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11858186.html Java8 Stream 是一个新的东西, 就是能够将常见的数据结构转 ...

  5. 啥叫IP地址及子网掩码?

    啥叫IP地址及子网掩码 ??? 1.IP地址的定义及分类 1.1IP地址的定义 1.2IP地址的分类 2.子网掩码 1.1  互联网上连接的网络设备和计算机都有唯一的地址,此作为该主机在Interne ...

  6. Shell循环练习题

    Shell循环练习题 目录 Shell循环练习题 1.计算从1到100所有整数的和 2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和.奇数和 ...

  7. .NET6: 开发基于WPF的摩登三维工业软件 (2)

    在<.NET6: 开发基于WPF的摩登三维工业软件 (1)>我们创建了一个"毛坯"界面,距离摩登还差一段距离.本文将对上一阶段的成果进行深化,实现当下流行的暗黑风格UI ...

  8. linux_15

    实现基于MYSQL验证的vsftpd虚拟用户访问 配置samba共享,实现/www目录共享 使用rsync+inotify实现/www目录实时同步 LVS调度算法总结 LVS的跨网络DR实现

  9. Linux基础入门笔记

    今天带来Linux入门的一些基础的笔记,科班出身的同学们,Linux已经成为了必修课了,下面我带来关于Linux的相关入门知识以及Linux简单的介绍! Linux内核最初只是由芬兰人林纳斯·托瓦兹( ...

  10. 打造一款属于自己的CentOS操作系统

    文章目录 声明 关闭selinux以及firewalld 修改终端前缀显示 修改默认网卡名称为eth0 替换yum源 安装常用工具 优化history 配置回收站 迎宾显示 优化vim 清空yum缓存 ...