`
huhanfu
  • 浏览: 16785 次
  • 来自: ...
社区版块
存档分类
最新评论

有关通信造成系统崩溃问题

阅读更多
                         
通信机制
情景描述:系统产生大量“Too many open files”
原因分析:在服务器与客户端通信过程中,因服务器发生了socket未关导致的closed_wait发生,致使监听port打开的句柄数到了1024个,且均处于close_wait的状态,最终造成配置的port被占满出现“Too many open files”,无法再进行通信。
close_wait状态出现的原因是被动关闭方未关闭socket造成,如附件图所示:

解决办法:有两种措施可行
一、解决:
原因是因为调用ServerSocket类的accept()方法和Socket输入流的read()方法时会引起线程阻塞,所以应该用setSoTimeout()方法设置超时(缺省的设置是0,即超时永远不会发生);超时的判断是累计式的,一次设置后,每次调用引起的阻塞时间都从该值中扣除,直至另一次超时设置或有超时异常抛出。
比如,某种服务需要三次调用read(),超时设置为1分钟,那么如果某次服务三次read()调用的总时间超过1分钟就会有异常抛出,如果要在同一个Socket上反复进行这种服务,就要在每次服务之前设置一次超时。
二、规避:
调整系统参数,包括句柄相关参数和TCP/IP的参数;

注意:
/proc/sys/fs/file-max 是整个系统可以打开的文件数的限制,由sysctl.conf控制;
ulimit修改的是当前shell和它的子进程可以打开的文件数的限制,由limits.conf控制;
lsof是列出系统所占用的资源,但是这些资源不一定会占用打开文件号的;比如:共享内存,信号量,消息队列,内存映射等,虽然占用了这些资源,但不占用打开文件号;
因此,需要调整的是当前用户的子进程打开的文件数的限制,即limits.conf文件的配置;
如果cat /proc/sys/fs/file-max值为65536或甚至更大,不需要修改该值;
若ulimit -a ;其open files参数的值小于4096(默认是1024), 则采用如下方法修改open files参数值为8192;方法如下:
1.使用root登陆,修改文件/etc/security/limits.conf
vi /etc/security/limits.conf 添加
xxx - nofile 8192
xxx 是一个用户,如果是想所有用户生效的话换成 * ,设置的数值与硬件配置有关,别设置太大了。
#<domain>      <type>     <item>         <value>

*         soft    nofile    8192
*         hard    nofile    8192

#所有的用户每个进程可以使用8192个文件描述符。
2.使这些限制生效
确定文件/etc/pam.d/login 和/etc/pam.d/sshd包含如下行:
session required pam_limits.so
然后用户重新登陆一下即可生效。
3. 在bash下可以使用ulimit -a 参看是否已经修改:

一、 修改方法:(暂时生效,重新启动服务器后,会还原成默认值)
sysctl -w net.ipv4.tcp_keepalive_time=600  
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2

注意:Linux的内核参数调整的是否合理要注意观察,看业务高峰时候效果如何。

二、 若做如上修改后,可起作用;则做如下修改以便永久生效。
vi /etc/sysctl.conf

若配置文件中不存在如下信息,则添加:
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15

编辑完 /etc/sysctl.conf,要重启network 才会生效
/etc/rc.d/init.d/network restart
然后,执行sysctl命令使修改生效,基本上就算完成了。

------------------------------------------------------------
修改原因:

当客户端因为某种原因先于服务端发出了FIN信号,就会导致服务端被动关闭,若服务端不主动关闭socket发FIN给Client,此时服务端Socket会处于CLOSE_WAIT状态(而不是LAST_ACK状态)。通常来说,一个CLOSE_WAIT会维持至少2个小时的时间(系统默认超时时间的是7200秒,也就是2小时)。如果服务端程序因某个原因导致系统造成一堆CLOSE_WAIT消耗资源,那么通常是等不到释放那一刻,系统就已崩溃。因此,解决这个问题的方法还可以通过修改TCP/IP的参数来缩短这个时间,于是修改tcp_keepalive_*系列参数:
tcp_keepalive_time:
/proc/sys/net/ipv4/tcp_keepalive_time
INTEGER,默认值是7200(2小时)
当keepalive打开的情况下,TCP发送keepalive消息的频率。建议修改值为1800秒。

tcp_keepalive_probes:INTEGER
/proc/sys/net/ipv4/tcp_keepalive_probes
INTEGER,默认值是9
TCP发送keepalive探测以确定该连接已经断开的次数。(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适)

tcp_keepalive_intvl:INTEGER
/proc/sys/net/ipv4/tcp_keepalive_intvl
INTEGER,默认值为75
当探测没有确认时,重新发送探测的频度。探测消息发送的频率(在认定连接失效之前,发送多少个TCP的keepalive探测包)。乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。(对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值)

【检测办法】
1. 系统不再出现“Too many open files”报错现象。

2. 处于TIME_WAIT状态的sockets不会激长。

在 Linux 上可用以下语句看了一下服务器的TCP状态(连接状态数量统计):

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

返回结果范例如下:

ESTABLISHED 1423
FIN_WAIT1 1
FIN_WAIT2 262
SYN_SENT 1
TIME_WAIT 962
  • 大小: 127.4 KB
分享到:
评论

相关推荐

    kuku机器人系统崩溃安装系统教程

    1. 库卡机器人系统崩溃的处理步骤: - 获取库卡机器人系统版本信息:首先需要确认库卡机器人的系统版本。如果已知,则可以跳过此步骤。若不知道,需要取出库卡的硬盘,用硬盘盒转接至电脑,通过打开H盘下的KRC_...

    通信系统对电力系统稳定控制的影响研究 (2).pdf

    功角稳定涉及到发电机在受到扰动时保持同步运行的能力,一旦失稳可能导致发电机间的相位差增大,进而引发系统崩溃。电压稳定则关注系统母线电压的稳定性,电压下降或上升过大可能引发连锁反应,导致大范围的电压崩溃...

    atmel 128 通信设备监控系统

    这可能涉及到数据加密、异常处理机制、故障恢复策略等,以防止未授权访问和系统崩溃。 综上所述,"atmel 128 通信设备监控系统"结合了Atmel 128单片机的强大处理能力和UCOS的实时操作系统特性,为通信设备提供了...

    电信设备-无线通信系统中的干扰检测.zip

    干扰可能来自各种来源,包括同频干扰、邻频干扰、多址干扰、互调干扰等,这些都可能导致信号质量下降、通信中断甚至系统崩溃。本资料主要探讨了无线通信系统中的干扰类型、检测方法及相应的解决策略。 一、干扰类型...

    visio 2007在Windows7下Crash崩溃的解决办法

    建议在修改任何注册表项之前,先备份注册表或创建系统还原点,以免不慎造成系统不稳定或其他问题。此外,对于非技术背景的用户,寻求专业人员的帮助也是一个明智的选择。希望以上信息能够帮助解决你在使用Visio 2007...

    基于远程通信通用型电气设备智能在线监测系统.rar

    6. 安全性与可靠性:电气设备的监测系统必须保证数据传输的安全性和系统的稳定性,以防止信息泄露和系统崩溃。 7. 用户界面与报警机制:友好的用户界面让操作员能轻松理解设备状态,而及时的报警机制则能在设备出现...

    电信设备-避免通信系统中过载状态的方法.zip

    1. **过载定义与影响**:过载通常指通信系统接收或处理的信号或数据量超过了其设计能力,导致系统性能急剧下降,甚至可能造成系统崩溃。这可能会影响到服务质量(QoS)、用户满意度、数据传输速度以及网络的可用性。...

    电信设备-提供自适应轮询的通信系统.zip

    在现代通信系统中,自适应轮询是一种优化网络性能的关键技术。这个压缩包“电信设备-提供自适应轮询的通信系统.zip”包含了对这一主题的深入探讨,特别是通过提供的PDF文档“提供自适应轮询的通信系统.pdf”。本文将...

    电磁干扰对通信和电子系统的破坏性影响外文翻译.pdf

    电磁干扰对通信和电子系统的破坏性影响是非常严重的,可能会导致系统的崩溃、数据的丢失、经济的损失等。因此,为了确保系统的可靠性和安全性,必须采取相应的措施来防止电磁干扰的影响。 在设计电子系统和通信系统...

    电信设备-一种通信机房用节能水冷却系统.zip

    - 机房冷却:由于通信设备的高功率密度和持续运行,产生的热量如果不及时散发,会导致设备过热,可能引起硬件故障甚至系统崩溃。 - 节能需求:传统的空调冷却方式能耗高,对环境造成较大影响,因此,开发节能冷却...

    信息系统风险识别.xlsx

    " ,,2、硬件安全风险,"1)信息系统的多组件在设计、制造和组装中、由于人为和自然的原因,造成系统崩溃。 2)信息系统的通讯链路由于自然或人为因素造成中断,从而导致信息系统崩溃的。 " ,,3、软件安全风险,"1)...

    变电站综合自动化系统的问题浅析.rar

    设计不当可能导致数据传输延迟、系统崩溃等问题。因此,系统设计应遵循模块化、标准化原则,确保各部分之间良好的接口匹配。 二、数据采集与处理 数据采集是自动化系统的基础,但可能会出现数据丢失、错误或不一致...

    关于数据通信网络维护与网络安全问题的探讨.pdf

    硬件故障可能导致数据丢失、系统崩溃等问题。其次是病毒入侵,计算机病毒已成为网络安全的主要威胁之一,它们可以迅速传播,并对网络系统造成严重破坏。接着是软件漏洞,软件在运行过程中可能会出现漏洞,这些漏洞...

    驱动层ring0和应用层ring3软件通信.zip

    尽管这种方法可以提高效率,但风险较高,因为错误的I/O操作可能会导致系统崩溃。 **文件结构解析** 在"驱动层ring0和应用层ring3软件通信.zip"的文件中,"Include"可能包含了通信过程所需的头文件,定义了接口和...

    通信协议标准flexray总线的功能安全性详解文档.pdf

    通信故障有五种表现形式:造成值域的错误、造成时域的错误、数据完整性错(拜占庭错)、系统崩溃和丢帧。这些故障可能会引起系统性的失效,例如安全气囊引爆相关的传感器消息不能在数ms内送达就引起安全问题。 1.3 ...

    电力系统安全稳定问题研究.pdf

    频率波动过大可能会引发系统崩溃,导致整个电网停运。 电力系统安全稳定的研究不仅关注同步运行稳定性,还涵盖了电压稳定性和频率稳定性。对于这些问题的研究,通常包括理论分析、模型建立、仿真模拟以及实际系统中...

    变电站厂站自动化系统安全问题的探索与思考 (2).pdf

    自动化系统中的子系统作为弱电系统,一旦受到这些干扰,就可能出现传输数据错误、通讯中断、计算机系统崩溃等问题。由于缺少对不同类型产品的结构问题的具体规定,不同生产商生产的保护系统、控制系统等在数据接口...

    机房通信网络安全隐患及管理技术.pdf

    员工的操作失误也可能导致病毒的传播,造成系统崩溃或数据损失。 1.4 程序员责任意识淡薄 机房的维护和安全防护很大程度上依赖于程序员的专业技能和责任意识。如果程序员缺乏对安全问题的足够认识,无法及时发现和...

    崩溃上报程序Crash report,自己写的,C#,很不错

    此外,还要考虑上报策略,避免频繁上报同一问题,以免对服务器造成过大压力。 最后,崩溃报告发送成功后,可以在服务器端建立一个数据库或日志系统,用于存储和管理接收到的崩溃报告。通过数据分析工具,开发者可以...

Global site tag (gtag.js) - Google Analytics