论坛首页 Java企业应用论坛

如何知道哪些请求在等待

浏览 4644 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-09-22  
Hi,大家好。
当tomcat服务器面临大用户量的访问时,用shell 命令:netstat -ant查看,会有大量的SYN_RECV的链接,应该是正在等待的链接。
查tomcat access log ,文件里只有已经成功完成响应的url, 里面也给出了request的响应时间。但不知道正在等待的请求有哪些?

我的问题是,我不只是想知道有多少请求在等的,我还想知道正在等待的请求的url是什么?有什么办法或什么shell命令可以知道?
   发表时间:2012-09-24  
tomcat一般检测不到这样的状态,SYN_RECV一般也不好检测到。如你现在看到较多的SYN_RECV,这是没有完成三次握手,服务端等待client发ACK确定最终建立连接。如有大量的SYN_RECV可以考虑是不是遭到DDOS攻击
0 请登录后投票
   发表时间:2012-09-26  
Thanks xiaoZ5919.

SYN_RECV不是很多,每次就20个左右,tomcat响应就很慢,几乎停止服务。这种情况已经多次发生,现在都是一天多重启tomcat一次,才可以正常服务。

20个SYN_RECV应该不会是网络攻击吧,我想如果是网络攻击,应该有上百个吧。

我尝试调整tomcat最大线程数到800,服务器性能如内存,i/o都非常好了,但还是一天多时间就发生一次问题。
每次出现不能访问的问题时,内存、cpu使用率都比较低,数据库连接也不多。我感觉应该是问题出在tomcat这里。大家有什么建议?谢谢!
0 请登录后投票
   发表时间:2012-09-26  
线程数不是越大越好,你用的nio模式还是bio模式。如有大量的SYN_RECV应该调整backlog。tomcat下这个参数通过acceptCount来调整
0 请登录后投票
   发表时间:2012-09-26  
Hi,xiaoZ5919,
SYN_RECV不是大量的,一般在tamcat无法访问时,也就20个左右。
我的tomcat配置是:acceptCount=1000.

关键是在tomcat没有响应时,cpu,内存使用率比较低,也就30%以下。网站http端口连接不超过250个(但tomcat最大线程配置为800),似乎tamcat在阻塞许多请求。所以,十分奇怪。一方面是网站访问无响应,另一方面,服务端http端口没有太多的连接,也就250以下。
我们都曾经怀疑linux的配置有什么问题。为了扩大linux tcp连接能力,我们修改参数:net.ipv4.tcp_max_syn_backlog = 2048。

但还是无法解决问题。

0 请登录后投票
   发表时间:2012-09-26  
嗯backlog的含义 在linux2.2以后发生了变化,按说acceptcount为1000 net.ipv4.tcp_max_syn_backlog = 2048按说已经能支持很高的并发了
那就只能检测jstack 看看tomcat在做什么?或者看看GC的情况 加我QQ吧 论坛讨论太麻烦了
0 请登录后投票
   发表时间:2012-11-20  
xiaoZ5919 写道
嗯backlog的含义 在linux2.2以后发生了变化,按说acceptcount为1000 net.ipv4.tcp_max_syn_backlog = 2048按说已经能支持很高的并发了
那就只能检测jstack 看看tomcat在做什么?或者看看GC的情况 加我QQ吧 论坛讨论太麻烦了



这个问题最终怎么解决的呢?
0 请登录后投票
   发表时间:2012-11-20  
又看了一遍帖子,楼主是说tomcat先停止响应在前,然后才出现的tcp连接有20多个处于SYN_RECV状态。
如果是这样的话,我想是不是你的tomcat进程已经内存溢出在先,已经不工作了。或者你的tomcat的GC时间过长?再或者tomcat线程有死锁?

建议楼主看看日志,tomcat是否有OOM。如果没有,建议用jprofile检测是否存在死锁。如果还看不出结果,建议使用jstack查看一下停止响应时候的tomcat工作线程状态。

最后,希望楼主结贴时给出一些解决方案的分享,谢谢~~
0 请登录后投票
   发表时间:2012-12-03  
可以使用jstack -l <pid> 输出jvm线程栈的全部信息,看一下线程都wait到什么地方了,再酌情做优化
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics