服务器处理客户端请求线程只升不降问题分析总结
来源:互联网 发布:笔记本win7找不到网络 编辑:程序博客网 时间:2024/06/08 14:21
应用服务器: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)是锁定整个类,如用在静态方法中,对静态变量的访问。
- 服务器处理客户端请求线程只升不降问题分析总结
- struts2源码分析只请求处理简图
- 求助-关于C#分布式应用程序中服务器端内存只升不降的问题
- Web 服务器处理客户端请求过程
- android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
- android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
- 准多线程TCP服务器,处理客户端连接请求。
- SuperSocket入门(一)-Telnet服务器和客户端请求处理
- Androin学习笔记四十四:android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
- java客户端数据发送到服务器(POST请求)总结
- 客户端请求服务器过程
- Python处理多个客户端连接---线程服务器
- android客户端向服务器提交请求的中文乱码问题
- 关于客户端向服务器发送请求的加密问题
- 解决客户端从服务器请求数据乱码问题
- [笨木头FireFly 02]入门篇_客户端发送请求,服务器处理请求
- 经典线程处理打印ABC问题分析
- 客户分端--服务器 请求处理模型总结
- LeetCode | Single Number II(单个数字II)
- cocos2d-x打开网页android与ios平台
- Error parsing XML: not well-formed (invalid token) 报错,找不出原因
- makefile——编译所有.c文件为可执行文件
- hdu1106
- 服务器处理客户端请求线程只升不降问题分析总结
- mpeg1/2 量化过程
- dwg文件怎么打开
- 红黑树学习tips
- 完全卸载删除 Microsoft Office for Mac 2011
- Codeforces #261 (Div. 2) C. Pashmak and Buses(数学)
- IDempiere入门第二篇杂七杂八(郑州就维软件)
- ACM 91. [NOIP2000] 方格取数(多线程dp)
- 自定义打印输出函数格式,模拟printf函数