close wait什么意思
close wait在英文中我们很少看到,但它却确确实实地存在着,它的意思是什么呢下面是我给大家整理的close wait什么意思,供大家参阅!
close wait什么意思等待结束
TIME WAIT和CLOSE WAIT状态区别在服务器的日常维护过程中,会经常用到下面的命令:
它会显示例如下面的信息:
[plain] view plain copy
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 814
CLOSE_WAIT 1
FIN_WAIT1 1
ESTABLISHED 634
SYN_RECV 2
LAST_ACK 1
常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。
TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两个:CLOSE_WAIT和TIME_WAIT。
TIME_WAIT
TIME_WAIT 是主动关闭链接时形成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。 由于TIME_WAIT 的时间会非常长,因此server端应尽量减少主动关闭连接
CLOSE_WAIT
CLOSE_WAIT是被动关闭连接是形成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,因此进入CLOSE_WAIT状态。但如果服务器端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在很多CLOSE_WAIT状态的连接。此时,可能是系统忙于处理读、写操作,而未将已收到FIN的连接,进行close。此时,recv/read已收到FIN的连接socket,会返回0。
为什么需要 TIME_WAIT 状态
假设最终的ACK丢失,server将重发FIN,client必须维护TCP状态信息以便可以重发最终的ACK,否则会发送RST,结果server认为发生错误。TCP实现必须可靠地终止连接的两个方向(全双工关闭),client必须进入 TIME_WAIT 状态,因为client可能面 临重发最终ACK的情形。
为什么 TIME_WAIT 状态需要保持 2MSL 这么长的时间
如果 TIME_WAIT 状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。第二个拥有相同相关五元组的连接出现,而第一个连接的重复报文到达,干扰了第二个连接。TCP实现必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT状态保持时间足够长(2MSL),连接相应方向上的TCP报文要么完全响应完毕,要么被 丢弃。建立第二个连接的时候,不会混淆。
TIME_WAIT 和CLOSE_WAIT状态socket过多
如果服务器出了异常,百分之八九十都是下面两种情况:
1服务器保持了大量TIME_WAIT状态
2服务器保持了大量CLOSE_WAIT状态,简单来说CLOSE_WAIT数目过大是由于被动关闭连接处理不当导致的。
因为Linux分配给一个用户的文件句柄是有限的,而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的通道就一直被占着,而且是“占着茅坑不使劲”,一旦达到句柄数上限,新的请求就无法被处理了,接着就是大量Too Many Open Files异常,Tomcat崩溃。
netstat listening close wait established等是什么意思端口占用查询命令“netstat”详解 Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。 如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。 Netstat 详细参数列表 C:\>netstat / 显示协议统计信息和当前 TCP/IP 网络连接。 NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval] -a 显示所有连接和监听端口。 -b 显示包含于创建每个连接或监听端口的可执行组件。在某些情况下已知可执行组件 拥有多个独立组件,并且在这些情况下包含于创建连接或监听端口的组件序列被显示。 这种情况下,可执行组件名在底部的 [] 中,顶部是其调用的组件,等等,直到 TCP/IP 部分。注意此选项可能需要很长时间,如果没有足够权限可能失败。 -e 显示以太网统计信息。此选项可以与 -s 选项组合使用。 -n 以数字形式显示地址和端口号。 -o 显示与每个连接相关的所属进程 ID。 -p proto 显示 proto 指定的协议的连接;proto 可以是 下列协议之一: TCP、UDP、TCPv6 或 UDPv6。 如果与 -s 选项一起使用以显示按协议统计信息,proto 可以是下列协议之一: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。 -r 显示路由表。 -s 显示按协议统计信息。默认地,显示 IP、 IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息; -p 选项用于指定默认情况的子集。 -v 与 -b 选项一起使用时将显示包含于 为所有可执行组件创建连接或监听端口的 组件。 interval 重新显示选定统计信息,每次显示之间 暂停时间间隔(以秒计)。按 CTRL+C 停止重新 显示统计信息。如果省略,netstat 显示当前 配置信息(只显示一次) (Win2000) C:\>netstat / Displays protocol statistics and current TCP/IP network connections NETSTAT [-a] [-e] [-n] [-s] [-p proto] [-r] [interval] -a Displays all connections and listening ports -e Displays Ethernet statistics This may be combined with the -s option -n Displays addresses and port numbers in numerical form -p proto Shows connections for the protocol specified by proto; proto may be TCP or UDP If used with the -s option to display per-protocol statistics, proto may be TCP, UDP, or IP -r Displays the routing table -s Displays per-protocol statistics By default, statistics are shown for TCP, UDP and IP; the -p option may be used to specify a subset of the default interval Redisplays selected statistics, pausing interval seconds between each display Press CTRL+C to stop redisplaying statistics If omitted, netstat will print the current configuration information once Netstat的一些常用选项 netstat -s——本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。 netstat -e——本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量。 netstat -r——本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。 netstat -a——本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接,断开连接(CLOSE_WAIT)或者处于联机等待状态的(TIME_WAIT)等 netstat -n——显示所有已建立的有效连接。 接下来我们来看一下,微软是怎么说的 微软公司故意将这个功能强大的命令隐藏起来是因为它对于普通用户来说有些复杂。我们已经知道:Netstat它可以用来获得你的系统网络连接的信息(使用的端口,在使用的协议等 ),收到和发出的数据,被连接的远程系统的端口,Netstat在内存中读取所有的网络信息。 在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 看其中有个localaddress 和一个foreignaddress如果没打开任何网络连接,却有established说明就有问题,注意,你得保证没有你开的任何的网络连接,包括后台进程,如果还是有established说明才有问题。
在使用Ubuntu使用apt-get install wine时,导致下载处于假死状态,不论将dpkg命令杀死,还是按照提示sudo apt-get --configure -a,一直处于假死状态,导致无解,最终也无法使用系统自带的更新操作。
问题场景
Ubuntu 1204 32位
解决方案
进入终端:CTRL+ALT+T
杀掉dpkg进程
命令:ps -af | grep dpkg,列出所有的dpkg的pid
命令:kill 进程PID,要将所有的dpkg杀掉
删除dpkg锁
sudo rm -rf /var/cache/apt/archives/lock
sudo rm -rf /var/lib/dpkg/lock
删除已有安装包
sudo dpkg -r wine
sudo apt-get --purge remove wine
URL:http://wwwbiancengcn/OS/Linux/201410/45760htm
到Adobe官方下载最新的wine包,http://mirrorsibiblioorg/wine/source/,当前发表博文之前最新的为16版
准备工作
sudo apt-get install flex bison
sudo apt-get install build-essential
sudo tar jxvf winexxxtarbz2
进入wine目录,sudo /configure --without-x --without-freetype
sudo make #这个时间会很长,耐心等待
sudo make install #这个时间会很长,耐性等待
安装完成后,就已经可以使用wine了
1:php-cgi进程数不够用 (我就是采用此方法解决的)
vim php-fpmconf
修改其中的2个参数
(1)在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpmconf 将其中的max_children值适当增加
这个数值是不确定的 需要我们自己算的,这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少,减小出现502错误的机率。
一般来说,一台服务器的正常情况下每一个php-cgi要耗费的内存为20M左右。如果我就将此值设为80,那么也就是说大概要耗费服务器1600M内存。
查看一下当前系统中有多少个php-cgi进程在运行
netstat -anpo | grep php-cgi | wc -l
如果这个值接近你的在配置文件里面设置的值,说明需要增加
注:这要根据机器的实际情况而定,每个机器的硬件设施和环境不一样
参数为:<value name=”max_children”>80</value>
(2)另外一个参数就是php-cgi脚本的执行时间
<value name=”request_terminate_timeout”>0s</value>这里写0s的意思是让php-cgi一直执行下去,没有时间限制。
注意:如果你做不到这一点,也就 是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI假死那么就建议你给 request_terminate_timeout赋一个值,这个值可以根据服务器的性能进行设定。一般来说性能越好你可以设置越高,20分钟-30分 钟都可以。
修改完这两个参数,重启一下php-cgi,看是否还出现502错误
2: php执行时间长
php执行超时,修改/usr/local/php/etc/phpini 将max_execution_time 改为300
重启一下php-cgi,看是否还出现502错误
3: php-cgi进程死掉
杀死其进程,重启php-cgi
第一,Linux系统内核开源。全球顶尖黑客为Linux内核贡献代码。
第二,Linux设计思想源自Unix,而Unix Like系统的稳定性、安全性和网络性能是经历了历史考验滴。
第三,我想你问的是Android手机系统吧。Google整合了Linux内核、重新建立了为嵌入式系统打造的C/C++库(即Bionic)、重写了Java虚拟机(即Dalvik)、实现了一个轻量级RPC/IPC系统(即binder)、给了一个Java应用开发框架(Framework),使得Java程序员可以快速开发Android上的应用。老实说Android系统确实系出名门(即便名门之后,若是没点水准,就算开源也是没人理滴),其设计哲学相当滴那个那个。总之Android还是很nice的。
至于webOS和Apple的IPhone么,不了解不评论。而诺记的Symbian OS是明日黄花,其最主要的缺点是开发个应用要难死应用开发人员。相比较来说,在Android上面使用Java开发应用要爽快多了。MeeGo至今没见影。而且MeeGo也是基于Linux内核的。
Windows Mobile7对WinM7 vs Android,目前基本上还是看好Android。
最后Linux是一个值得尊重的系统。总之若是没有Linux,世界就没这么精彩了
0条评论