【问题标题】:Is there a way to list open files and order them in ascending order of time modified?有没有办法列出打开的文件并按修改时间的升序对它们进行排序?
【发布时间】:2019-10-16 10:35:33
【问题描述】:

即使我正在关闭我正在打开的所有文件和连接,并且当我将软硬限制设置为最大可用(即65535)时,我也会遇到Too Many Open Files 问题。 因此,为了调试,我尝试按时间重新排序lsof 的输出。

【问题讨论】:

  • lsof 命令默认按 PID 升序排序。现在您必须知道订购 PID 或时间是相同的。

标签: linux bash lsof


【解决方案1】:

如果您可以控制启动命令,请考虑使用 strace/ltrace。它可以显示每个文件的打开/关闭。

# When using ltrace, specify stdlib functions to monitor
ltrace -e open+close YOUR_COMMAND_HERE
OR
# Modern linux system will use openat system call to open a file
strace -e openat,close YOUR_COMMAND_HERE

您还可以将 strace(和 ltrace)附加到正在运行的进程(参见手册页)

如果您知道您有未关闭的(网络)连接(而不是文件),请考虑扩展/替换过滤器以根据需要关注接受(入站连接)、连接(出站连接)。

【讨论】:

    【解决方案2】:

    如果 strace/ltrace 太过分了,请考虑检查 /proc/PID/fd 文件夹。每个条目修改时间将显示 FD 创建的时间戳,实际上是打开/连接/接受时间:

    # X_PID is the PID of the process to monitor/check
    ls -lt --time-style=full-iso /proc/$X_PID/fd
    

    样本输出

    total 0
    lrwx------ 1 owner owner 64 2019-10-16 16:25:14.359506339 +0300 0 -> /dev/pts/0
    lrwx------ 1 owner owner 64 2019-10-16 16:25:14.359506339 +0300 1 -> /dev/pts/0
    l-wx------ 1 owner owner 64 2019-10-16 16:25:32.183370423 +0300 11 -> /tmp/a
    l-wx------ 1 owner owner 64 2019-10-16 16:26:47.862798157 +0300 15 -> /tmp/b
    l-wx------ 1 owner owner 64 2019-10-16 16:26:47.862798157 +0300 16 -> /tmp/a
    l-wx------ 1 owner owner 64 2019-10-16 16:27:20.918550476 +0300 17 -> /tmp/a
    lrwx------ 1 owner owner 64 2019-10-16 16:25:14.359506339 +0300 2 -> /dev/pts/0
    lrwx------ 1 owner owner 64 2019-10-16 16:25:14.359506339 +0300 255 -> /dev/pts/0
    

    【讨论】:

    • 时间戳是修改时间还是创建时间?
    • @umarr - 在我的系统上是“开放”时间。
    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多