栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记一次Linux 磁盘空间不足

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记一次Linux 磁盘空间不足

记一次Linux 磁盘空间不足
    • 问题现象
    • 问题分析
    • 解决方案

问题现象

服务器无法使用tab快捷键,提示磁盘空间不足(no space left on device)。
df -h 查看磁盘空间占用率100%

问题分析
  1. 首先使用 sudo du / -h --max-depth=1 命令查看各个目录的占用空间,试图找到占用较多空间的目录
TEST@test:/$ sudo du / -h --max-depth=1
4.0K    /srv
0       /dev
4.0K    /mnt
8.0K    /snap
17M     /root
0       /sys
30G     /var
1.2G    /lib
26G     /data
5.5G    /opt
4.0K    /lib64
1.4M    /run
5.4G    /home
3.9M    /tmp
15M     /bin
4.0K    /cdrom
4.0K    /media
0       /proc
18M     /sbin
2.7G    /usr
16K     /lost+found
218M    /boot
7.2M    /etc
75G     /

从结果看,并未存在占用大空间文件夹,帮继续排查。
2. 查看 inode 的使用率,怀疑 inode 不够导致此问题

TEST@test:/$ df -i
Filesystem                          Inodes   IUsed    IFree IUse% Mounted on
udev                               2045094     478  2044616    1% /dev
tmpfs                              2053123     794  2052329    1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 32702464 1258976 31443488    4% /
tmpfs                              2053123       1  2053122    1% /dev/shm
tmpfs                              2053123       4  2053119    1% /run/lock
tmpfs                              2053123      18  2053105    1% /sys/fs/cgroup
/dev/vda2                            65536     313    65223    1% /boot
tmpfs                              2053123      11  2053112    1% /run/user/1000
tmpfs                              2053123      11  2053112    1% /run/user/999


通过 df -i 命令查看后发现 inode 使用率也正常的,只能进一步分析。

  1. 使用 lsof 检查,怀疑是不是有可能文件已被删除,但是进程还存活的场景
TEST@test:/$ sudo lsof |grep delete
java       8339                dknova    1w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339                dknova    2w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8340          dknova    1w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8340          dknova    2w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8341          dknova    1w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8341          dknova    2w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8342          dknova    1w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8342          dknova    2w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8343          dknova    1w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8343          dknova    2w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8344          dknova    1w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
java       8339  8344          dknova    2w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
VMx20Thr  8339  8345          dknova    1w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)
VMx20Thr  8339  8345          dknova    2w      REG              253,0      23067    1310826 /opt/web_servers/logs/dev_new_stdout.log (deleted)

Linux 里的文件被删除后,空间没有被释放是因为在 Linux 系统中,通过 rm 或者文件管理器删除文件将会从文件系统的目录结构上解除链接 (unlink) 。然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。装态为 deleted 为标记被删除,其实该文件并没有从磁盘中删除,类似windows下的回收站状态。

可看到大量的java进程指向日志文件,重启服务后,再次df -h,大量空间已释放

TEST@test:/$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               7.9G     0  7.9G   0% /dev
tmpfs                              1.6G  1.4M  1.6G   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  492G   75G  397G  16% /
tmpfs                              7.9G     0  7.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/vda2                          976M  220M  689M  25% /boot
tmpfs                              1.6G     0  1.6G   0% /run/user/1000
tmpfs                              1.6G     0  1.6G   0% /run/user/999

虽然空间已释放,但是这次导致原因是,业务日志导致,为防止下次情况发生,需要进一步查看日志配置。

  1. 查看业务logback配置
    
        logs/dev_err.log
        true
        
            error
        
        
            ${log.pattern}
            UTF-8
        
    

问题1:日志文件并未定期转储,且采取的是不断追加的形式写入日志,随着时间文件大小会不断增长。
问题2:日志文件未分级限制,即非error日志,如debug日志也写入了error文件中,导致文件大小倍数增加。
问题3:非开发环境下,开启了sql日志,也导致了文件大小倍数增加。

spring.jpa.show-sql=true

问题4:再者是人为的对日志进行仅删除操作,并未重启服务,导致磁盘间使用率不断递增。

解决方案
  1. 对非开发环境关闭sql日志输出。
  2. 对logback配置进行优化,添加文件转储备份策略及日志过滤条件,如下:
    
        ${log.path}/dev-err.log
        
            
            ${log.path}/dev-error.%d{yyyy-MM-dd}.log
            
            7
        
        
            
            ERROR
            
            ACCEPT
            
            DENY
        
        
            ${log.pattern}
            UTF-8
        
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号