- 浏览: 482304 次
- 性别:
- 来自: 湖南
文章分类
- 全部博客 (201)
- j2ee (43)
- oracle (9)
- mysql (7)
- db2 (1)
- j2se (3)
- spring (1)
- hibernate (3)
- struts (0)
- Berkeley DB (0)
- linux (60)
- Apache2+PHP+MYSQL (2)
- solr (15)
- svn (1)
- IntelliJ Idea (1)
- eclipse,myeclipse (4)
- ant (2)
- vim (8)
- IT生活 (4)
- 测试 (6)
- lucene (4)
- shell (1)
- nutch (18)
- thread (1)
- hadoop (5)
- mapreduce (0)
- Python (4)
- 硬件 (1)
- database (1)
- maven (1)
- 正则表达 (0)
- 互联网 (1)
最新评论
-
youngcoder:
good job
HTTP协议头部与Keep-Alive模式详解 -
javazdq:
受教了 解释的不错。
lucene创建索引高级特性和索引创建参数优化 -
josico:
有几个问题想问下楼主1. LinkedBlockingQueu ...
生产者-消费者-BlockingQueue -
annybz:
有没有关于 BlockingQueue和ConcurrentL ...
生产者-消费者-BlockingQueue -
uniquejava:
多谢,记录的很真实。
DB2 学习记录
[转载] http://hi.baidu.com/stickliu/blog/item/ecef88a30bfe8fa4cbefd009.html
前言:经常检查Apache的连接数,同样会发现很多无用的Time_Wait连接。有人说这是正常的,是因为一个请求中途中断造成的;还有人说 微软的IE连接时产生的Time_wait会比用Firefox连接时多。个人认为有一定的Time_wait是正常的,
如果超过了连接数 的比例就不是很正常,所以还是找来方法解决一下。
[root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
[root@aaa1 ~]#
vi /etc/sysctl
增加或修改net.ipv4.tcp_tw值:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
使内核参数生效:
[root@aaa1 ~]# sysctl -p
[root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw
net.ipv4.tcp_tw_reuse
= 1
net.ipv4.tcp_tw_recycle
= 1
设置这两个参数: reuse
是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接; recyse
是加速TIME-WAIT sockets回收
用netstat再观察正常
这里解决问题的关键
是如何能够重复利用time_wait的值,我们可以设置时检查一下time和wait的值
#sysctl -a | grep time | grep wait
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
今天检查了一下基本一台服务器,发现TIME_WAIT高到3k多(正常1000-2000没有问题).
TIME_WAIT本身并不会占用很大资源的,除非受到攻击.但太多服务器还是有可能挂掉.
TIME_WAIT 3699
CLOSE_WAIT 52
FIN_WAIT1 32
SYN_SENT 1
FIN_WAIT2 2
ESTABLISHED 17
SYN_RECV 45
CLOSING 6
根据《TCP/IP详解》 中的TCP的建立和终止中有关"TCP的终止"的讲解
TCP的终止通过双方的四次握手实现。发起终止的一方执行主动关闭,响应的另一方执行被动关闭。
1. 发起方更改状态为FIN_WAIT_1,关闭应用程序
进程,发出一个TCP的FIN段;
2. 接收方收到FIN段,返回一个带确认序号的ACK,同时向自己对应的进程发送一个文件
结束符EOF,同时更改状态为CLOSE_WAIT,发起方接到ACK后状态更改为FIN_WAIT_2;
3. 接收方关闭应用程序进程,更改状态为LAST_ACK,并向对方发出一个TCP的FIN段;
4. 发起方接到FIN后状态更改为TIME_WAIT,并发出这个FIN的ACK确认。ACK发送成功后(2MSL内)双方TCP状态变为CLOSED。
我们不难看出上面的显示的结果的意思。根据TCP协议,主动发起关闭的一方,会进入TIME_WAIT状态(TCP实现必须可靠地终止连接的两个方向(全双工关闭)),持续2*MSL(Max Segment Lifetime),缺省为240秒.
为什么 TIME_WAIT 状态需要保持 2MSL 这么长的时间?
TIME_WAIT 的等待时间为2MSL,即最大段生存时间.如果 TIME_WAIT 状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。第二个拥有相同相关五元组的连接出现(因为连接终止前发起的一方可能需要重发 ACK,所以停留在该状态的时间必须为MSL的2倍。),而第一个连接的重复报文到达,干扰了第二个连接。TCP实现必须防止某个连接的重复报文在连接终 止后出现,所以让TIME_WAIT态保持时间足够长(2MSL),连接相应方向上的TCP报文要么完全响应完毕,要么被丢弃。建立第二个连接的时候,不 会混淆。
注:MSL(最大分段生存期)指明TCP报文在Internet上最长生存时间,每个具体的TCP实现都必须选择一个确定的MSL 值。RFC 1122建议是2分钟,但BSD传统实现采用了30秒。TIME_WAIT 状态最大保持时间是2 * MSL,也就是1-4分钟。
对apache的操作
HTTP
协议1.1版规定default行为是Keep-Alive,也就是会重用TCP连接传输多个request/response.所以我打开http中的
keepalive On,发现TIME_WAIT就立刻少了下来.只有300的样子.总结一下.我认为有二个原因.
1.keepalive没有开,导致每次请求都要建立新的tcp连接,请求完成以后关闭,增加了很多time_wait的状态,没有重用,KeepAlive我认为它指的是保持连接活跃,类似于Mysql
的永久连接。如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。
2.然后keepalive在系统
中本身的值很高.默认空闲连接 7200 秒(2 小时)内没有活动.才会断开.
我们开启KeepAlive :
KeepAlive On
MaxKeepAliveRequests 120
KeepAliveTimeout 15
这样每个连接可以发送100次请求,超时时间为15秒(如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接)。
有关内核级别的keepalive和time_wait的优化调整
vi /etc/sysctl
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog =8096
修改完记的使用sysctl -p 让它生效
以上参数的注解
/proc/sys/net/ipv4/tcp_tw_reuse
该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。
/proc/sys/net/ipv4/tcp_tw_recycle
recyse是加速TIME-WAIT sockets回收
对 tcp_tw_reuse和tcp_tw_recycle的修改,可能会出现.warning, got duplicate tcp line warning, got BOGUS tcp line.上面这二个参数指的是存在这两个完全一样的TCP连接,这会发生在一个连接被迅速的断开并且重新连接的情况,而且使用的端口和地址相同。但基本 上这样的事情不会发生,无论如何,使能上述设置会增加重现机会。这个提示不会有人和危害,而且也不会降低系统性能,目前正在进行工作
/proc/sys/net/ipv4/tcp_keepalive_time
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时
/proc/sys/net/ipv4/tcp_fin_timeout 最佳值和BSD一样为30
fin_wait1状态是在发起端主动要求关闭tcp连接,并且主动发送fin以后,等待接收端回复ack时候的状态。对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。
/proc/sys/net/core/netdev_max_backlog
该文件指定了,在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
发表评论
-
ifstat命令行统计网络流量
2012-06-05 15:31 5511关于统计网络流量的问题,我喜欢用命令行方式查看: ... -
CentOS 5: Make Command not Found
2012-05-22 17:50 1392个人博客:http://demi-panda.com ... -
Linux Deepin 安装永中 Office2012 个人版(更新)
2012-05-18 19:41 1522下面讲解如何在 Linux Deepin 上安装并使用永中 O ... -
Piwik 网站分析系统
2012-04-25 15:38 2953个人博客:http://demi-panda.com ... -
C3P0使用出错!
2012-04-18 21:43 2062个人博客:http://demi-panda.com/ ... -
win7、ubuntu11.10双系统,win7重装后,如何找回linux
2012-03-25 18:40 1380个人博客:http://demi-panda.com ... -
stardict 词库安装
2012-03-22 11:32 1484下载词库文件以后直接在目录下执行 tar -xjvf ... -
ubuntu 64位 安装 永中Office
2012-03-21 11:07 0Ubuntu 64位默认是不能安装永中Office的,因为它不 ... -
is not in the sudoers file
2012-02-15 17:23 1083解决方案: 首需要切换到root身份 $su - (注意 ... -
is not in the sudoers file
2011-12-22 14:00 991解决方案: 首需要切换到root身份 $su - (注意 ... -
进程间通信IPC、LPC、RPC
2011-05-25 15:12 2061进程间通 ... -
ubuntu下virtualbox虚拟机XP里使用USB
2011-05-19 09:25 2494环境:ubuntu10.04下安装virualbox,虚拟 ... -
Shell 判断文件类型
2011-05-11 15:45 3699#!/bin/sh ... -
Linux wget 详解
2011-05-07 16:05 4674个人技术博客:http://dem ... -
linux curl命令详解
2011-04-30 15:36 5999个人技术博客:http://demi-panda.com ... -
Ffmpeg快速命令使用
2011-03-24 15:52 1828Ffmpeg使用语法 ffmpeg [[opt ... -
Linux远程备份工具Rsync使用案例
2011-02-24 10:31 3522个人技术博客:http://dem ... -
linux下的命令行下转换媒体格式工具FFMPEG详解
2011-02-15 17:25 6662在windows下有格式工厂之 ... -
Linux下tar bz gz等压缩包的压缩和解压
2011-02-12 12:58 1422解压 就用得挺熟 ... -
后台执行命令
2011-01-21 17:29 1440后台执行命令 当你在终端或控制台工作时,可能不希望由于运行一 ...
相关推荐
当服务器之间的通信过于频繁,如通过REST请求互相调用时,Java服务器可能无法及时回收TCP连接,导致TIME_WAIT状态的连接积累。 TIME_WAIT状态是TCP连接生命周期的一部分,它确保数据完全传输并且防止旧的数据包被误...
2. TCP/IP协议的设计,为了防止旧连接的延迟数据影响新连接,以及确保TCP连接可靠关闭,会将连接保持在TIME_WAIT状态一段时间,通常是两倍的MSL(最大段生存期)。 过多的TIME_WAIT连接虽然在正常情况下不会占用...
TCP/IP Socket编程是构建网络应用程序的基础,它允许不同计算机之间的数据交换,广泛应用于各种网络服务,如Web服务器、邮件服务器、文件传输等。 本书主要涵盖以下几个核心知识点: 1. **TCP/IP基础**:首先,你...
- 客户端创建Socket实例,指定服务器的IP地址和端口号,然后调用connect()方法建立连接。 - 服务器端通过ServerSocket监听特定端口,当有客户端连接请求时,accept()方法会返回一个新的Socket对象。 3. **数据...
本文将深入探讨如何优化Linux下的socket连接数以及如何调整sysctl参数,特别是time_wait状态的影响。这有助于提升服务器处理大量并发请求的能力,确保服务的稳定性和响应速度。 首先,我们需要了解socket连接数的...
问题描述:在Linux系统中高并发的Squid服务器,TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。解决方法:通过修改Linux内核参数,可以减少linux服务器的IME_WAIT套接字数量。vi /etc/sysctl.conf...
在IT行业中,网络通信是至关重要的,而TCP/IP(传输控制协议/因特网协议)作为互联网的基础,其性能直接影响到业务的效率和用户体验。本文将深入探讨如何通过TCP/IP协议来识别并解决可能导致业务性能下降的问题,...
1. **TCP连接管理**:介绍TCP三次握手和四次挥手的过程,以及TIME_WAIT和CLOSE_WAIT等状态的理解与处理,帮助开发者理解连接建立与关闭的机制。 2. **TCP滑动窗口机制**:详细解析TCP流量控制和拥塞控制,如何通过...
如果大量的 Time_wait ...使用 TCP Keepalive:TCP Keepalive 可以在服务器端和客户端之间建立持久连接,避免连接断开后导致的 TIME_WAIT 状态。 使用传输层网关:传输层网关可以代替服务器端和客户端之间的直接连接,
在TCP/IP协议栈中,CLOSE_WAIT是一个非常关键的连接状态,它涉及到客户端和服务器之间的通信。这个状态在处理网络连接时可能出现的问题时尤其重要。本文将深入探讨CLOSE_WAIT错误的含义、原因以及如何解决。 首先,...
此外,理解和应用TCP选项,如TCP_NODELAY(禁用Nagle算法)、TCP_KEEPALIVE(维持连接活性)等,也是提高网络通信效率和稳定性的重要手段。 在网络层,IP协议处理数据包的路由和分片,而ICMP(Internet Control ...
此外,理解和处理网络异常情况,如半关闭状态、TIME_WAIT、重传超时等问题也至关重要。 在实际应用中,可能会遇到网络延迟、丢包、拥塞等问题,这时候需要运用TCP的流量控制和拥塞控制机制。滑动窗口协议是TCP流量...
3. **建立连接**:客户端使用Socket类的connect()方法向服务器发起连接请求,服务器端通过ServerSocket的accept()方法接收连接请求,形成一个Socket实例,表示客户端和服务器之间的连接已经建立。 4. **数据交换**...
3. 使用持久化连接:在客户端和服务器之间使用长连接,这有助于减少因短连接频繁建立和关闭而导致的TIME_WAIT状态。但是需要注意长连接的管理,避免长连接过于持久化导致资源耗尽。 4. 检查客户端行为:确保客户端...
- 设置合理的TIME_WAIT和CLOSE_WAIT超时,避免资源浪费。 - 使用半关闭状态(一方停止发送数据,但允许接收数据),让服务器在确认无更多数据发送后立即发送FIN报文。 - 配置TCP Keepalive选项,定期发送探测报文...
例如,可以使用`setsockopt()`函数,配合`SOL_SOCKET`和`SO_KEEPALIVE`选项,以及`TCP_KEEPCNT`、`TCP_KEEPIDLE`和`TCP_KEEPINTVL`来分别设置上述三个参数。 在实际应用中,理解并正确配置Keepalive参数至关重要。...
TCPIP教程.zip 本教程内容包括: 以太网 TCP/IP协议: 三次握手,四次握手,keepalive选项 DNS协议 UDP协议 RPC原理 NFC协议 链路层介绍
《TCP/IP高效编程:改善网络程序的44个技巧》这本书是网络编程领域的经典之作,旨在帮助开发者提高在TCP/IP协议栈上构建高效、稳定、可靠网络程序的能力。书中涵盖了一系列实用技巧,通过深入理解TCP/IP协议的工作...
设置好keepalive以后,我们通过实验来看看当client异常退出或是网络断掉的情况下,keepalive怎么通知我们异常断开的情况。这里采用select模式,实验环境为XP系统和Win7系统,几种情况返回值如下: 1. 正常断开 ...
### Time-wait详解和解决方案 #### 一、产生原因 在TCP协议中,当一个连接关闭时,会经历四个步骤的交互(通常称为四次挥手)以确保双方都已经停止发送数据并确认对方也已停止接收数据。在这个过程中,主动发起...