服务公告
用 lsof 排查文件与网络占用
发布时间:2025-11-18 20:46
## 场景 删除文件提示 device busy,新端口起服务提示 already in use,磁盘明明删了大文件空间却没释放——这三类问题的答案都在同一个工具手里。lsof 列出进程打开的文件与套接字,是文件系统与网络之间的一座桥,占用关系查清楚,处理就有依据。它的名字直译就是列出打开文件,而类 Unix 系统里一切皆文件,因此这个清单天然覆盖了普通文件、目录、套接字、管道与设备。 ## 步骤清单 查端口占用是最常用的形态,看哪个进程占着目标端口。 ``` lsof -i :8080 ``` 查目录或文件被谁占用,删除受阻时先看这里。 ``` lsof +D /var/log/myapp ``` 从进程出发反查它打开的全部文件与连接。 ``` lsof -p 2517 ``` 三组命令覆盖双向查询:从端口找进程,从文件找进程,从进程找全部句柄。 ## 验证与关键读法 磁盘空间未释放的经典场景,用下面这条命令一击即中。 ``` lsof | grep deleted ``` 输出里出现 deleted 标记的文件,说明进程仍握着已删除文件的句柄,空间要等进程重开或重启才归还。确认后重启对应服务,df 的数字立刻回来。端口占用的输出里确认进程号与命令名,再决定是停掉还是改端口,比盲猜可靠。 ## 注意事项 +D 会遍历目录下全部文件,目录大时很慢,生产环境优先用精确文件路径。查询系统级进程需要 root 权限,普通用户只能看到自己的进程,这是很多人误判没有占用的原因。默认输出列里 FD 列的数字是句柄号,TYPE 列区分文件、目录与套接字类型,读熟这两列,输出一眼就能分类。进程打开文件数逼近上限时,应用会报 too many open files,用 lsof 统计该进程句柄数再对照 limits 上限,是处置这类告警的标准动作:先降异常占用,再评估是否调高上限,顺序反了只会延缓问题复发。顺云云服务器上排查日志目录被占、端口冲突这类问题,lsof 加上 ss 配合使用,基本能覆盖日常的占用类故障。上一篇: 服务器采购从买断到租用的演变
下一篇: 长期运营服的降配与升级时机