zoukankan      html  css  js  c++  java
  • linux 删除文件空间未释放问题

    现象:我们测试环境上,导出数据文件时,由于作业报错,重复导出,空间使用到达100%,按理说,导出的文件时在相同的路径下,文件名也是一致的,会自动替换。

    那么之前导出的文件会被删除,问题就出现在删除这一步。

    在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink).然而假设文件是被
    打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用。而我删除的是作业正在运行的导出文件
    删除的时候文件应该正在被使用

    解决办法:

    lsof |grep delete

    gds   10099    use     15w    REG   253,0 6616432640      788101  /home/use/share/srctab50/ft_kr_pms_pms_ca_acct_detail_in_elk_w.dat.0(deleted)

    一种方法是kill掉相应的进程,或者停掉使用这个文件的应用,让os自己主动回收磁盘空间

    我这个环境有非常多进程在使用的这个文件,停掉进程有点麻烦,再有就是风险非常大

     

    当linux打开一个文件的时候,Linux内核会为每个进程在/proc/ 『/proc/nnnn/fd/文件夹(nnnn为pid)』建立一个以其pid
    为名的文件夹用来保存进程的相关信息,而其子文件夹fd保存的是该进程打开的全部文件的fd(fd:file descriptor)。

    kill进程是通过截断proc文件系统中的文件能够强制要求系统回收分配给正在使用的的文件。
    这是一项高级技术,仅到管理员确定不会对执行中的进程造成影响时使用。应用程序对这样的方
    式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题

    把进程删除:

    kill -9 10099 

    查看空间使用率就将下来了

     

    学习下lsof命令

     

    lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,不论什么事物都是文件,
    设备是文件,文件夹是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。

    lsof是linux最常常使用的命令之中的一个,通常的输出格式为:

     

    引用
    COMMAND     PID   USER   FD      TYPE     DEVICE     SIZE       NODE NAME

     

    常见包含例如以下几个字段:许多其他的可见manual。

    1、COMMAND
    默认以9个字符长度显示的命令名称。可使用+c參数指定显示的宽度,若+c后跟的參数为零,则显示命令的全名
    2、PID:进程的ID号
    3、PPID
    父进程的IP号,默认不显示,当使用-R參数可打开。
    4、PGID
    进程组的ID编号,默认也不会显示,当使用-g參数时可打开。
    5、USER
    命令的执行UID或系统中登陆的username称。默认显示为username,当使用-l參数时,可显示UID。
    6、FD
    是文件的File Descriptor number,或者例如以下的内容:
    (这里非常难翻译相应的意思,保留英文)

     

    引用
    cwd  current working directory;
    Lnn  library references (AIX);
    jld  jail directory (FreeBSD);
    ltx  shared library text (code and data);
    Mxx  hex memory-mapped type number xx.
    m86  DOS Merge mapped file;
    mem  memory-mapped file;
    mmap memory-mapped device;
    pd   parent directory;
    rtd  root directory;
    tr   kernel trace file (OpenBSD);
    txt  program text (code and data);
    v86  VP/ix mapped file;

     

     

    文件的File Descriptor number显示模式有:

     

    引用
    r for read access;
    w for write access;
    u for read and write access;
    N for a Solaris NFS lock of unknown type;
    r for read lock on part of the file;
    R for a read lock on the entire file;
    w for a write lock on part of the file;
    W for a write lock on the entire file;
    u for a read and write lock of any length;
    U for a lock of unknown type;
    x for an SCO OpenServer Xenix lock on part  of the file;
    X  for an SCO OpenServer Xenix lock on the entire file;
    space if there is no lock.

     

     

    7、TYPE

    引用
    IPv4 IPv4的包;
    IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;
    DIR 文件夹
    LINK 链接文件

    详情请看manual中许多其他的凝视。

     

    8、DEVICE
    使用character special、block special表示的设备号
    9、SIZE
    文件的大小,假设不能用大小表示的,会留空。使用-s參数控制。
    10、NODE
    本地文件的node码,或者协议,如TCP等
    11、NAME
    挂载点和文件的全路径(链接会被解析为实际路径),或者连接两方的地址和端口、状态等

  • 相关阅读:
    asp.net+Sqlserver 通过存储过程读取数据
    文字半透明显示在图片上
    饼形统计图
    折线统计图
    柱状统计图
    关于phonegap
    codesmith的使用
    asp.net读取Access数据库。
    Tomcat7.0安装配置
    freemarker数字格式化
  • 原文地址:https://www.cnblogs.com/hello-wei/p/10641316.html
Copyright © 2011-2022 走看看