问题标签 [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.
java - 使用 lsof 对“打开的文件过多”进行故障排除
我有一个在 PID 25426 的 Linux 上运行的 Java 应用程序。运行时lsof -p 25426
,我注意到:
这个结果应该如何解释?
我正在对打开文件过多的问题进行故障排除,并试图了解此观察结果是否相关。
随着应用程序继续运行,pipe
条目数会发生变化(上升和下降)。
sql - lsof 如果文件描述符被打开
我使用以下命令来确定是否打开了文件描述符:
如果不是,我执行一些操作。该文件是一个假脱机的日志sqlplus
。
有时lsof
告诉文件描述符没有打开,但后来我在这个文件中找到了一些新数据。它很少发生,所以我无法重现它。
- 可能是什么原因?
- sql spool 是如何工作的?它是从 SPOOL 文件命令保持打开文件描述符直到 SPOOL OFF 命令,还是多次打开和关闭文件描述符?
macos - Bash on OSX:如何确定网络文件(AFP)是否正在使用?
我有一个在 OSX 上运行的 bash 脚本。
它需要处理网络共享(Synology NAS 上的 AFP 共享)上的一些文件。
不幸的是,当脚本运行时,这些文件有时仍在被写入。
如何确定文件是否正在使用?
常规方法是使用“lsof”,但如果其他用户来自 LAN 上的另一个客户端,这似乎不适用于网络文件。
我可以尝试重命名文件。我想如果文件正在使用中会失败,但这远非优雅。
有人有更好的解决方案吗?
parsing - 忽略文件中的目录
我正在创建一个脚本,列出通过 lsof 输出打开的所有文件。我想校验特定文件并忽略该输出中的目录,但无法有效地这样做。例如:(我正在使用 FreeBSD 顺便说一句)
印刷:
我想做的是:从该输出中,忽略任何目录并在 FILES(不是目录)上执行 md5。
任何指针?
linux - 如何找出哪个进程正在使用 localhost:80?
我正在使用 linux mint xfce 版本,我的 localhost:80 被某个程序使用,但我不知道是哪一个,当我打开 Firefox 并访问 localhost:80 时,它说
有用!这是此服务器的默认网页。Web 服务器软件正在运行,但尚未添加任何内容。
我试过使用lsof -i @localhost:80
,但它什么也没返回。
linux - 为什么总是 5 个连接而没有附加程序?
这个问题类似于网络端口打开,但没有附加进程?netstat 显示一个没有 pid 但 lsof 没有的监听端口。但是他们的答案无法解决我的问题,因为它太奇怪了。
我有一个名为的服务器应用程序lps
,它在端口 8588 上等待 tcp 连接。
如您所见,监听套接字没有任何问题,但是当我将几千个测试客户端(由另一位同事编写)连接到服务器时,无论是 2000、3000 还是 4000。一直有 5 个客户端(它们也是random) 连接并向服务器发送登录请求,但收不到任何响应。以 3000 个客户为例。这是netstat
命令给出的内容:
这是lsof
命令输出:
这5个连接在这里:
上面的 5 表明它们在 8588 端口上连接到服务器,但没有附加任何程序。随着客户端发送请求,第二列(即RECV-Q
)不断增加。
上面的链接说明了 NFS 挂载和 RPC。至于 RPC,我使用了命令rcpinfo -p
,结果与端口 8588 无关。和 NFS 挂载,nfssta
输出说Error: No Client Stats (/proc/net/rpc/nfs: No such file or directory).
问题:这怎么会发生?总是 5 个,也不是来自同一个 5 个客户。我不认为这是端口冲突,因为其他客户端也连接到相同的服务器 IP 和端口,并且它们都由服务器正确处理。
注意:我使用 Linuxepoll
来接受客户端请求。我还在我的程序中编写调试代码并记录accept
返回但找不到 5 个连接的每个套接字(以及客户端的信息)。这是uname -a
输出:
感谢您的帮助!我真的很困惑。
2013-06-08更新:将系统升级到 CentOS 6.4 后,出现同样的问题。最后我回到epoll
,发现这个页面说 set listen fd 是非阻塞的,并且accept
直到EAGAIN
或EWOULDBLOCK
错误返回。是的,它有效。没有更多的连接挂起。但这是为什么呢?Unix 网络编程第 1卷说
那么如果队列中还有一些已完成的连接,为什么进程要休眠呢?
2013-7-1更新:我在添加侦听套接字时使用,所以如果不一直接受直到遇到EPOLLET
,我就不能接受所有EAGAIN
我才意识到这个问题。我的错。记住:如果使用,总是read
或accept
直到EAGAIN
出现EPOLLET
,即使它正在侦听套接字。再次感谢 Matthew 用测试程序证明了我。
linux - 查找为 FD 设置的套接字选项
我需要找到为文件描述符设置的套接字选项。
例如,accept 调用返回一个 FD。我设置了一些套接字选项。然后我需要确定是否真的为 FD 设置了套接字选项。
PS: setsockopt 没有返回错误,但是 fd 的行为与选项不符。因此我需要验证这一点。
android - Android:lsof:两个套接字和一个管道——这可能是什么?
在我的 android 应用程序中,我收到“打开的文件太多”异常。当我执行 lsof 时,我会得到一长串(而且还在不断增长的)开放管道。但是在我的情况下,两个管道端点都在我的应用程序中。另一个奇怪的事情:就在拥有两个管道之前,我总是有一个打开的套接字连接。
我很确定我关闭了所有进程和流。为此,我多次检查了该应用程序并运行了 PMD 和 FindBugs。我使用 HttpUrlConnection 进行 HTTPS 通信,我也很确定我断开了所有连接,以便可以重用它们。
有谁知道,那些管道可能是什么(或者我怎么能找到)?
关于套接字(我不知道这是否相关):当我运行 netstat 时,我得到了很多处于 CLOSE_WAIT 状态的套接字:
如上所述,我在 Android 端使用 HttpUrlConnection。服务器是运行 PHP 的 Apache 服务器。SSL 证书有效并由 PositiveSSL 颁发。
这可能是网络问题吗?
ios - lsof 在 iOS 中给出“信息错误:无法分配内存”
我的目的是检查特定进程是否打开了 TCP 和 UDP。
lsof -p $1 | grep -E "TCP|UDP"
(这在 Mac OS 上运行良好)
我从 cydia在越狱的 iPad 上安装了lsof 二进制文件。当我在 iOS 设备(终端)上执行 lsof 时,它只会给我错误提示:information error: Cannot allocate memory
我尝试从各种来源为 iOS (arm) 编译 lsof,但make失败。
还尝试在 iPad 上安装.debdpkg -i
,但它给出了错误,提示找不到 ruby 和其他依赖项。
如果我能获得帮助以使 lsof 在 iOS 上正常运行,那就太好了。或者 lsof 的工作替代方案。谢谢。
java - Spring RmiExporter 服务启动成功后失败
我遇到的情况是,使用 Spring 配置的 RMI 服务RmiServiceExporter
启动得很好,并且可以使用一段时间 - 然后在一段时间后,即使该 Spring 上下文的 Java 进程仍在运行,该服务也不可用.
目前的解决方法是重新启动 java 进程,但这在生产环境中是难以接受的。我无法弄清楚,甚至开始猜测,为什么会发生这种情况,或者寻找什么可能会出错。没有任何 S/O 或 Google 搜索有用,因为我发现的只是根本RmiServiceExporter
无法启动、启动不正常然后后来又失败的示例。任何线索都会很有用。
lsof | head -1;lsof | grep 1197
,服务失败前的输出:
服务端 Spring 配置:
客户端 Spring 配置:
客户端堆栈跟踪,服务失败后lsof
(不报告):