Linux - 一个进程锁住了文件,另一个需要使用该文件锁的进程白屏
Posted 王万林 Ben
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux - 一个进程锁住了文件,另一个需要使用该文件锁的进程白屏相关的知识,希望对你有一定的参考价值。
一个进程锁住了文件,另一个需要使用该文件锁的进程白屏
环境描述
OS:CentOS
问题描述
应用点击查看结果,其界面卡住并变成白屏。
问题分析
使用strace看到
[ben@thesre.cn ~]# strace -tttTffy -o /tmp/strace.log -p <PID>
... snippet omitted ...
fcntl(212, F_SETLK, {type=F_RDLCK, }=EAGAIN(Resource temporarily unavailable))
... snippet omitted ...
使用lsof看到
[ben@thesre.cn ~]# lsof -p <PID> | grep 212
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
virt 9876 thesre 212u REG 0,61 234456 4623 /path/to/locked_file
查看该INODE的在本系统内核中维护的锁
[ben@thesre.cn ~]# awk '/4623/ {print $5}' /proc/locks #查看持有该锁的PID
8765
查看该进程,发现其code path是与正在卡住的进程是相同的程序。程序的实例运行需要获得该文件锁,由于头一个实例已获得该锁,后一个实例就获取不到了。
问题解决
用户侧:一次只运行该程序的一个实例
工具侧:敦促工具开发,需要做好多实例并发的问题。如不支持并发,则应给出友好的提示,而不是卡住,让用户摸不到头脑。
以上是关于Linux - 一个进程锁住了文件,另一个需要使用该文件锁的进程白屏的主要内容,如果未能解决你的问题,请参考以下文章
Linux 挖矿程序把病毒文件锁住了,删不了,怎么破?(chattr)