程序跑一段时间以后,端口还处在LISTENING状态,但是本地Telnet都不通

zhh157 2015-01-23 01:57:43

程序刚开始还运行正常,若干天后,突然发现连不上了,登录到服务器一看,发现本地telnet服务器端口都不通,用netstat查看,端口处于LISTENING状态,怀疑是防火墙原因,把防火墙关掉,问题依旧,抓包看,服务器对TCP三次握手报文根本无反应,服务器其他端口没问题,见了鬼了,有谁遇到过这种问题?我现在怀疑是系统出了什么问题,大家有什么好的思路吗?
...全文
7590 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gw_sheng 2017-08-17
  • 打赏
  • 举报
回复
分析的有道理,的确如您所说,是accept队列满导致,但是为什么accept队列会满,暂时没有找到原因。 不过,已经可以做一些补救措施,出现这种问题时,重新创建监听,暂时可以规避此问题。 楼主,我也遇到跟您一样的问题,重新创建监听,应该怎么做呢?请贴出操作。
赵4老师 2016-07-27
  • 打赏
  • 举报
回复
引用 12 楼 lijunwyf 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] 检查是否资源泄漏的办法之一: 在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
大哥,根据你的提示,我发现了一个问题。你提的这些,怎么查询,命令能否贴一下?[/quote] 在MSDN里面搜“PDH”?
野木香 2016-07-27
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
检查是否资源泄漏的办法之一: 在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
大哥,根据你的提示,我发现了一个问题。你提的这些,怎么查询,命令能否贴一下?
zhh157 2015-10-18
  • 打赏
  • 举报
回复
引用 10 楼 q191201771 的回复:
这个问题要详细了说,监听端口是有队列的,如果你程序不accept,那个队列会满的 还一个可能是你服务器进程的文件描述符用尽了 你如果没设置ulimit可以查一下你系统内核设置的限制是多少 ulimit -n 再netstat查查那个端口的情况 netstat -anp | grep :80
分析的有道理,的确如您所说,是accept队列满导致,但是为什么accept队列会满,暂时没有找到原因。 不过,已经可以做一些补救措施,出现这种问题时,重新创建监听,暂时可以规避此问题。
就想叫yoko 2015-01-27
  • 打赏
  • 举报
回复
这个问题要详细了说,监听端口是有队列的,如果你程序不accept,那个队列会满的 还一个可能是你服务器进程的文件描述符用尽了 你如果没设置ulimit可以查一下你系统内核设置的限制是多少 ulimit -n 再netstat查查那个端口的情况 netstat -anp | grep :80
就想叫yoko 2015-01-26
  • 打赏
  • 举报
回复
就是服务器没accept 你出问题后把你的服务器程序关了,用nc监听那个端口试试能不能telnet
zhh157 2015-01-26
  • 打赏
  • 举报
回复
引用 4 楼 mujiok2003 的回复:
多半是进程在bind,listen在其他地方阻塞住了,没有 accpet
忘了说明,是一个服务器程序,刚开始运行时正常的,可以正常提供服务,运行一段时间才有这个问题。 另外,抓包看了,服务器对三次握手报文根本无响应,在本机测试也是这样,我测试过,就算没有accept,telnet也是能通的。 所以,我怀疑系统协议栈那一层的处理已经有问题,至于问题是由于服务器程序导致的,还是其他问题导致的,没有什么思路往下查。
bobo_包子 2015-01-26
  • 打赏
  • 举报
回复
这种问题是你没处理好socket关闭,而且可以确认的是你有很多socket处于TIMW_WAIT状态。可以看出来,是你服务器主动关闭socket,但是你的client没有处理socket关闭或者因为其他原因没有关闭。这时候服务器的socket会有60-120分钟处于TIME_WAIT状态(一般机器的默认设置),所以时间一长你就不能连接了。 解决方法有很多,一是设置服务器的默认时间,二是修改socket属性。具体怎么设置你自己搜下吧。 PS:再认真学习下TCP状态转移图吧,对你理解这些会很有帮助。
zhh157 2015-01-26
  • 打赏
  • 举报
回复
引用 7 楼 q191201771 的回复:
就是服务器没accept 你出问题后把你的服务器程序关了,用nc监听那个端口试试能不能telnet
我理解,三次握手是由操作系统完成的,现在不敢关闭或重启程序,这种问题很难出现。 我测试过,不管是在linux还是windows,三次握手只要listen就足够了,不需要accept。
mujiok2003 2015-01-23
  • 打赏
  • 举报
回复
引用 4 楼 mujiok2003 的回复:
多半是进程在bind,listen在其他地方阻塞住了,没有 accpet
accept
mujiok2003 2015-01-23
  • 打赏
  • 举报
回复
多半是进程在bind,listen在其他地方阻塞住了,没有 accpet
赵4老师 2015-01-23
  • 打赏
  • 举报
回复
netstat -na | find "WAIT"
赵4老师 2015-01-23
  • 打赏
  • 举报
回复
检查是否资源泄漏的办法之一: 在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
赵4老师 2015-01-23
  • 打赏
  • 举报
回复
定时检查socket状态,若不是LISTENING,重新调用listen
Re:CCNA_CCNP 思科网络认证 PAT NAT 端口或地址转换 与端口映射======================# 本章课程大纲        公网地址和私网地址        NAT应用场景        静态NAT  :static  地址转换        动态NAT  :dynamic地址转换        PAT        :端口地址转换        端口映射 :port map        在Windows上同时实现的NAT和端口映射 # 私网地址三类 A类:10.0.0.0                                255.0.0.0(1网段) B类:172.16.0.0 -172.31.0.0         255.255.0.0(16网段) C类:192.168.0.0-192.168.255.0  255.255.255.0(255网段) # NAT 的使用场景        NAT的最初的目的是允许把私有IP地址映射到公网地址,以减缓IP地址空间的消耗。        当一个组织更换它的互联网服务提供商ISP,但不想更改内网配置方案时,NAT同样很有用途。        以下是适于使用NAT的多种情况:         企业内网接入Internet节省公网地址         单向访问         大方向:内网访问互联网(互联网上主机不能够访问内网主机)         小方向:同单位实现两个网段之间单向访问(涉密部门能够访问其他部门,反之不可)         增加一个网段          避免在主干路由器增加到这个网段的路由         在Windows上实现的NAT和端口映射 # 网络地址转换的类型        下面介绍一下NAT的三种类型。         静态NAT 是为了在私网地址和公网地址间,允许一对一映射而设计的。         或者IPv4和IPv6之间的转换(典型)         不节省公网地址,故公网地址的利用效率不高,         无任何安全性,外网可以通过公网地址直接攻击内网主机,好像只增加路由器的工作         适用场景类似代理,可以较方便的更换主机,而无需修改路由器的配置         故应用不够广泛...         动态NAT 可以实现映射一个未注册 IP地址到注册IP地址池中的一个注册IP地址。         多对一,或多对多         比较PAT优势:避免被误认为攻击而被封ip地址         不太节省地址,应用不广泛         复用是最流行的NAT配置类型,也被称为端口地址映射(PAT)。         通过使用PAT,可实现上千个用户仅通过一个真实的全球 IP地址连接到Internet。         缺点:增加延迟,消耗路由器性能 # 端口映射(port mapping) 允许Internet上的计算机通过企业路由器的公网IP地址访问到内网的服务器------------------------------------------------         

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧