标签: lsof

lsof列出的FD管道列是什么意思?

我正在使用以下命令获取管道列表:

lsof | grep PIPE 
Run Code Online (Sandbox Code Playgroud)

我想知道FD列的值是什么意思(第5页http://i.imgur.com/KHczptf.png).我认为,rw平均读取写入分别,但到底是什么下面的每一个字符,这些装置的数量?


我知道FD意味着文件描述符,我想弄清楚的是列中显示的值是什么意思,比如3r,16w,20r等.

linux shell command lsof file-descriptor

12
推荐指数
1
解决办法
2万
查看次数

使用lsof的脚本在shell上运行良好而不在cron上运行

我有一个小脚本在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 shell cron lsof

10
推荐指数
1
解决办法
5043
查看次数

使用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)

该结果应如何解释?

我正在解决有太多打开文件的问题,并试图了解这个观察是否相关. …

java lsof ioexception

10
推荐指数
1
解决办法
1万
查看次数

在Linux中使用Python检查打开的文件

您好我正在寻找一种方法来确定使用Python在我的整个系统(Linux)中打开哪些文件.我找不到任何这样做的模块.

或者也许唯一的方法是使用命令lsof?

谢谢!

python linux lsof

9
推荐指数
1
解决办法
9472
查看次数

链接到特定的inode

我有一个被删除的文件,但仍然保持打开我的程序.我用lsof找到了inode号.如何创建返回该inode的硬链接?

任何代码都有帮助,但Perl会很方便.

linux inode lsof ln

8
推荐指数
1
解决办法
3799
查看次数

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上安装.deb,dpkg -i但是它提供了错误,说没有找到ruby和其他依赖项.

如果我能帮助让lsof在iOS上正常运行,那将会很棒.或者是lsof的替代工作.谢谢.

runtime-error lsof out-of-memory jailbreak ios

8
推荐指数
1
解决办法
2399
查看次数

为什么 lsof 在 Mac 上将内存映射文件的文件描述符报告为 txt 而不是 mem?

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是文件的描述符。

macos mmap lsof memory-mapped-files

8
推荐指数
0
解决办法
1894
查看次数

lsof 可以在 alpine linux 上显示开放端口吗?

我有一个在 alpine linux 中运行的 Spring Boot 应用程序,监听端口 8080。但是,当我这样做时:

$ lsof
$ lsof -i 8080
Run Code Online (Sandbox Code Playgroud)

它不显示打开的端口。你知道我做错了什么吗?

似乎 lsof 在 alpine linux 上不尊重任何论点。它总是显示相同的输出 - 似乎忽略了 -i。

谢谢你。

磷

在此处输入图片说明

linux port networking lsof alpine-linux

8
推荐指数
1
解决办法
1万
查看次数

Kafka 代理节点因“打开的文件太多”错误而宕机

我们有一个 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(核心))

  • 有以下三点观察:
    1. 如果我们这样做lsof -p <kafka_pid>|wc -l,我们得到的打开描述符总数只有 7000 左右。
    2. 如果我们这样做lsof|grep kafka|wc -l,我们将获得大约 150 万个开放 FD。我们已经检查过它们都只属于 Kafka 进程。
    3. 如果我们将系统降级到 Centos6,那么 outlsof|grep kafka|wc -l会回到 7000。

我们已尝试将文件限制设置为非常大,但仍然出现此问题。以下是为 kafka 进程设置的限制:

cat /proc/<kafka_pid>/limits
    Limit …
Run Code Online (Sandbox Code Playgroud)

centos lsof ulimit apache-kafka spring-kafka

8
推荐指数
1
解决办法
7298
查看次数

使用 Starlette 和 Uvicorn 进行 Python 日志记录时文件句柄过多(在 lsof 上)

我有一个通过 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)

它在 …

python logging lsof starlette uvicorn

8
推荐指数
0
解决办法
280
查看次数