Java项目线上打开文件数过多问题排查

起因

最近线上告警提示某台服务器打开文件数过多, 为防止进一步引起用户故障, 排查下问题

原因初步猜测应该是IO流资源未关闭, 如打开文件或者发送http请求

排查

服务器上使用启动应用服务的用户查看系统打开文件数配置

#切换到admin用户
su admin
#查看打开文件数配置大小,其中open files栏为系统打开文件数
ulimit -a

查看应用服务打开的文件数

查出服务进程号,再使用lsof命令查看应用打开的文件数

# 使用ps -ef|grep java 或者jps -l查询进程号
jps -l


# 使用lsof命令查看进程打开文件数
lsof -p 进程号 |wc -l

执行结果如下,可以看到应用打开的文件数

定位

使用lsof命令导出应用打开的文件 (操作中用到lsof命令,可能需要在服务器上安装lsof)

#lsof -p 进程号 > 导出文件名
lsof -p 11058 > openfiles.txt

其他

lsof命令简介:

lsof(list open files)是一个列出当前系统打开文件的工具,lsof 意义LiSt Open Files用于找出哪些文件被哪个进程打开。众所周知Linux/Unix将所有内容都视为文件(pipes,sockets,directories,devices等等)。使用的原因之一lsof命令是当磁盘无法卸载时,因为它表示正在使用文件。借助此命令,我们可以轻松识别正在使用的文件

取前五行: lsof | head -5

[root@web2 ~]# lsof | head -5
COMMAND      PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd        1         root  cwd       DIR              253,0       247         64 /
systemd        1         root  rtd       DIR              253,0       247         64 /
systemd        1         root  txt       REG              253,0   1632776     353452 /usr/lib/systemd/systemd
systemd        1         root  mem       REG              253,0     20064     116104 /usr/lib64/libuuid.so.1.3.0
  1. COMMAND: 进程的名称
  2. PID: 进程标识符
  3. USER: 进程所有者
  4. FD: 文件描述符,应用程序通过文件描述符识别该文件,如cwd、txt等
  5. TYPE: 文件类型,如DIR、REG等
  6. DEVICE: 指定磁盘的名称
  7. SIZE: 文件的大小
  8. NODE: 索引节点(文件在磁盘上的标识)
  9. NAME: 打开文件的确切名称
大文件占用

如果有大文件占用问题, 在Linux系统中,通过rm或者文件管理器删除文件,只是将它会从文件系统的目录结构上解除链接(unlink),如果文件在删除时是被打开的(有进程正在使用或者有进程一直在向这个文件写数据, 例如服务器写log日志)状态,那么进程将仍然可以读取该文件,磁盘空间也就会一直被占用。 这个时候可以用以下命令清空该文件

echo " " > /app.log

这个命令会将一个空行写入到/app.log文件中。如果这个文件不存在,它会被创建;如果这个文件已经存在,它的内容会被这个空行替换

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值