当前位置: 首页 > news >正文

nfs客户端进程变D,延伸linux的lock

问题现象

客户端是opentack,通过nfs挂载我们存储,发现有个服务进程变D了,长时间无法恢复,如下

[root@ECM-043 ~]# ps aux|grep nova-compute
nova     21409  1.4  0.0 2117692 110916 ?      Dl   15:06   1:24 /opt/server/python27/bin/python /usr/bin/nova-compute --logfile /var/log/nova/compute.log

排查步骤

客户端排查,查找该进程hang 在哪里,lsof 查找进程打开的文件


lsof -p 21409 
nova-comp 21409 nova   22w   REG               0,29        0 2199054015793 /var/lib/nova/instances/locks/nova-storage-registry-lock (block.beijing.wocloud.cn:/var/share/ezfs/shareroot/block-bj)
可以看到客户端的进程打开了nfs上的nova-storage-registry-lock文件,下一步在服务端看下该文件的状态

服务端查看nova-storage-registry-lock 文件的inode号

知道了inode号

在所有的nfs服务端,看下是否有其他进程 拿着 该lock 文件

root@Storage5:~# cat /proc/locks |grep inode
1: POSIX  ADVISORY  WRITE 28331 00:14:2199053494291 0 EOF
2: POSIX  ADVISORY  WRITE 28165 00:14:1099511627783 0 0
3: POSIX  ADVISORY  READ  360769 00:0f:21590 4 4
4: POSIX  ADVISORY  WRITE 28331 00:14:2199054015793 0 EOF
5: POSIX  ADVISORY  WRITE 1022761 00:0f:673303453 0 EOF
6: POSIX  ADVISORY  WRITE 98842 00:0f:47181 0 EOF
7: POSIX  ADVISORY  WRITE 688677 00:0f:1186403778 0 EOF
8: POSIX  ADVISORY  READ  38754 00:0f:21590 4 4

服务端 确认哪些 nfs客户端连接

nfs 是无状态协议,和cifs不一样,不是TCP 吗?

root@Storage5:/var/lib/nfs/sm# ll
total 48
drwxr-xr-x 2 statd root 4096 Apr 13 09:03 ./
drwxr-xr-x 5 statd root 4096 Apr 10 18:21 ../
-rw------- 1 statd root   88 Apr 11 16:08 10.55.4.1
-rw------- 1 statd root   89 Apr 10 14:47 10.55.4.15
-rw------- 1 statd root   89 Apr 10 14:41 10.55.4.16
-rw------- 1 statd root   90 Apr  7 02:10 10.55.4.199
-rw-r----- 1 statd root 1350 Apr 11 13:42 10.55.4.205
-rw------- 1 statd root   89 Apr 11 16:00 10.55.4.31
-rw------- 1 statd root   89 Apr 10 14:44 10.55.4.32
-rw------- 1 statd root   89 Apr 10 14:34 10.55.4.37
-rw------- 1 statd root   89 Apr 11 16:04 10.55.4.54
-rw-r----- 1 statd root 2288 Apr 13 09:03 10.55.4.9
root@Storage5:/var/lib/nfs/sm# pwd
/var/lib/nfs/sm

延伸

linux下lock类型

文件锁,主要分为 flock 和fcntl

2者的粒度不一样

flock

锁住整个文件,如下,

root@scal61:/usr/share/pyshared/ezs3# cat /proc/locks 
1: FLOCK  ADVISORY  WRITE 97862 00:12:229635 0 EOF
2: FLOCK(lock类型)  ADVISORY(建议锁,非强制执行)  WRITE(holder能写lock文件) 4246(holder的pid) 00:12:20704(锁文件的MAJOR-DEVICE:MINOR-DEVICE:INODE-NUMBER) 0 EOF(锁文件的范围,0到EOF代表整个文件)
                 

fcntl

lock文件的某一部分,如下 posix

root@scal61:/usr/share/pyshared/ezs3# cat /proc/locks 
3: POSIX  ADVISORY  WRITE 97830 08:03:524404 0 EOF
4: POSIX  ADVISORY  WRITE 4056 00:12:41028 0 EOF
5: POSIX  ADVISORY  READ  2351 00:12:10095 4 4
6: POSIX  ADVISORY  READ  2783 00:12:10052 4 4
7: POSIX  ADVISORY  READ  2783 00:12:14432 4 4
8: POSIX  ADVISORY  WRITE 2783 00:12:10050 0 0

* centos

  • FLOCK signifying the older-style UNIX file locks from a flock system
    call
  • POSIX representing the newer POSIX locks from the lockf system call.
  • ADVISORY means that the lock does not prevent other people from accessing the data; it only prevents other attempts to lock it
  • MANDATORY means that no other access to the data is permitted while the lock is held
  • The fourth column reveals whether the lock is allowing the holder READ or WRITE access to the file

相关文章:

  • 9 外观模式(Facade)
  • 线程的同步与死锁
  • 用TinySpider进行网页抓取实例
  • UI图像拖动更换
  • Mysql避免全表扫描sql查询优化 .
  • LR杂记 - 性能測试指标及经常使用的监控工具
  • linux常见问题汇总
  • jps命令
  • 招投标流程
  • 从零开始教你制作友善之壁TINY4412----SD卡uboot启动卡
  • Linux centos 连接网络
  • Action代理类的工作
  • 字符串中的转义字符与字符串的长度
  • 测试图片
  • php排序
  • 《Java编程思想》读书笔记-对象导论
  • fetch 从初识到应用
  • If…else
  • iOS 系统授权开发
  • Lucene解析 - 基本概念
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Vue.js-Day01
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 笨办法学C 练习34:动态数组
  • 构建工具 - 收藏集 - 掘金
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 追踪解析 FutureTask 源码
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​Java并发新构件之Exchanger
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # Java NIO(一)FileChannel
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #13 yum、编译安装与sed命令的使用
  • ${ }的特别功能
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (笔试题)分解质因式
  • (三)uboot源码分析
  • (学习日记)2024.01.09
  • (转)linux 命令大全
  • (转)四层和七层负载均衡的区别
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 项目指定SDK版本
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • ::前边啥也没有
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [Editor]Unity Editor类常用方法