问题标签 [lsof]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6711 浏览

java - 带有 URLConnection 的 Java 应用程序导致“打开的文件太多”

我写了一小段java程序如下:

当我编写另一个程序调用该类中的方法时,这将导致“打开的文件过多”,然后操作系统将拒绝用户登录。调用脚本如下:

当问题再次出现时,我发现句柄占用在增加。以下是我执行命令“lsof -p PROGRAM_PID”的消息

句柄数(管道套接字事件池)将多达数千个。

我尝试了很多方法来避免这种情况,但都失败了。任何人都可以告诉我上述程序中的缺陷吗?

0 投票
5 回答
83823 浏览

macos - 查看 Mac OS X 中哪个进程正在使用文件

我希望能够跟踪文件并查看哪个进程正在触摸该文件。那可能吗?我知道我可以在活动监视器中看到打开的进程列表,但我认为这很快就会让我看到它。这样做的原因是我正在使用一个框架,我认为正在使用框架的系统版本而不是调试版本,我想看看哪个进程正在触及它。

0 投票
2 回答
5794 浏览

linux - 仅当文件未被其他进程使用时才在 Linux 中移动文件

使用 lsof 命令,我可以确定某个文件是否正在被某个进程使用,但我需要自动检查文件以供使用,并且只有在未使用时才移动它。这些文件被我无法控制的各种其他程序使用,所以我不能使用咨询锁。目的是阻止其他进程修改该文件,因此仅在进程打开文件时移动文件是不行的。有什么解决办法吗?

更新:我刚刚想到了一个我认为适合我的目的的解决方案。最终目标是在其他程序完成修改时以最终状态处理这些文件。如果我将文件移动到另一个目录,我可以使用 lsof 通过它的旧路径检查它是否仍在使用中;如果是这样,我稍后再检查一次,直到它不再使用,然后处理文件。通过将文件移动到另一个目录,它会对用户和程序隐藏文件。我不希望用户和程序看到旧目录中的文件,因为这使他们有机会在我使用 lsof 和处理文件之间打开文件,这意味着我将在修改状态下处理文件。

0 投票
1 回答
1146 浏览

linux - 获取确定端口的连接数

寻找一个返回端口连接数的 linux 函数。

正在研究“lsof”,但它只打印门中的连接,而不返回所有连接的总和,例如:如果我在端口 80 有两个连接,它将返回 2,而不是连接。

0 投票
1 回答
1637 浏览

sockets - 套接字描述符泄漏 - lsof 无法识别协议?

当我运行命令时,什么是“无法识别协议” /usr/sbin/lsof -p 20085。的输出lsof如下所示

以及为什么这个泄漏总是袜子 0,5。

注意:我正在创建三个必须始终在运行时打开的套接字,除此之外没有创建文件/套接字,我的问题是我得到大约 5000+ 无法识别协议。为什么会这样?

谢谢。

0 投票
1 回答
285 浏览

python - 使用 ctypes 和 libproc proc_pidinfo 在 MacOS 10.6 上 Python 2.5 和 Python 2.6 之间的奇怪差异

我正在尝试确定给定 PID 的进程的当前工作目录。命令行实用程序 lsof 执行类似的操作。这是python脚本的源代码:

但是,即使此脚本在 Python 2.6 上的行为与预期一样,它在 Python 2.5 中也不起作用:

(PID 2698 是“活动监视器.app”)。注意不同的返回值。由于这个程序强烈地基于 ctypes,我无法想象 Python 本身有什么不同会导致这种情况。我自建的 Python 3.2 会出现相同的行为(与 Python 2.5 相同)。

我不确定我可以提供哪些版本控制信息来帮助追踪怪异——甚至想出一个 2.5 的解决方案——但这里有一些东西:

感谢任何对这里发生的事情有所了解的人:)

0 投票
2 回答
1836 浏览

node.js - Node.js lsof - 许多打开的数据库连接

当我在我的服务器上运行“lsof | grep node”(运行 node.js 应用程序)时,我得到大约 1000 多行(到端口 9160 的数据库连接)。每行如下所示:

这是一个测试 node.js 服务器,做的事情很简单。(使用 Helenus 模块将请求记录到 Cassandra DB)

我很惊讶有这么多打开的连接,而此时绝对不应该超过 1-2 个连接。

这是否意味着我没有在 Node 应用程序中正确结束我的数据库连接?我的代码如下。谢谢。

0 投票
2 回答
7685 浏览

linux-kernel - 调试文件描述符泄漏(在内核中?)

我在这个相对较大的代码库中工作,我看到文件描述符泄漏并且进程开始抱怨在我运行某些程序后它们无法打开文件。

虽然这发生在 6 天后,但我可以通过将 /proc/sys/fs/file-max 中的值减少到 9000 来在 3-4 小时内重现该问题。

随时都有许多进程在运行。我已经能够查明可能导致泄漏的几个过程。但是,我没有看到任何文件描述符通过 lsof 或 /proc//fd 泄漏。

如果我杀死我怀疑泄漏的进程(它们相互通信),泄漏就会消失。FD 被释放。

cat /proc/sys/fs/file-nr 在 while(1) 循环中显示泄漏。但是,我在任何过程中都没有看到任何泄漏。

这是我编写的用于检测正在发生泄漏的脚本:

./monitor.fd.sh 500 2 & 尾 -f pid_monitor.txt

正如我之前提到的,我在 /proc//fd 中没有看到任何泄漏,但是肯定会发生泄漏,并且系统的文件描述符已用完。

我怀疑内核中的某些东西正在泄漏。Linux 内核版本 2.6.23。

我的问题如下:

  1. 将 'ls /proc//fd' 显示链接到进程的任何库的列表描述符 pid 。如果不是,我如何确定我链接到的库中何时存在泄漏。

  2. 我如何确认泄漏是在用户空间还是在内核中。

  3. 如果泄漏在内核中,我可以使用哪些工具进行调试?

  4. 你可以给我任何其他提示。

感谢您耐心地回答问题。

非常感谢任何帮助。

0 投票
4 回答
20899 浏览

android - 如何在没有 lsof 的情况下检查打开的文件

在linux中,我使用lsof来检查文件是由哪个进程打开的。我有一个 android 设备,但没有 lsof 命令。是否可以找到打开特定文件的进程?

我将使用它来验证 MediaPlayer 是否持有 fd,但它应该被关闭。

0 投票
2 回答
1804 浏览

perl - linux中有没有类似lsof命令的perl函数?

我有一个 shell 脚本,它根据进程是否正在运行来归档日志文件。如果进程不使用日志文件,那么我将其存档。到目前为止,我一直在使用 lsof 来获取正在使用的日志文件,但在未来,我决定使用 perl 来执行此功能。

是否有类似于 linux 中的 lsof 可以执行的 perl 模块?