- 浏览: 127092 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (111)
- 资料总结参阅 (2)
- To Study List (2)
- notepaper (2)
- linux学习 (32)
- linux学习-included (3)
- 开源框架-Hibernate (2)
- 开源框架-Ibatis (1)
- JEE整理 (25)
- JEE Server参考 (5)
- 开源框架-Spring (1)
- 硬件知识 (5)
- 开发环境搭建及管理 (7)
- linux软件工具 (2)
- 数据库 (8)
- 各类文档参考 (1)
- 开源框架-Netty (1)
- 性能调优 (1)
- DP相关 (1)
- 软件知识 (3)
- 脚本语言-python (2)
- 脚本语言-perl (1)
- 分布式 (2)
最新评论
-
zhuxinhua:
谢谢,,这东西真不容易找啊。。
JBoss配置---收集中...
修改linux系统/etc/sysctl.conf配置来解决这个问题:
#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
也就是说,这条命令可以把当前系统的网络连接状态分类汇总。
下面解释一下为啥要这样写:
一个简单的管道符连接了netstat和awk命令。
——————————————————————
先来看看netstat:
netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT
你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。
——————————————————————
再来看看awk:
/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录。
state[]
相当于定义了一个名叫state的数组
NF
表示记录的字段数,如上所示的记录,NF等于6
$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT
state[$NF]
表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数
++state[$NF]
表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一
END
表示在最后阶段要执行的命令
for(key in state)
遍历数组
print key,”\t”,state[key]
打印数组的键和值,中间用\t制表符分割,美化一下。
如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vim /etc/sysctl.conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效。
Linux下高并发的Squid服务器,TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Squid服务器的TIME_WAIT套接字数量。
vi /etc/sysctl.conf
增加以下几行:引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
说明:
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
执行以下命令使配置生效:
/sbin/sysctl -p
#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
也就是说,这条命令可以把当前系统的网络连接状态分类汇总。
下面解释一下为啥要这样写:
一个简单的管道符连接了netstat和awk命令。
——————————————————————
先来看看netstat:
netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT
你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。
——————————————————————
再来看看awk:
/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录。
state[]
相当于定义了一个名叫state的数组
NF
表示记录的字段数,如上所示的记录,NF等于6
$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT
state[$NF]
表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数
++state[$NF]
表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一
END
表示在最后阶段要执行的命令
for(key in state)
遍历数组
print key,”\t”,state[key]
打印数组的键和值,中间用\t制表符分割,美化一下。
如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vim /etc/sysctl.conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效。
Linux下高并发的Squid服务器,TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Squid服务器的TIME_WAIT套接字数量。
vi /etc/sysctl.conf
增加以下几行:引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
说明:
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
执行以下命令使配置生效:
/sbin/sysctl -p
发表评论
-
linux网络流量监控工具: iftop
2011-04-17 18:46 1065主页:http://www.ex-parrot.com ... -
建立NFS共享
2011-04-17 18:41 783服务端: 修改 /etc/exports,增加共享目录 /ex ... -
巧用Linux命令完成统计排序功能
2011-03-11 16:50 874前几天碰到一个问题: ... -
linux 程序运行前后台切换
2011-03-10 21:57 1213Shell支持作用控制,有 ... -
Socket基础知识(建立连接的三次握手,关闭连接的四次握手)
2011-01-27 15:46 7764refer to: http://www.cnitblog.c ... -
通过修改Linux服务自动启动指定应用程序(涉及运行级别)
2011-01-24 10:16 920转自:http://www.cnblogs.com/inter ... -
linux shell编程if语句内判断参数详解
2011-01-23 21:28 889shell 编程中使用到得if语句内判断参数 –b 当f ... -
【转载】配置开发支持高并发TCP连接的Linux应用程序全攻略
2010-12-15 23:46 877原文见:http://www.cppblog. ... -
命令收集(notepad)
2010-12-07 21:11 7281. grep cat app.log | grep 'ERR ... -
linux上面的sz,rz命令与ssh的配合
2010-09-10 14:16 756问题的提出: 一 ... -
apache动态加载module
2010-08-26 17:58 766From blog: http://fangrn.iteye. ... -
apt命令详解
2010-08-22 16:11 825常用的APT命令参数: apt-cache searc ... -
linux学习网址
2010-08-19 17:09 6821. http://lamp.linux.gov.cn -
jboss部署成为linux服务
2010-08-10 17:00 18291. 创建jboss用户 useradd -m jbos ... -
Shell学习
2010-08-10 14:14 7541. 如何清空一个文件 cat /dev/null &g ... -
关于网络
2010-08-05 10:41 7401. OSI七层协议 物理层,数据链路层,网络层, ... -
关于linux中环境变量的设置
2010-05-10 11:49 803at /etc/profile append the fol ... -
eclipse查看安装-dropins
2010-04-22 14:35 1559Eclipse 3.4插件安装方式 以前安 ... -
ftp命令详解
2010-04-21 16:46 988linux下ftp命令 FTP命令是Internet用户使用 ... -
find命令详解
2010-04-20 13:50 822作者:Sheryl Calish 简单 ...
相关推荐
在Linux服务器环境中,当TCP/IP连接关闭后,服务器端的...通过上述方法,可以有效地管理和减少Linux服务器上的TIME_WAIT状态连接,优化服务器性能,尤其是对于处理大量并发连接的服务器,如Squid,这些调整尤为重要。
总结来说,优化Linux服务器的socket连接数和sysctl配置对于处理高并发场景至关重要。通过调整`sysctl.conf`文件中的相关参数,可以有效地提升系统性能,降低延迟,增强服务的稳定性。不过,任何改动都需要结合具体...
在Linux系统中,进行网络编程时,TCP连接的TIME_WAIT状态是至关重要的一个环节。TIME_WAIT状态是TCP连接生命周期中的最后一个阶段,对于理解和优化网络应用性能有着直接的影响。本资源"TIME_WAIT.rar"包含了关于这个...
4. 关闭 TIME_WAIT 连接:使用 netstat -ant | grep TIME_WAIT | awk '{print $2}' | xargs kill -9 命令可以关闭 TIME_WAIT 连接。 网络连接状态详解: 网络连接状态可以分为 12 种可能的状态,前面 11 种是按照 ...
Linux服务器上的网络连接状态是监控和管理服务器性能的关键部分,特别是对于处理大量网络通信的服务而言。TCP(传输控制协议)是互联网上应用最广泛的协议之一,它为两个通信端点提供可靠的、面向连接的数据传输服务...
开发者还需要了解如何处理TCP异常,比如半开连接、TIME_WAIT状态的管理等。 总结来说,Linux TCP编程涵盖了从基本的socket接口使用到高级的内核参数调优,是开发网络应用的基础。通过学习和实践,开发者能够构建...
"netstat 命令在 Linux 服务器网络连接状态查看中的应用" Netstat 命令是一个功能强大且广泛使用的网络命令行工具,能够显示网络连接、路由表和网络接口信息。通过使用 Netstat 命令,系统管理员可以实时查看 Linux...
在Linux操作系统中,Socket是一种进程间通信机制,它允许运行在同一台机器上的进程或不同机器上的进程...在实际工作中,对Socket状态的掌握能帮助我们解决诸如连接异常、资源泄漏等问题,提高系统的稳定性和可靠性。
- **复用(Reusing)**:通过设置`SO_REUSEADDR`套接字选项,服务器可以在Socket关闭后立即重新绑定到同一地址,避免了TIME_WAIT状态的等待时间,提高了服务的响应速度。 - **非阻塞(Non-blocking)**:使用`fcntl...
- `SO_REUSEADDR`:允许在TIME_WAIT状态下重用套接字地址,这对于多线程服务器避免等待TIME_WAIT超时特别有用。 - `SO_KEEPALIVE`:在无数据传输时周期性发送探测报文,检查连接是否仍然活跃。 - `TCP_NODELAY`:...
### Linux下Socket编程的端口问题 (Bind(): Address already in use) #### 一、问题背景与常见场景 在进行Linux下的网络编程时,经常会遇到端口绑定失败的问题,尤其是在使用`bind()`函数尝试绑定端口时,可能会...
例如,可以通过修改`/proc/sys/net/ipv4/tcp_`系列的内核参数,如`tcp_congestion_control`选择不同的拥塞控制算法,`tcp_tw_reuse`允许重用TIME_WAIT套接字以减少资源消耗,或`tcp_keepalive_time`设置连接空闲多久...
在Linux环境下,Socket编程是构建网络通信的基本工具。在处理Socket时,往往需要对Socket进行各种设置以优化其性能和适应不同的网络环境。以下是一些关键的Socket设置及其详细解释: 1. **重用地址(SO_REUSEADDR)...
在连接建立和终止过程中,每个状态都有特定的意义,例如TIME_WAIT状态是为了确保双方都能正确关闭连接,防止因网络延迟或数据包丢失导致的问题。在这个状态下,客户端会等待两倍的MSL(Maximum Segment Lifetime)...
在Linux系统中,Socket接口提供了一套标准的API,使得开发者能够方便地实现客户端和服务器之间的连接与通信。本文将深入探讨Linux环境下的TCP/IP Socket编程,并结合博客链接中的内容进行详细解释。 首先,TCP...
其次,若需要在已连接的socket调用`closesocket()`后立即关闭,不经历TIME_WAIT过程,可以设置`SO_DONTLINGER`选项: ```c BOOL bDontLinger = FALSE; setsockopt(s, SOL_SOCKET, SO_DONTLINGER, (const char*)&...
3. **TCP套接字编程**:在Linux中,使用socket API进行TCP编程,包括socket()创建套接字,bind()绑定地址,listen()监听连接,accept()接受连接,connect()发起连接,send()和recv()用于数据传输。 4. **TCP窗口...
TIME_WAIT是TCP连接在主动关闭后进入的一个状态,通常持续一段时间以确保所有尾部数据已送达。通过启用SO_REUSEADDR,程序可以在TIME_WAIT状态结束后立刻重用端口,无需等待整个TIME_WAIT周期。 在Linux中,还可以...