Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1684990
  • 博文数量: 186
  • 博客积分: 3044
  • 博客等级: 中校
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-25 15:04
文章分类

全部博文(186)

文章存档

2024年(2)

2022年(4)

2021年(3)

2020年(1)

2019年(5)

2018年(13)

2017年(6)

2016年(10)

2015年(11)

2014年(11)

2013年(13)

2012年(23)

2011年(25)

2010年(2)

2008年(1)

2007年(5)

2006年(51)

分类: 系统运维

2022-03-25 16:35:53

 socket文件句柄泄漏

20223.25日,报警

     TCP连接数][触发条件:1054785 > 100000 ][报警次数: 第1次/{BANNED}{BANNED}最佳佳多1次][IP:*.13.53 EIP:][实例名:容器-node-3]


1netstat显示的tcp连接数正常

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'

ESTABLISHED      26

FIN_WAIT1        2

TIME_WAIT        288

建立的tcp连接数并不是很多。


2ss -s显示大量的closed连接


ss -s


ss -s

Total: 1055821 (kernel 0)

TCP:   1055854 (estab 26, closed 1055793, orphaned 10, synrecv 0, timewait 1046/0), ports 0


Transport Total     IP        IPv6

*         0         -         -        

RAW       0         0         0        

UDP       14        11        3        

TCP       61        33        28       

INET      75        44        31       

FRAG      0         0         0       


而我的系统监控取值方法是:


cat /proc/net/sockstat | grep sockets | awk '{print $3}'

158391


cat /proc/net/sockstat

sockets: used 158400

TCP: inuse 89 orphan 2 tw 197 alloc 157760 mem 16

UDP: inuse 6 mem 0

UDPLITE: inuse 0

RAW: inuse 0

FRAG: inuse 0 memory 0

很多socket处于alloc状态,已经分配sk_buffer,而且处于closed

有东东file discriptes存在泄漏,没有被内核回收。


3、追查真凶

上面信息说明存在socket fd泄漏,那么用lsof命令检查系统sock的文件句柄。

使用lsof把信息导到一个文件里,以便分析

lsof >/home/yzj/20220325.lsof (执行了近1小时还未出结果,而且内存已经用了近10G,强制中断,不然机器崩了)

只能到/proc/下用脚本进行统计

先导出pid列表:

使用脚本:


点击(此处)折叠或打开

  1. for i in `ls /proc/ |grep '[0-9]'`
  2. do
  3.    mycount=`ls /proc/$i/fd|wc -l`
  4.    echo "$i $mycount"
  5. done

在执行到pid为:14515时卡住,基本上定位是pid:14515的进程


pid列表把14515删除再执行,脚本正常执行完,再次确认是pid14515的进程有问题


 cd /proc/14515/fd

无法执行ls


 Ps -ef |grep 14515

 显示为一个java进程



粗暴解决方案:

kill 14515进程

ss -s

Total: 8204 (kernel 0)

TCP:   7968 (estab 25, closed 7911, orphaned 8, synrecv 0, timewait 829/0), ports 0


Transport Total     IP        IPv6

*         0         -         -        

RAW       0         0         0        

UDP       14        11        3        

TCP       57        29        28       

INET      71        40        31       

FRAG      0         0         0        


Closed已经1055793 变成 7911 

{BANNED}{BANNED}最佳佳终的解决方案还是要修改程度进行解决!

阅读(1821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~