linux句柄泄露问题查看

背景:

我们在开发linux在线服务器的时候经常会遇会句柄泄露的问题。因为在linux系统设计里面遵循一切都是文件的原则,即磁盘文件、目录、网络套接字、磁盘、管道等,所有这些都是文件,在我们进行打开的时候会返回一个fd,即是文件句柄。如果频繁的打开文件,或者打开网络套接字而忘记释放就会有句柄泄露的现象。在linux系统中对进程可以调用的文件句柄数进行了限制,在默认情况下每个进程可以调用的最大句柄数是1024个,如果超过了这个限制,进程将无法获取新的句柄,而从导致不能打开新的文件或者网络套接字,对于线上服务器即会出现服务被拒绝的情况。

查看与修改句柄:

在linux系统中可以通过ulimit–n查看每个进程限制的最大句柄数,通过ulimit –HSn 10240修改进程的最大句柄数。当句柄数目达到限制后,就回出现”too many files open”。

查看进程占用的句柄数有几种办法:

1)  通过cat/proc/pid/fd可以查看线程pid号打开的线程;

2)  通过lsof命令, /usr/sbin/lsof-p 21404 命令结果如下:

COMMAND   PID      USER   FD   TYPE     DEVICE      SIZE       NODE NAME

vas     21404 root  cwd    DIR        8,3      4096   30195729 /home/users/root/vas

vas     21404 root  rtd    DIR        8,2      4096          2 /

vas     21404 root  txt    REG        8,3 112201650   30195914 /home/users/root/vas

vas     21404 root  mem    REG        0,0                    0 [heap] (stat: No such file or directory)

vas     21404 root  mem    REG        8,2    105080     339377 /lib64/ld-2.3.4.so

vas     21404 root  mem    REG        8,2   1493186     339367 /lib64/tls/libc-2.3.4.so

vas     21404 root  mem    REG        8,2     17943     339392 /lib64/libdl-2.3.4.so

vas     21404 root  mem    REG        8,2    613297     339369 /lib64/tls/libm-2.3.4.so

vas     21404 root  mem    REG        8,2     79336     490463 /usr/lib64/libz.so.1.2.1.2

COMMAND:进程的名称

PID:进程标识符

USER:进程所有者

FD:文件描述符,应用程序通过文件描述符识别该文件。如 cwd、txt等

TYPE:文件类型,如 DIR、REG、IPV4、FIEO等

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称

另外通lsof命令也可以查看占用端口的进程:

/usr/sbin/lsof-i :9001

linux句柄泄露问题查看,布布扣,bubuko.com

时间: 2024-10-13 11:19:54

linux句柄泄露问题查看的相关文章

平台服务器句柄泄露问题的排查与解决

我们监控平台有台报警服务器,其主要功能是接收前端,TDDC,网管服务器等发送的报警,并依据报警联动配置进行相应的联动操作,最近发现在该服务器运行过程中,通过任务管理器查看其句柄数量会不断增加,以至于影响其他服务器工作,初步怀疑是句柄泄露问题,现对其进行分析排查. 句柄是Windows用来标识应用程序所建立或使用的对象的唯一整数,Windows的内核对象包括进线程,窗口,位图,GDI对象等等.应用程序通过句柄访问内核对象,当使用完内核对象之后需要释放资源关闭该内核对象句柄,如果未能正确关闭,则会造

.NET对象与Windows句柄(三):句柄泄露实例分析

在上篇文章.NET对象与Windows句柄(二):句柄分类和.NET句柄泄露的例子中,我们有一个句柄泄露的例子.例子中多次创建和Dispose了DataReceiver和DataAnalyzer对象,但由于忘记调用DataAnalyzer的Stop方法,导致产生句柄泄露.本文假定我们已经发现了泄露现象但还不知道原因,讨论如何在这种情况下分析问题. 一.发现问题 在程序运行约一个小时以后,通过任务管理器发现句柄数超过5000,线程数也超过1000.对于一段只需要并行接收和分析数据的简易代码来说,这

句柄泄露实例分析

句柄泄露实例分析 在上篇文章.NET对象与Windows句柄(二):句柄分类和.NET句柄泄露的例子中,我们有一个句柄泄露的例子.例子中多次创建和Dispose了DataReceiver和DataAnalyzer对象,但由于忘记调用DataAnalyzer的Stop方法,导致产生句柄泄露.本文假定我们已经发现了泄露现象但还不知道原因,讨论如何在这种情况下分析问题. 一.发现问题 在程序运行约一个小时以后,通过任务管理器发现句柄数超过5000,线程数也超过1000.对于一段只需要并行接收和分析数据

客户端程序出现句柄泄露时查找办法

背景 有些客户反应客户端程序操作一段时间后,查看任务管理器发现客户端程序占用句柄数过多,怀疑存在句柄泄露问题.针对该问题,现场测试多个场景,把出现问题的范围缩小.现发现在以下两个场景下,会出现句柄泄露: 1. 打开客户端程序后操作交易 2. 在文本框中切换输入法(百度输入法2.10版本) 使用handle.exe收集数据并分析后,已经确定是由于客户端程序中使用键盘钩子与百度输入法自带Bug导致句柄泄露,但排查时还是浪费了大量时间,几经转折才查出原因.下面说明下如何使用Windbg来准确快速的定位

(转)剖析Linux文件编码的查看及修改

Linux文件编码的查看和修改都有不止一种做法,如果你需要在Linux中操作windows下的文件,那么很可能会经常遇到文件编码转换的问题,如何进行这项工作,也应该是经常工作在双系统下的操作者的必须掌握的知识. Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换. 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set fileen

Linux系统下如何查看已经登录用户

Linux系统下如何查看已经登录用户 虽然前面介绍了用户管理,但是那部分主要是管理用户的帐号,也就静态的用户列表.而LINUX是个多用户系统,一旦连接到网络中,它可以同时为多个登录用户提供服务.系统管理员可以随时了解系统中有那些用户,用户都在进行什么操作. 查看用户的操作 系统管理员若想知道某一时刻用户的行为,只需要输入命令W 即可,在SHELL终端中输入如下命令: [[email protected] ROOT] # W2:31PM UP 11 DAY ,21:18 4 USERS, LODE

攻城狮在路上(叁)Linux(二十六)--- linux文件系统的特殊查看与操作

一.boot sector 与 super block的关系: 1.boot sector用于存放引导装载程序,占用1024个字节. 2.super block的大小也为1024字节. 3.若block大小为1k,则boot sector和super block各占一个block. 4.若block大于1K(2K/4K)时,则两者都位于第一个block中. 二.磁盘空间的浪费问题:暂不考虑. 三.利用GUN的parted命令进行分区行为: 因为fdisk不支持高于2TB的分区. 命令格式: pa

Linux使用netstat命令查看并发连接数

本文和大家分享的主要是linux使用netstat命令查看并发连接数的相关内容,一起来看看吧,希望对大家学习linux有所帮助. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 解释: 返回结果示例: LAST_ACK 5 (正在等待处理的请求数) SYN_RECV 30 ESTABLISHED 1597 (正常数据传输状态) FIN_WAIT1 51 FIN_WAIT2 504 TIME_WAIT 105

Linux系统下如何查看物理内存占用率

Linux系统下如何查看物理内存占用率 Linux下看内存和CPU使用率一般都用top命令,但是实际在用的时候,用top查看出来的内存占用率都非常高,如:Mem:   4086496k total, 4034428k used,    52068k free,   112620k buffersSwap: 4192956k total,   799952k used, 3393004k free, 1831700k cached 接近98.7%,而实际上的应用程序占用的内存往往并没这么多, PI