连笔字作品 | 连笔字知识 | 加入收藏 连笔字转换器软件可转换多种连笔字在线预览 网页版 V2.0
连笔字转换器

当前位置:连笔字网 > 知识库 >

closewait,tomcat的CLOSEWAIT是怎么回事

时间:2023-12-30 14:57:16 编辑:连笔君 来源:连笔字网

tomcat的CLOSEWAIT是怎么回事

解决办法: 在调用httpclient时加入一行:
httpmethod.setRequestHeader("Connection", "close");
让这个socket在请求完毕后就关闭.

http://tw.myblog.yahoo.com/robin ... =1430&next=1363
***************************************************************************

CLOSE_WAIT状态的生成原因

如果是CLIENT端主动断掉当前连接的话,那麼双方关闭这个TCP连接共需要四个packet:

Client ---> FIN ---> Server

Client <--- ACK <--- Server

这时候Client端处於FIN_WAIT_2状态;而Server 程序处於CLOSE_WAIT状态。

Client <--- FIN <--- Server

这时Server 发送FIN给Client,Server 就成为LAST_ACK状态。

Client ---> ACK ---> Server

Client回应了ACK,那麼Server 才会成为CLOSED状态。

******************************************************************************
解决方法:
1.(暂时生效,重新启动 linux 後,会还原成预设值)
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_keepalive_time=1800
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2

2.(永久生效)
vi /etc/sysctl.conf
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# 探测次数
net.ipv4.tcp_keepalive_probes=2
# 探测间隔秒数
net.ipv4.tcp_keepalive_intvl=2

编辑完 /etc/sysctl.conf,要重启network 才会生效
[root@temp /]# /etc/rc.d/init.d/network restart
**********************************************************************************
PS: 发生CLOSE_WAIT 的原因,可能在於程式内 一端的Socket使用close後,另一端的Socket没有使用close.检查一下代码内是否有 Server端在某些异常情况时,没有关闭Socket,将之修改,应可改正此一问题

在DOS里,CLOSE-WAIT和TIME-WAIT什么意思?

连接进程是通过一系列状态表示的,这些状态有:LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT和 CLOSED。CLOSED表示没有连接,各个状态的意义如下: LISTEN - 侦听来自远方TCP端口的连接请求; SYN-SENT - 在发送连接请求后等待匹配的连接请求; SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认; ESTABLISHED - 代表一个打开的连接,数据可以传送给用户; FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认; FIN-WAIT-2 - 从远程TCP等待连接中断请求; CLOSE-WAIT - 等待从本地用户发来的连接中断请求; CLOSING - 等待远程TCP对连接中断的确认; LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认; TIME-WAIT - 等待足够的时间以确保远程TCP接收到连接中断请求的确认; CLOSED - 没有任何连接状态; TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS;传送过来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST和FIN;还有超时,上面所说的都会时TCP状态发生变化。

tomcat 为什么会出现close

tomcat启动时会加载在myeclipse中已经关闭的项目的信息,是因为虽然项目已经被关闭,但是仍旧加载在tomcat中,解决的方法是:
找到当时安装tomcat的文件夹,打开,里面有一个workspace--->将其中除过ROOT,和要运行的项目,其他的都删除即可,在此处删除并非将项目删除,只是删除了他们的加载,下次要运行他们是重新加载即可。
另外要注意的就是。每次运行完这个项目后,在加载中将tomcat remove掉,就不会有这样的问题了。
若找不到当时的安装包,就打开所有的项目,将之前添加到tomcat中的项目remove掉,这样即使不关闭项目,也不会被加载进来。

tomcat优化,监控 tcp连接time-wait咋回事

1)TIME_WAIT: 状态的连接达到了 709

sql server占用的TIME_WAIT最多,还有nginx, tomcat都有一些处于 TIME_WAIT状态。

2)并且最大的端口达到了 65327 ,六万多,几乎接近端口的最大值 65535.

因为是 Windows server 2008,不同Linux下的TCP的调优。

解决方法:将 TcpTimedWaitDelay 调到 30S,让 TIME_WAIT 状态的维持最多30S,默认是4分钟。

如何查看或设置TcpTimedWaitDelay:

cmd中运行 regedit 命令,找到 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/ Services/TCPIP/Parameters 注册表子键

看看有没有 TcpTimedWaitDelay 项,有的话直接修改,没有的话创建一个并创建名为 TcpTimedWaitDelay 的新 REG_DWORD 值。 将此值设置为十进制 30,其为十六进制 0x0000001e。该值将等待时间设置为 30 秒。 停止并重新启动系统。 缺省值:0xF0,它将等待时间设置为 240 秒(4 分钟)。 建议值:最小值为 0x1E,它将等待时间设置为 30 秒。

修改之后,重启系统,在观察,TIME_WAIT在100左右徘徊。效果还是立竿见影的。几天来一直再也没有出现Tomcat假死的情况。

怎么防止tomcat被长连接拖死

你在停止TOMCAT的时候,会调用Catalina类的stopServer方法,在该方法中会取得已经存在的网络连接的Socket对象,将调用Socket的close方法关闭已经当前的网络连接。

所以,当停止tomcat时,如果有新的请求的话,会被拒绝

回答不容易,希望能帮到您,满意请帮忙一下,谢谢 !

tomcat timewait算不算在连接数内的

time wait的连接只能让同一客户端重用 应该在tomcat或apache里配置不使用长连接,就不会有time_wait了,而且time_wait并不会堵塞网络,一般都有默认值的,数量达到一定值就会自动关闭多出来的

java什么时候该写.close()释放资源,不写可以吗?

虽然Java有自动内存回收机制,但是如果是数据库连接、网络连接、文件操作等,不close是不会被回收的,属于不正确的代码。
也就是说,有close方法,必须得自己调用一下才行。
垃圾回收机制仅在Java虚拟机所控制的范围内释放资源。
对于类似于数据库连接、socket以及文件操作等,
如果有close方法,在你完成任务后执行它
并且最好在finally块内做close,因为即使发生了例外,这些代码也能被调用。
对于使用完了的对象来讲,Java不推荐使用类似于C++的析构函数来释放内存(C++中new完后得delete,Java中new完,使用后,将其置
成null比较好),因为GC会调节最适当的时间来释放内存,在程序中滥用delete会降低Java程序的性能(但应该不会引发额外的错误)。

java什么时候该写.close()释放资源?

在Java中对资源的读写最后要进行close操作,以下是2种释放资源处理方式:

第1种:把close()放在try中。

try {

PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(

"out.txt", true)));

pw.println("This is a test.");

pw.close();

} catch (IOException e) {

e.printStackTrace();

第3种:使用try-with-resource语句。

try (PrintWriter pw = new PrintWriter(

new BufferedWriter(

new FileWriter("out.txt", true)))) {

pw.println("This is a test.");

} catch (IOException e) {

e.printStackTrace();

无论是否有异常发生close()方法都应该被调用,因此close()应放在finally中。而从Java 7开始,可以使用try-with-resource语句。

Tomcat7 新jdbc连接池,使用过程中得到连接后,直接执行close方法,但是连接池对关闭的连接未释放

这个情况和WEB的session和关,是连接池就会重用。

Tomcat卡死,jstack后如下信息,一般是什么问题导致?

应该是什么东西获取了某个锁长时间不释放,而很多其他的线程又在等待这个锁。
说明:
1)线程状态是 Blocked,阻塞状态。说明线程等待资源超时!
2)“ waiting to lock <0x000000074ada45b8>”指,线程在等待给这个 0x000000074ada45b8 地址上锁(英文可描述为:trying to obtain 0x000000074ada45b8 lock)。
3)在 dump 日志里查找字符串 0x000000074ada45b8,发现有大量线程都在等待给这个地址上锁。如果能在日志里找到谁获得了这个锁(如locked < 0x000000074ada45b8 >),就可以顺藤摸瓜了。
4)“waiting for monitor entry”说明此线程通过 synchronized(obj) {……} 申请进入了临界区,从而进入了下图1中的“Entry Set”队列,但该 obj 对应的 monitor 被其他线程拥有,所以本线程在 Entry Set 队列中等待。
5)第一行里,"http-nio-8080-exec-7" daemon"是 Thread Name 。tid指Java Thread id。nid指native线程的id。prio是线程优先级。[0x00007f9c557d4000]是线程栈起始地址。

Copyright:2022-2023 连笔字转换器 www.liulisui.com All rights reserved.