标签: lsof

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

我写了一小段Java程序,如下所示:

package com.ny.utils.pub;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class NetWriter {
private static String link = "http://xxx.yyyyyy.com:4444";

public String getLink() {
    return link;
}

public static void setLink(String link) {
    NetWriter.link = link;
}

private static HttpURLConnection conn = null;
private static BufferedReader bufReader = null;
private static InputStreamReader isReader = null;
private static OutputStreamWriter osw = null;
private static URL url = null;
static {
    try {
        url = …
Run Code Online (Sandbox Code Playgroud)

java linux lsof handle

5
推荐指数
1
解决办法
5995
查看次数

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

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

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

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

如果我杀死了我怀疑泄漏的进程(它们彼此通信),则泄漏消失了。FD被释放。

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

这是我写来检测泄漏发生的脚本:

#!/bin/bash

if [ "$#" != "2" ];then
    name=`basename $0`
    echo "Usage : $name <threshold for number of pids> <check_interval>"
    exit 1
fi


fd_threshold=$1
check_interval=$2
total_num_desc=0
touch pid_monitor.txt
nowdate=`date`
echo "=================================================================================================================================" >> pid_monitor.txt
echo "****************************************MONITORING STARTS AT $nowdate***************************************************" >> pid_monitor.txt

while [ 1 ]
do
    for x in `ps -ef | awk '{ print $2 }'`
    do …
Run Code Online (Sandbox Code Playgroud)

kernel memory-leaks lsof file-descriptor linux-kernel

5
推荐指数
1
解决办法
6188
查看次数

将 lsof 退出代码重定向到变量

我正在尝试测试文件是否打开,然后对退出代码执行某些操作。目前是这样做的:

   FILE=/usr/local/test.sh
   lsof "$FILE" | grep -q COMMAND &>/dev/null
   completed=$? 
Run Code Online (Sandbox Code Playgroud)

有什么方法可以将退出代码直接推送到局部变量中,而不是将输出重定向到 /dev/null 并捕获“$”?多变的?

linux bash lsof

5
推荐指数
1
解决办法
1957
查看次数

如何找出哪个进程正在使用 localhost:80?

我正在使用 linux mint xfce 版本,我的 localhost:80 被某个程序使用,但我不知道是哪一个,当我打开 firefox 并访问 localhost:80 时,它说

有用!这是该服务器的默认网页。Web 服务器软件正在运行,但尚未添加任何内容。

我尝试使用lsof -i @localhost:80,但它什么也没返回。

linux port lsof

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

为什么总是5个连接没有附加程序?

此问题类似于网络端口打开,但没有附加进程?netstat显示没有pid的侦听端口,但lsof没有.但是他们的答案无法解决我的问题,因为它太奇怪了.

我有一个服务器应用程序lps,它等待端口8588上的tcp连接.

[root@centos63 lcms]# netstat -lnp | grep 8588   
tcp        0      0 0.0.0.0:8588                0.0.0.0:*                   LISTEN          6971/lps
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,什么是错的监听套接字,但是当我连接几千测试客户端(由另一位同事写的)服务器,无论是2000,3000,或4000一直存在着5个客户端(这也是随机连接并向服务器发送登录请求,但无法接收任何响应.以3000个客户为例.这是netstat命令给出的:

[root@centos63 lcms]# netstat -nap | grep 8588 | grep ES | wc -l
3000
Run Code Online (Sandbox Code Playgroud)

这是lsof命令输出:

[root@centos63 lcms]# lsof -i:8588 | grep ES | wc -l
2995
Run Code Online (Sandbox Code Playgroud)

这5个连接在这里:

[root@centos63 lcms]# netstat -nap | grep 8588 | grep -v 'lps'                   
tcp    92660      0 192.168.0.235:8588          192.168.0.241:52658         ESTABLISHED -                   
tcp    92660      0 192.168.0.235:8588          192.168.0.241:52692         ESTABLISHED -                   
tcp …
Run Code Online (Sandbox Code Playgroud)

linux networking netstat lsof

5
推荐指数
1
解决办法
1189
查看次数

"lsof"将文件显示为(已删除),但我仍然可以在文件系统中看到它

在Linux 2.6.27中:

从"lsof"输出我看到一个进程保持打开fd与(已删除)文件.奇怪的是,我仍然可以使用"ls"在文件系统中看到该文件.这是为什么?

谢谢.

linux lsof

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

为什么lsof报告比ulimit的"打开文件"输出更高的打开文件数

Tomcat在我的工作站上运行了好几天,现在它没有响应,lsof命令输出大量的close_wait状态连接,tomcat pid是25422,但是ulimit命令显示"打开文件"是1024,这怎么会发生?

[root@localhost home]# lsof -p 25422 | wc -l
10309

[root@localhost home]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 399360
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, …
Run Code Online (Sandbox Code Playgroud)

tomcat file lsof ulimit

5
推荐指数
1
解决办法
3954
查看次数

lsof:socket括号内的数字代表什么

当我在名称列中运行 lsof 命令时,对于套接字,一些数字出现在括号中,如下所示。这是什么意思?

 command    pid        user      fd                 Name
 process    8197       root      29                 socket:[3050474]
Run Code Online (Sandbox Code Playgroud)

linux lsof

5
推荐指数
1
解决办法
962
查看次数

lsof 的非零退出代码

我正在使用以下lsof命令:

lsof -iTCP -a -sTCP:^LISTEN -a -p <pid>
Run Code Online (Sandbox Code Playgroud)

如果有一些输出,则此命令返回退出代码 ,0但如果没有输出,则退出代码是1

echo $?
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么会这样?有没有办法避免它?

unix lsof

5
推荐指数
1
解决办法
4091
查看次数

linux上的lsof和netstat有什么区别?

我今天遇到一个问题:

当我启动HDP docker容器时,发生错误:

监听TCP 0.0.0.0:8086:绑定:地址已在使用中

根据错误消息,我知道端口8086已被使用,因此我尝试了一些命令来确定哪个程序正在使用端口8086。 lsof -i:8086 lsof -i tcp:8086 lsof | grep 8086

但是以上所有命令都没有输出!

我对此感到非常困惑,在Google上进行了一些搜索之后,我尝试了另一个命令: netstat -pna | grep 8086

我从此命令获得正确的输出。

我知道lsof和之间的一些区别netstat,但是我真的不知道为什么我不能从lsof -i:8086?获得任何输出。

这是我从Google搜索到的两个命令之间的一些区别:

netstat(net statistic)是基于连接的,它显示NW连接(udp / tcp端口),路由表,接口,多播成员身份等。

lsof(打开文件列表)是基于应用程序的,类似于netstat + ps,在那里您可以看到所有访问的端口,NW连接等。但是lsof包括诸如本地emacs窗口终端会话(tty dev / pts / n)不属于netstat

linux netstat lsof

5
推荐指数
2
解决办法
3091
查看次数