我正在使用以下命令获取管道列表:
lsof | grep PIPE
Run Code Online (Sandbox Code Playgroud)
我想知道FD列的值是什么意思(第5页http://i.imgur.com/KHczptf.png).我认为,r和w平均读取和写入分别,但到底是什么下面的每一个字符,这些装置的数量?
我知道FD意味着文件描述符,我想弄清楚的是列中显示的值是什么意思,比如3r,16w,20r等.
我有一个小脚本在Linux上计算打开文件,将结果保存到平面文件中.我打算每分钟在Cron上运行它以便稍后收集结果.脚本如下:
/bin/echo "Timestamp: ` date +"%m-%d-%y %T"` Files: `lsof | grep app | wc -l`"
Run Code Online (Sandbox Code Playgroud)
而crontab是这样的:
*/1 * * * * /usr/local/monitor/appmon.sh >> /usr/local/monitor/app_stat.txt
Run Code Online (Sandbox Code Playgroud)
如果我从shell ./script.sh运行它运行良好并输出为:
Timestamp: 01-31-13 09:33:59 Files: 57
Run Code Online (Sandbox Code Playgroud)
但是在Cron输出上是:
Timestamp: 01-31-13 09:33:59 Files: 0
Run Code Online (Sandbox Code Playgroud)
不确定是否需要任何权限或类似.我已经尝试过sus on lsof也没有运气.
任何提示?
我在Linux上使用PID 25426运行Java应用程序.运行时lsof -p 25426,我注意到:
java 25426 uid 420w FIFO 0,8 0t0 273664482 pipe
java 25426 uid 421r FIFO 0,8 0t0 273664483 pipe
java 25426 uid 461r FIFO 0,8 0t0 273622888 pipe
java 25426 uid 463w FIFO 0,8 0t0 273633139 pipe
java 25426 uid 464r FIFO 0,8 0t0 273633140 pipe
java 25426 uid 465r FIFO 0,8 0t0 273622889 pipe
java 25426 uid 471w FIFO 0,8 0t0 273623682 pipe
java 25426 uid 472r FIFO 0,8 0t0 273633141 pipe
Run Code Online (Sandbox Code Playgroud)
该结果应如何解释?
我正在解决有太多打开文件的问题,并试图了解这个观察是否相关. …
您好我正在寻找一种方法来确定使用Python在我的整个系统(Linux)中打开哪些文件.我找不到任何这样做的模块.
或者也许唯一的方法是使用命令lsof?
谢谢!
我有一个被删除的文件,但仍然保持打开我的程序.我用lsof找到了inode号.如何创建返回该inode的硬链接?
任何代码都有帮助,但Perl会很方便.
我的目的是检查特定进程打开的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上安装.deb,dpkg -i但是它提供了错误,说没有找到ruby和其他依赖项.
如果我能帮助让lsof在iOS上正常运行,那将会很棒.或者是lsof的替代工作.谢谢.
lsof test在 Mac OS X 上运行时得到以下输出,其中test是内存映射文件的名称:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
filesyste 40535 buildbot txt REG 1,6 3 2466028 test
Run Code Online (Sandbox Code Playgroud)
请注意,这txt是在FD现场报告的。但是,根据文档lsof:
FD is the File Descriptor number of the file or:
mem memory-mapped file;
txt program text (code and data);
Run Code Online (Sandbox Code Playgroud)
那么问题来了:为什么是lsof报道txt而不是mem现场FD?
该文件映射如下:
mmap(0, length, PROT_READ, MAP_FILE | MAP_PRIVATE, fd, 0)
Run Code Online (Sandbox Code Playgroud)
其中length是长度,fd是文件的描述符。
我有一个在 alpine linux 中运行的 Spring Boot 应用程序,监听端口 8080。但是,当我这样做时:
$ lsof
$ lsof -i 8080
Run Code Online (Sandbox Code Playgroud)
它不显示打开的端口。你知道我做错了什么吗?
似乎 lsof 在 alpine linux 上不尊重任何论点。它总是显示相同的输出 - 似乎忽略了 -i。
谢谢你。
我们有一个 3 节点的 Kafka 集群部署,总共有 35 个主题,每个主题有 50 个分区。总的来说,我们已经配置了replication factor=2. 我们看到一个非常奇怪的问题,Kafka 节点间歇性地停止响应并显示错误:
ERROR Error while accepting connection (kafka.network.Acceptor)
java.io.IOException: Too many open files
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
at kafka.network.Acceptor.accept(SocketServer.scala:460)
at kafka.network.Acceptor.run(SocketServer.scala:403)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
我们已经部署了最新的 Kafka 版本并使用 spring-kafka 作为客户端:
kafka_2.12-2.1.0(CentOS Linux 版本 7.6.1810(核心))
lsof -p <kafka_pid>|wc -l,我们得到的打开描述符总数只有 7000 左右。lsof|grep kafka|wc -l,我们将获得大约 150 万个开放 FD。我们已经检查过它们都只属于 Kafka 进程。lsof|grep kafka|wc -l会回到 7000。我们已尝试将文件限制设置为非常大,但仍然出现此问题。以下是为 kafka 进程设置的限制:
cat /proc/<kafka_pid>/limits
Limit …Run Code Online (Sandbox Code Playgroud) 我有一个通过 uvicorn 运行的最小 starlette 应用程序,除了返回一个 ping 什么都不做。奇怪的是,即使只有一个线程,我的日志文件也有 45 个文件句柄。句柄随着对应用程序的点击而增加,并在 45 处保持平稳。我正在使用 lsof 计算文件句柄:
lsof | grep kml-bkny.log
Run Code Online (Sandbox Code Playgroud)
当然,这是最小的再生产。实际上,我的整个应用程序正在生成数千个文件句柄。一些(~200)我希望给定线程*控制器模块。但是,我无法解释在何处创建了数千个文件句柄。在我的实际程序中,它们也不会停滞不前,它们会永远增长。
这是我的应用程序(api.py):
import logging
from starlette.applications import Starlette
from starlette.responses import JSONResponse
logger = logging.getLogger("kml")
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler('/tmp/kml-bkny.log')
logger.addHandler(handler)
def controller_ping(request):
try:
logger.debug("Received /ping request")
return JSONResponse({}, status_code=200)
except Exception as e:
logger.error(e)
return JSONResponse({}, status_code=500)
app = Starlette()
app.add_route(path='/kml/ping', methods=['GET'], route=controller_ping)
Run Code Online (Sandbox Code Playgroud)
我在命令行上运行它,如下所示:
uvicorn api:app
Run Code Online (Sandbox Code Playgroud)
我使用一个简单的脚本测试应用程序:
import time
import requests
while True:
time.sleep(1)
for _ in range(10):
r = requests.get(f'http://localhost:8000/kml/ping', timeout=5)
Run Code Online (Sandbox Code Playgroud)
它在 …
lsof ×10
linux ×5
python ×2
shell ×2
alpine-linux ×1
apache-kafka ×1
centos ×1
command ×1
cron ×1
inode ×1
ioexception ×1
ios ×1
jailbreak ×1
java ×1
ln ×1
logging ×1
macos ×1
mmap ×1
networking ×1
port ×1
spring-kafka ×1
starlette ×1
ulimit ×1
uvicorn ×1