今天一大早产品一部项目经理就来找我,他们的一台服务器昨天晚上tomcat服务崩溃,还不能重启服务,最后将服务器重启才OK。
我将事件过程和分析过程记录如下:
服务器:win 2000 sp4,apache 2 + tomcat 5.0 采用mod_jk级联。内存2G,硬盘剩余空间充足,CPU基本空闲。
主要应用:J2EE 1.4,JDBC(连接另一台mysql服务器)
崩溃时间: 2008-6-3 18:37:50
一.各种日志综合如下:
1.37分45秒,操作系统事件中诺顿杀毒软件报内存过低警报
2.37分45秒,web应用抛出JDBC连接异常:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->2008-06-03 18:37:45 cn.*.db.DBManager.getConnection(DBManager.java:157) ERROR swim.db.DBManager com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: java.net.SocketException: No buffer space available (maximum connections reached?): JVM_Bind
3.37分50秒,tomcat抛出session无法save异常:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->2008-06-03 18:37:50 ERROR- IOException while saving persisted sessions: java.io.FileNotFoundException: \izzs\SESSIONS.ser (系统资源不足,无法完成请求的服务。)
java.io.FileNotFoundException: \izzs\SESSIONS.ser (系统资源不足,无法完成请求的服务。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:511)
at org.apache.catalina.session.StandardManager.unload(StandardManager.java:485)
at org.apache.catalina.session.StandardManager.stop(StandardManager.java:687)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4496)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3037)
at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:4658)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1619)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1628)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1628)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1608)
at java.lang.Thread.run(Thread.java:534)
二.简单分析
崩溃原因:内存不足导致资源不足,引起Tomcat的session崩溃。
这台服务器上运行着很多应用,是什么原因引起内存不足还无法确定。
初步判断罪魁祸首可能是apache,该进程平常占用500MB内存,经常会飚到1G以上。
Apache2的配置文件中:
KeepAlive=On,MaxKeepAliveRequests=100,KeepAliveTimeout=15,分析aceess.log文件可以发现每个页面触发的request数量在10个以下,点击率较低,可能使连接过多。
我建议将keepAlive设为off,增加CPU负载,降低内存消耗。
三.效果
有待观察......
参考资料:
http://www.withend.com/post/78.html
四.结局 时隔一天,晚上九点再次崩溃,黑暗事件重演。
这一次,我才得知原来该apache还配置有其他域名,于是调出该域名下的access.log。项目经理去了机房,在轰轰地风扇声中打电话给我,让我分析分析。
仔细看访问日志,发现原来有N多Connect 443连接,443是什么?是SSL端口!HTTPS!,Connect命令则显然是代理功能!
而且这些connect的IP来自全球各地,加拿大、美国、澳洲、新西兰、北京、上海、英国、哪都有。
看来这台服务器是被人当代理服务器用了。
怪不得半夜会死机,人家西半球那时正大白天撒欢儿呢。
问题就出在apache的配置上,由于应用众多,并且这台服务器还是其他几台web服务器的对外出口,因此apache中配置了反向代理,不过不小心把正向代理(mod_proxy模块的
ProxyRequests指令)也打开了。
看看
apache2.0的官方文档中mod_proxy部分,里面明明白白写着:
警告
在您没有对服务器采取安全措施之前,请不要用ProxyRequests启用您的代理。一个开放的代理服务器不仅对您的网络有威胁,对整个因特网来说也同样如此。
真的是很有威胁!大量代理请求急剧消耗内存,最终造成死机!
解决办法就是把正向代理关掉:ProxyRequests Off
分享到:
相关推荐
脚本实现了在windows下,如果tomcat异常退出服务,脚本则会重新启动他
Zabbix实现监控tomcat,自动启动崩溃tomcat
Shell脚本定时监控tomcat,服务挂掉自动重启
apache-tomcat-7.0.68
2.20秒执行一次,如果对应的tomcat服务崩溃宕机,会自动重启 3.会生成一个日志文件 restart_service.txt 记录宕机重启时间 4.只需要修改checkTomcatServer.bat中的_task和_svr,不需要引号 5.会自动生成一个start.bat...
对于粘性会话,支持会话故障转移(tomcat崩溃),对于非粘性会话,这是默认设置(默认情况下,不同的tomcat为不同的请求提供会话服务)。 此外,通过会话迁移也支持memcached故障转移(memcached崩溃)。 也不应有...
精巧,独立,占用资源少,80ms极速启动,可替代tomcat内置风控处理,防瞬时并发量过大崩溃可以独立jar包方式运行,轻巧快速可与nginx完美配合支持内置的简洁方便的http文件服务器支持内置自适应扫描的全盘服务器控制...
对初学java人员关于Eclipse自动部署项目到Tomcat的webapps下的有效方法
Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机。JAVA程序启动时JVM会分配一个初始内存和最大内存给程序。当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务...
一个tomcat应用,里面只有一个单纯的jsp页面,而且这个jsp页面没有任何java代码(想用这个jsp页面测试在她的服务器上的一个tomcat的最大QPS)。但是用loadrunner压测了几分钟之后,分配了1024M堆内存的tomcat居然包...
关于ssh 项目多部署几遍就会崩溃的问题,相信这个文档可以给你答案。
数据库课程设计 1.1系统功能需求 ...充分考虑系统报错情况,尽量防止系统崩溃。 二、概念结构设计 2.1实体关系分析 开设班级,每个班级包含若干学生; 课程由教师开设; 同一门课可能有多个教师开课,一个教师在一
先说说需求:由于我们的程序java调用c++的动态库好像有bug,导致Tomcat会自己崩溃,故开发此程序,实时监控tomcat进程,如果down掉,马上重新启动。 因此这个程序相当于监控程序。 现在,我对其又进行了定制修改。...
086、案例实战:每秒仅仅上百请求的系统为什么会因为OOM而崩溃.pdf
upload.jsp两个文件实现的文件上传功能,有点瑕疵就是,中文乱码还没改正,这个还得好好看看smartupload,反正也就4,5个java文件,还有就是上传的文件因为用的是Eclipse,部署时用的tomcat插件的问题,上传的文件...
这两天差点崩溃了,装个ARCIMS,差点被他搞疯了。servlet for IIS装上死活运行不了,拆了装装了卸,向外求救,大家一个给你一个办法,勉强一答应,再卸再装。两天的时间啥也么做,然后也没装上,真汗。实在受不了这...
随着访问量增大, Tomcat的压力会越来越大, 直至崩溃. 为了保证WEB应用的承载能力, 需要对WEB应用进行集群处理. 技术发展到今天, 集群/负载均衡已经变的相对简单了. 下面用通俗的语言给刚入门的同学介绍下这两个概念...
编译 mvn clean package -DskipTests 使用 首先查看机器进程,找到Tomcat或者Weblogic进程ID,如下为查找Tocmat进程ID ps -el | grep org.apache....由于使用本工具导致的任何服务器崩溃等一系列问题,与本人无关。
崩溃了。首先来罗列一下我遇到过的一些问题吧。 1、大小写敏感 2、连接数超过系统最大连接数 3、Can’t connect to local MySQL server through socket ‘/Data/mydata/mysql.sock’ socket文件目录不对应导致的问题...
Nginx是由俄罗斯人研发的,应对Rambler的网站,...> 客户端发送的请求可能是申请动态资源的,也有申请静态资源,但是都是去Tomcat中获取的#### 负载均衡问题 > 如果所有客户端的请求都发送给了服务器1,那么服务器2