忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 1551 | 回复: 6

[网络管理] centos上出现大量ESTABLISHED状态的文件句柄,百思不得其解啊 [复制链接]

论坛徽章:
0
发表于 2017-07-07 18:58 |显示全部楼层
本帖最后由 minimu 于 2017-07-07 19:23 编辑

1、环境:  服务器端:centos7,一个Socket服务程序
客户端:用模拟多个Socket请求的客户端程序

2、现象:
(1)服务器端刚启动的时候,句柄正常:
[root@localhost app]# lsof -n | wc -l
6298

(2)如果客户端不发送程序,句柄也基本没有波动,几个上下波动

(3)一旦客户端发送连接请求并发送数据(每隔30S发送一次),文件句柄就开始暴涨
[root@localhost app]# lsof -n | wc -l
38139
根据观察,客户端每1000个socket连接,句柄会增加3万以上个;尝试将客户端的连接数增加到6000的时候,句柄超过了21万个。但是服务器状态正常的,所有客户端的响应时间也在3ms内。

(4)可打开的文件句柄最大值:6000连接的时候已经用掉21W+了
[root@localhost gps]# cat /proc/sys/fs/file-max
1048576


3、分析:
(1)查看网络连接数量,正常
[root@localhost app]# netstat -ant | wc -l

1007

(2)指定端口网络连接,正常
[root@localhost app]# netstat -ant | grep ":10032" | wc -l
1001

(3)查看句柄,明显异常,2235就是Socket服务端的PID
[root@localhost app]# lsof -n | awk '{print $2}' | sort -n | uniq -c | sort -nr | more
  33046 2235
   3180 1527
    420 966

(4)导出lsof的数据打开看了下,几万个句斌基本都是ESTABLISHED状态的socket连接,类似下面【来自另一次测试的导出,忽略PID不一样】:
java      2345 2346    root 1288u     IPv4              54615        0t0        TCP 192.168.1.200:10032->192.168.1.4:55505 (ESTABLISHED)
java      2345 2346    root 1289u     IPv4              54616        0t0        TCP 192.168.1.200:10032->192.168.1.4:55518 (ESTABLISHED)
java      2345 2346    root  128u     IPv4              52029        0t0        TCP 192.168.1.200:10032->192.168.1.4:56815 (ESTABLISHED)
java      2345 2346    root 1290u     IPv4              54617        0t0        TCP 192.168.1.200:10032->192.168.1.4:55532 (ESTABLISHED)
java      2345 2346    root 1291u     IPv4              54618        0t0        TCP 192.168.1.200:10032->192.168.1.4:55545 (ESTABLISHED)

(5)担心是IPv6或防火墙的问题,把IPv6和防火墙全部禁用了,问题依旧

(6)担心是后续应用造成的,把后续的代码全部屏蔽,只留Socket的接收代码,问题依旧

4、对比测试
把Socket服务端的程序放在win10和mac上跑,句柄都是正常的

5、求助?为什么会有这种状况?是centos7的某个配置或初始化参数的原因?或者其他原因?

论坛徽章:
0
发表于 2017-07-07 19:00 |显示全部楼层
导出的lsof文件是另外一次测试导出的,因此PID文件不一样,问题是一样的。特别说明下

论坛徽章:
0
发表于 2017-07-07 20:01 |显示全部楼层
centos是不是有什么设置啊,fd在里面重复出现,基本略大于socket连接数量的地方,相同的fd就会出现

论坛徽章:
210
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之全北现代
日期:2016-05-11 17:05:27操作系统版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:22:58数据库技术版块每日发帖之星
日期:2016-05-10 19:23:04数据库技术版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
发表于 2017-07-09 09:36 |显示全部楼层
shell@mh20170707:~$  lsof -n | wc -l
39227
shell@mh20170707:~$
shell@mh20170707:~$
shell@mh20170707:~$ netstat -ant | wc -l
11
shell@mh20170707:~$
shell@mh20170707:~$ lsof -n | wc -l
23615
shell@mh20170707:~$
shell@mh20170707:~$


我关闭一个chrome浏览器,数据变化吓人

论坛徽章:
0
发表于 2017-07-09 23:01 |显示全部楼层
action08 发表于 2017-07-09 09:36
shell@mh20170707:~$  lsof -n | wc -l
39227
shell@mh20170707:~$

chrome一直是大型软件
无论是吃内存还是其他资源

不知道是不是entos有什么机制或一些处理逻辑的变更

PS:我的centos是最小按照

论坛徽章:
32
荣誉会员
日期:2011-11-23 16:44:17射手座
日期:2014-09-03 16:01:17天蝎座
日期:2014-08-21 17:18:48丑牛
日期:2014-08-29 16:06:45天秤座
日期:2014-08-29 10:12:18天秤座
日期:2014-08-26 16:18:20双子座
日期:2014-07-30 11:38:27寅虎
日期:2014-08-04 10:24:12IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2017-07-31 23:28 |显示全部楼层
回复 1# minimu

lsof -n 反应的是打开的文件句柄.
lsof -i 才是反应打开的网络连接.

如果能确定对应关系,那可以认为是每增加一个访问, 会有三个文件句柄打开.
如果是java的线程来服务,那可能会存在重复打开文件的情况, 比如日志.

另外, 你提供的内容根本不是 lsof -n 的完整结果. 无法看出更多的东西.

论坛徽章:
0
发表于 2017-10-07 11:31 |显示全部楼层
我也发现类似问题,相同的程序在centos7下句柄数超高,但是在centos6下就很正常,不知道你有没有解决这个问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP