Linux下查看句柄

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下查看句柄相关的知识,希望对你有一定的参考价值。

查看各个分区的句柄数

df -ih


查看句柄最大数

ulimit -n


查看23711进程连接句柄数

lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more |grep 23711


查看所有进程句柄数

lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more第一列是句柄数,第二列是PID


查看连接状态

netstat -an

lsof -i


查看某个线程号的详细信息。
ps -aef|grep 24204

没有释放句柄占用的文件存放路径
用root权限登录 cd /proc
ls 会显示当前所有进程号命名的目录
找到对应进程进入
cd fd
ls
闪烁的为被标记为deleted的文件。

产生没有释放句柄的原因: 第一线程打开文件。另一个线程将该文件删除。就会出现给问题。将整儿进程kill掉才能释放全部句柄。

我的根目录的inode节点满了,没办法只有自己来看看

[[email protected] ~]# df -i
Filesystem      Inodes   IUsed  IFree IUse% Mounted on
/dev/sda3      1240320 1240320      0  100% /
tmpfs           126536       2 126534    1% /dev/shm
/dev/sda1        25688      38  25650    1% /boot
.host:/              0       0      0     - /mnt/hgfs

按照上面的

lsof -n|awk '{print $2}'|sort|uniq -c|sort -n

    102 1716

    113 1784

    170 1772

    170 1774

    170 1777

    170 1780

    170 1781


    183 1718

我把靠后的进程给杀了,没用,df -i 还是一样的,继续想别的办法

我就只有一个办法了,那就是看看那个文件夹下的文件最多,写了个for循环来查看

[[email protected] /]# for i in `ls`;do find $i/ -type f|wc -l &&echo $i ;done
0
app
91
bin
22
boot
60
dev
1100
etc
8104
home
3242
lib
277
lib64
0
lost+found
0
media
36237
mnt
525
opt
find: proc/2325/task/2325/fd/5”: 没有那个文件或目录
find: proc/2325/task/2325/fdinfo/5”: 没有那个文件或目录
find: proc/2325/fd/5”: 没有那个文件或目录
find: proc/2325/fdinfo/5”: 没有那个文件或目录
27411
proc
38251
root
198
sbin
0
selinux
9
srv
7008
sys
4
tmp
79319
usr

一个media占了3W3一个tmp占了8W靠,但是多余120W的还是微不足道,看看这两个文件夹下都有什么

[[email protected] /]# du -sh tmp/
44K tmp/
[[email protected] /]# du -sh  media/
4.0K media/

什么都没有,郁闷了,先给删了,再看看

[[email protected] /]# df -i
Filesystem      Inodes   IUsed  IFree IUse% Mounted on
/dev/sda3      1240320 1240316      4  100% /
tmpfs           126536       2 126534    1% /dev/shm
/dev/sda1        25688      38  25650    1% /boot
.host:/              0       0      0     - /mnt/hgfs

删了但是只是增加了那么一点点,估计不是他两的问题,刚才的循环还没结束,继续想办法

大目录太慢,就进到下一层目录试试看

[[email protected] var]# for i in `ls /var`;do find $i/ -type f|wc -l &&echo $i ;done

1
account
find: cache/salt/master/jobs/7c/3238b58e45f242132dade0d989314a/.minions.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/3238b58e45f242132dade0d989314a/.load.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/3238b58e45f242132dade0d989314a/jid”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/f98bd5f094921b93d5435ea81b0414/.minions.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/f98bd5f094921b93d5435ea81b0414/.load.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/f98bd5f094921b93d5435ea81b0414/jid”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/afa7d7cf12cedd5e2f121536749ded/.minions.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/afa7d7cf12cedd5e2f121536749ded/.load.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/afa7d7cf12cedd5e2f121536749ded/jid”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/2f0ced419e95aff3fd0940303ed101/master/return.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/2f0ced419e95aff3fd0940303ed101/master/out.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/2f0ced419e95aff3fd0940303ed101/.minions.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/2f0ced419e95aff3fd0940303ed101/.load.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/2f0ced419e95aff3fd0940303ed101/jid”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/c8ad7fa07b55ceaf9dd4f1fa068ee4/.minions.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/c8ad7fa07b55ceaf9dd4f1fa068ee4/.load.p”: 没有那个文件或目录
find: cache/salt/master/jobs/7c/c8ad7fa07b55ceaf9dd4f1fa068ee4/jid”: 没有那个文件或目录

丫的终于找到了你了,果断删除就行了


以上是关于Linux下查看句柄的主要内容,如果未能解决你的问题,请参考以下文章

linux下查看系统进程占用的句柄数

Linux下查看进程打开的文件句柄数

查看linux下进程打开的文件句柄数并清理

linux句柄泄露问题查看

linux 调优--修改文件最大句柄数

如何修改linux单进程能够打开的最大文件句柄数