服务器处理客户端请求线程只升不降问题分析总结
2014-09-12 14:36
477 查看
应用服务器:tomcat
问题现象:
首先服务器稳定正常了运行了大概一年的时间,最近突然出现问题:服务器运行一段时间后客户端再次连接服务器没有响应,都是请求超时,要不响应就变的特别的慢,重启服务一切恢复正常,但是过一段时间就又不行了。
问题分析:
觉得问题非常奇怪,于是用了jconclose jprofiler jvisualvm对服务器进行分析,经分析没有发现内存泄露,线程死锁等问题,查看服务器日志也没有发现异常。只是发现tomcat线程池中正在运行的请求处理线程很多,且线程数直升不降,几乎没有线程回收的迹象。经过查资料大多数人都在说可能是因为死锁造成的,但是dump出来线程信息也没有发现死锁。。。大量的thread=[http-bio-/ip-9085-exec-6]线程让我百思不得其解。搞了好长时间突然想到了一个命令,netstat
-an ,结果豁然开朗,原来有大量的外部ip连接到了服务器(可能是恶意)。
总结:
虽然不是自身服务器的代码造成的,但是在用jprofiler,发现有些东西不是那么理解,不能果断的排查代码造成的问题,从而也就不能快速的定位系统中的问题。
因此,针对线程这一大部分内容,以后有时间应该多多总结一下,现在先总结一下两个小概念:
jvm监视器:
“在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的,为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁,锁住了一个对象,就是获得对象相关联的监视器”
我的理解也就是说“监视器”其实是对锁或者是同步的抽象,synchronized 和ReentrantLock 都是一种监视器的实现,但是“监视器”要求具有排他性.
synchronized(this) 和synchronized(Object.class)的区别:
当一个线程访问一个对象中的一个synchronized(this)同步代码块时,其它线程仍可以访问同一个中是其它非synchronized (this)代码块
synchronized(this)只是锁定一个对象;
synchronized(Object.class)是锁定整个类,如用在静态方法中,对静态变量的访问。
问题现象:
首先服务器稳定正常了运行了大概一年的时间,最近突然出现问题:服务器运行一段时间后客户端再次连接服务器没有响应,都是请求超时,要不响应就变的特别的慢,重启服务一切恢复正常,但是过一段时间就又不行了。
问题分析:
觉得问题非常奇怪,于是用了jconclose jprofiler jvisualvm对服务器进行分析,经分析没有发现内存泄露,线程死锁等问题,查看服务器日志也没有发现异常。只是发现tomcat线程池中正在运行的请求处理线程很多,且线程数直升不降,几乎没有线程回收的迹象。经过查资料大多数人都在说可能是因为死锁造成的,但是dump出来线程信息也没有发现死锁。。。大量的thread=[http-bio-/ip-9085-exec-6]线程让我百思不得其解。搞了好长时间突然想到了一个命令,netstat
-an ,结果豁然开朗,原来有大量的外部ip连接到了服务器(可能是恶意)。
总结:
虽然不是自身服务器的代码造成的,但是在用jprofiler,发现有些东西不是那么理解,不能果断的排查代码造成的问题,从而也就不能快速的定位系统中的问题。
因此,针对线程这一大部分内容,以后有时间应该多多总结一下,现在先总结一下两个小概念:
jvm监视器:
“在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的,为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁,锁住了一个对象,就是获得对象相关联的监视器”
我的理解也就是说“监视器”其实是对锁或者是同步的抽象,synchronized 和ReentrantLock 都是一种监视器的实现,但是“监视器”要求具有排他性.
synchronized(this) 和synchronized(Object.class)的区别:
当一个线程访问一个对象中的一个synchronized(this)同步代码块时,其它线程仍可以访问同一个中是其它非synchronized (this)代码块
synchronized(this)只是锁定一个对象;
synchronized(Object.class)是锁定整个类,如用在静态方法中,对静态变量的访问。
相关文章推荐
- android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
- WEB全能服务器总结,及各种问题处理方法.apache+tomcat+jsp+php+mysql+虚
- 开源流媒体处理库live555服务器端、客户端源代码分析总结
- socket + pcntl_fork 实现客户端请求,服务器实时监听返回处理 消息推送
- Url请求长度HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIs,这种无效长度的URL可能会在客户端以基于GET方式的请求时产生。
- BT源代码学习心得(八):跟踪服务器(Tracker)的代码分析(用户请求的实际处理) 转自CSDN:gushenghua的专栏
- 用hive分析多服务器合并日志问题总结
- Centos- Nagios 的Last Check更新时间与当前时间差距分析问题及处理方法总结
- [笨木头FireFly 02]入门篇2_客户端发送请求,服务器处理请求
- oracleORA-12520:TNS:监听程序无法为请求的服务器类型找到可用的处理程序的问题
- Enter-PSSession : 连接到远程服务器失败,错误消息如下: WinRM 客户端无法处理该请求
- BT源代码学习心得(八):跟踪服务器(Tracker)的代码分析(用户请求的实际处理) - 转贴自 wolfenstein (NeverSayNever)
- 如何处理服务器重启后,日志分析的重新挂载的问题
- I/O模型和原理,以及简单解析客户端请求WEB服务器内部处理过程,MPM三种模
- XP下解决“system.web.services.protocols.soapexception:服务器无法处理请求。…〉system.exception:system.data.oracleclient 需要oracle客户端软件8.1.7或更高版本。
- Web 服务器处理客户端请求过程
- 【安卓笔记】android客户端向tomcat服务器发送请求中文乱码问题解决
- android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
- BT源代码学习心得(八):跟踪服务器(Tracker)的代码分析(用户请求的实际处理)
- BT源代码学习心得(八):跟踪服务器(Tracker)的代码分析(用户请求的实际处理)