一、状态的产生
要解决TIME_WAIT状态过多的问题,先来研究下TIME_WAIT状态的产生,下面是TCP连接断开时的四次挥手状态转换图,说明一点,途中显示的是客户端主动断开连接,tcp连接也可以由服务器端主动断开连接。我们先来描述一下断开的状态:
1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命,RFC规定一个MSL为2min,linux中一般设置为30s)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
可以看到TIME_WAIT状态产生是在tcp连接主动关闭的一端产生的正常tcp状态,超过两个MSL之后,就会关闭,释放占用的端口。基于以上的分析我们可以推断,在我们的应用中产生大量TIME_WAIT状态的根本原因是频繁创建断开连接TCP连接。要解决TIME_WATIT状态过多的问题,就要分析我们的应用把频繁创建的短连接改为长连接。
二、常见的短连接产生的场景
1服务连接服务
后台业务服务器,通常需要调用redis、mysql以及其他>而影响服务器性能的最主要因素就是CPU。无需多言,所有人都清楚处理器对整机性能意味着什么,通常他还决定了所采用的平台和支持的相关技术。 CPU篇 众所周知,各品牌服务器因设计不同,大多数的CPU散热器是不通用的,尤其在高端机型越发明显。本文仅以IBM品牌服务器为例,说说关于服务器配件的三两事。IBM X5550 CPU套件 首先是价格,举例来说,同样一个Xeon E7450(内核数6Core/主频24Ghz/前端总线1066MHz/二级缓存L2 9M/三级缓存L3 12M),在我们理解来说都是一样的,因为都是Intel的产品。但因为各品牌服务器设计不同,通常来说CPU套件也是不能通用的。因为CPU和散热器是不拆分销售的,所以选购不同品牌的服务器升级同样的硬件配置,花费是有些不同的。HP X5550 CPU套件 这样在我们升级处理器的时候就遇到了一个很大的问题。我们只能选用服务器厂商的CPU套件。 把这个话题扩展开来的话,还会涉及一些方面。包括各种渠道的散装CPU,加上各种来源的CPU散热器,就能组成出来很多非正规渠道的CPU套件。通常来说CPU的影响不大,毕竟CPU没有什么假的,我们要关心的是散热器。毕竟选用一款正规的散热器是一件很重要的事情。玩家们用的DIY风扇 与DIY玩家不同,服务器的理念是提供724的稳定性,这不是什么讲究个性甚至换散热器玩超频的事情。所以才会有不同厂家同样配置服务器之间价格上的巨大差异。当然,这不是说贵的就一定在各方面好,便宜的就一定在各方面不好,只是影响价格的其中一个因素。 CPU散热器 很多服务器的CPU散热器都是特别设计的。讲一个笔者曾经亲历的事情,某单位决定升级一批IBM Blade Center HS21的处理器Xeon E5440。有10台刀片式服务器打算把之前的单路配置升级为两路配置,经过各层转达最后订购到了10套CPU组件。配件型号为44R5634,具体内容是Quad-Core Xeon E5440 283GHz 12MB L2 1333MHz 80w 。IBM HS21 CPU套件 有什么问题吗?单看这些参数,大部分对服务器CPU有了解的人可能都不会觉得有问题。可当技术人员拿到这批CPU时候却顿时傻了眼,硕大的处理器散热器根本就无法安装在轻薄的刀片服务器上。机架式服务器CPU套件 正确的选件编号应该是44T1740内容同样是Intel Xeon QC E5440 283GHz 12MB L2 Cache 80w。区别就是CPU套件里提供了不同的散热器。而CPU本身是一样的。不同的编号对应的是不同类型的服务器。 欢迎进入服务器论坛讨论 CPU稳压模块IBM CPU稳压模块 还有一种情况,在Nehalem之前,服务器平台的两路和四路扩展通常需要CPU稳压模块(VRM)。以IBM产品为例,当单路服务器升级为多路时候需要添加一个对应CPU型号的稳压模块,这个稳压模块是随原包的CPU套件提供的。而四路的服务器(例如X3850M2)则有对应的4个稳压模块,这也同样是包含在CPU套件里的。而本身为两路的服务器(例如X3500或X3650)在只有一个CPU的时候是不需要稳压模块的,只有在扩展为两路时候才需要添加稳压模块(且只能添加一块)。HP CPU稳压模块这个VRM可是"非行货"多发配件 抛砖引玉,请大家务必在选购升级服务器时候充分了解关于配件的种种问题。 内存篇 大家都知道服务器内存与普通PC机的内存有所区别,一般都带有ECC校验功能。通常情况下我们会选择与服务器品牌相同的内存品牌。但是实际上内存都是由现代,美光,尔必达,三星等厂商为服务器厂商生产的。所以我们一般情况下不用太在意内存颗粒,但是几乎所有的服务器厂商都会建议用户采用自身服务器品牌的内存进行更换升级。不同的内存条 升级时候还有一点不能忽略,除了选择同样频率的内存,既DDR3-1333Mhz,DDR2-667Mhz等。还应注意,服务器内存通常来说是成组购买升级的。既每个内存通道内,尽量要使用相同品牌、相同颗粒、相同频率、相同电压、相同校验技术(chipkill,ecc)、相同型号(udimm rdimm)的内存条。 这点尤其重要,否则服务器可能会报错。 服务器内存与普通内存有什么区别? 内存校验技术 一般来说也就是后面两种区别较大,通常来说服务器内存都带有校验技术,而普通PC机内存是不具备的。相对传统的ECC校验技术,chipkill又是何方神圣呢?“探路者”探测器登陆火星 在十几年前,相传在遥远的火星上出现了名为“探路者”的怪物…… IBM引入大型机的技术为美国航天局(NASA)的"探路者"探测器赴火星探险而研制了Chipkill。它是IBM公司为了弥补目前服务器内存中ECC技术的不足而开发的,是一种新的ECC内存保护技术。 ECC内存技术虽然可以同时检测和纠正单一比特错误,但如果同时检测出两个以上比特的数据错误,则无能为力。但基于Intel处理器架构的服务器的CPU性能以几何级的倍数提高,而硬盘驱动器的性能同期只提高了5倍,因此为了保证正常运行,服务器需要大量的内存来临时保存从CPU上读取的数据。这样大的数据访问量就导致单一内存芯片在每次访问时通常要提供4(32位)或8(64位)字节以上的数据。一次性读取这么多数据,出现多位数据错误的可能性会大大提高,而ECC又不能纠正双比特以上的错误,这样就很可能造成全部比特数据的丢失,系统就会很快崩溃。IBM的Chipkill技术是利用内存的子结构方法来解决这一难题的。 随着技术的发展,这些年已经出现了关于内存更多的保障技术。 热备内存—Sparing热备内存技术 进行内存热备时,做热备份的内存在正常情况下是不使用的,也就是说系统是看不到这部分内存容量的。每个内存通道中有一个DIMM不被使用,预留为热备内存。芯片组中设置有内存校验错误次数的阈值, 即每单位时间发生错误的次数。当工作内存的故障次数达到这个“容错阈值”,系统开始进行双重写动作,一个写入主内存,一个写入热备内存,当系统检测到两个内存数据一致后,热备内存就代替主内存工作,故障内存被禁用,这样就完成了热备内存接替故障内存工作的任务,有效避免了系统由于内存故障而导致数据丢失或系统宕机。这个做热备的内存容量应大于等于所在通道的最大内存条的容量,以满足内存数据迁移的最大容量需求。 内存镜像—Mirroring内存镜像是将内存数据做两个拷贝,分别放在主内存和镜像内存中。系统工作时会向两个内存中同时写入数据,因此使得内存数据有两套完整的备份。由于采用通道间交叉镜像的方式,所以每个通道都有一套完整的内存数据拷贝。 在系统芯片组中设置有 “容错阈值”。如果任意内存达到了“容错阈值”,其所在通道就被标示出来,另一个通道单独工作。但仍然保持双通道的内存带宽。内存镜像技术 内存镜像有效避免了由于内存故障而导致数据丢失。从上图中可看出,镜像内存和主内存互成对角线分布,如果其中一个通道出现故障不能继续工作,另一个通道仍然具有故障通道的内存数据,有效防止了由于内存通道故障导致的数据丢失,极大提升了服务器可靠性。镜像内存的容量要大于等于主内存容量,当系统工作时,镜像内存不会被系统识别。因此在投资方面,做内存镜像数据保护的投资是没有内存保护功能的一倍。 随着芯片组的发展,和内存通道技术的改变,热备内存和内存镜像实现的方式也在做着改变。像上文介绍的方式已经不适用于Nehalem这代产品的三通道内存和四通道内存产品了。而以上的两种方式为了实现更高的可靠性都会给整个系统带来在内存方面较大的花费,以及由此带来的整个内存系统可用数量下降。 关于UDIMM和RDIMM UDIMM(Unbuffered Dual In-Line Memory Modules)无缓冲双信道内存模块。控制器输出来的地址和控制的信号直接到达DIMM的DRAM芯片上。UDIMM的最大配置 不能支持服务器满配内存,也就是说不能达到最高容量。使用UDIMM内存时最大使用每通道只能用2个插槽,但支持3通道,所以只能每边插6条,一共12条内存,不能满配。性能相对会有下降,但是对于预算控制,是个不错的选择。 RDIMM(Registered Dual In-line Memory Module)带寄存器的双信道内存模块。可以使用系统存储过程或SQL SERVER MANAGEMENT STUDIO(SSMS)工具对SQL SERVER 2005/2008服务器进行设置,对于一般用户来说,第二种方式更为直观与简便,不需要记得复杂的SQL语句及语法,就能在图形化 *** 作界面下来完成大部
分数据库的 *** 作与管理,从SQL SERVER 2005开始,数据库管理方面推出了SSMS组件,此组件把以前版本的"企业管理器"和"查询管理器"两个工具组合到一个界面中,这使各种开发人员和一般的管理员都能轻松的访问SQL SERVER使用SSMS工具可以查看与配置SQL SERVER 2005/2008数据库的服务器属性,本经验以SQL SERVER 2005为例,演示配置的全过程,供大家参考
方法/步骤
1
单击"开始"|"所有序"|Microsoft SQL Server 2005|SQL Server Management Studio命令,或在开始菜单历史项中单击SQL Server Management Studio命令,启动SSMS
按照默认设置不变,点击"连接"按钮,连接到数据库服务器
在"对象资源管理器"中,右键单击服务器,选择"属性"命令
d出"服务器属性"对话框,在"常规"选项卡中,可以查看到服务器相关硬件及软件信息,包括服务器名称,安装的 *** 作系统,内存容量,处理器数量,SQL SERVER版本,安装根目录等信息
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)