北京修复宕机故障之旅

2012-12-18

下午开会探讨北京项目出现的一些问题,当时记录的问题是由可能因为有一定数量的客户上来后,就造成了Web服务器宕机,而且没有任何时间上的规律性,让我准备出差到北京,限定三天时间,以及准备测试压力的工具软件等等。

2012-12-19

上午飞抵北京后,进行了安顿安排,以及开会听王经理讲了一下情况。由于服务器已经在生产网上,客户在使用,北京大概有100多个将近200个收费网点,每天都有很多客户在排队缴费,所以不能进行相关的压力测试,只能在晚上进行。下午针对简单的操作编写了压力测试用的操作逻辑。

晚上和大家一起进行做对系统的初步压力检测。

检测结果:

本机搭建的Web服务器和一台数据库Oracle服务器并发1000人的登陆的结果是,虽然内存有逐步的上涨,但没有宕机。

真对运行生产网进行了压力测试检验后,和白天也出现的宕机状态一样,初步分析应该不是因为程序的架构缺陷,以及程序的编写缺陷造成的原因。

2012-12-20

针对系统现象表明,如果在集群内,一台服务器宕机,另外一台服务器不在集群入口进入的话,还可以使用。但如果有新登陆的客户,如果被分载到了宕机节点后,就会登陆不进去。晚上测试的现象表明,如果宕机了,Tomcat还没有挂掉,而在登陆的时候连接不上数据库,并且根本没有连接数据库失败的报错。但如果把数据库服务器网线拔掉后,就会在页面进行报错,当时分析有可能是数据库连接池的原因,但把数据库连接池设置很小后,也会在页面上提示连接失败,并不会宕机。此时分析的结果,有可能是在连接发送到Oracle数据库后,没有返回造成的。随即又做了个压力测试,把Oracle服务器进行全面的性能压力堵塞,在用Web服务器进行连接,这个时候很慢,页面反应效果很像,点连不进去。不过OracleCPU和内存利用几乎是百分之百,局域网内部人去连接Oracle服务器几乎没反应了。和白天的症状不一样,白天一台web服务器宕机后,另外一台服务器还可以很顺利的进行与Oracle服务器进行交互,而且其他用户还可以利用PL/SQP查看系统有没有死锁等症状。由此判断不是数据库的原因。

2012-12-21

由于针对前段症状的分析,程序上没问题的话,怀疑可能是Tomcat服务器造成的原因。Tomcat导致宕机的最大可能性就是内存及缓存的溢出造成的。于是把JVM的内存和最大最小内存连接池以及线程池都设置到最低,然后Web服务器运行后开始进行压力测试。虽然效果和昨天的页面反应情况很像,从测试机器的Logs里可以查出(严重: Caught exception (java.lang.OutOfMemoryError: Java heap space)即内存溢出),但是,我又查看了一下服务器的相关记录,并未找到任何一条关于内存溢出的错误日志。通过核对客户群里对系统反应错误的时间,以及核对集群Apache和两个Tomcat出错日志的比对,看看是否能够和集群的相关配置有关。

从日志的结果分析来看,apache在宕机时间内,有两次显示” [Thu Nov 15 14:13:05 2012] [warn] Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting”,这个意思是表明apache作为控制器来讲,他的允许线程数已经不够用了,后来看了一下Apache配置” conf/httpd.conf”文件,发现ThreadsPerChild默认为250。后来查询了相关资料,这个线程一般为最大可以为1920,然后我就把它调节到了1000。由此分析,本系统的应用负载,是现在的架构节点远远不够的。但从数据库的日志,以及tomcat相关日志,并没有对数据库出现异常的相关信息,比如连接速度慢,查看了linuxoracle的日志,也并没有线程以及内存相关的溢出信息,由此分析,瓶颈并不在oracle。于是为了验证想法,又增加了两个负载节点,观察服务器的动向。

2012-12-22

由于工作已经超出原定的三天,也就既来之则安之。而且经理说了,周六周日的人,并不多,每天上来缴费的网点差不多50,到60人左右,想最好是先观察一下。不过今天是周六,一整天都平安无事。

2012-12-23

为了安全起见,我对各种引起宕机可能的情况作了总结。一、内存溢出,二、表死锁,三、数据库连接池死链接,四、数据库瓶颈压力过大,五、负载均衡器入口瓶颈压力过大。当日查看了tomcat的系统日志,发现session会话复制失败率很高。因为两个或多个web服务器做负载的时候,为了保证高可用,要在一台服务器宕机后,自动切换到另外一台服务器。但我们的系统有个问题,因为是采用extjs作为前端,ajax与后台操作量非常大,从而导致服务器session复制两就很大。

Tomcat的系统管理页面可以看出,http协议与外面交互,这一上午的吞吐量也不过52MB,而用于session复制的ajp协议,却达到了133MB。为了认证这一说法,我把其中一台节点服务器的session复制关掉,为了迎接明天压力的到来。

2012-12-24

今天上午的时候,反应还良好,只不过其中有一台服务器稍微有些慢。不过到下午15:24的时候,从负载机,带集群节点,统一宕机。当然其中也包括我那台被关闭session复制的服务器,当时我就蒙圈了。我觉得不可能,没有任何理由啊。因为从负载机进去,就一个IP地址,但各个集群机都有各自的IP或端口,即使是一两个节点宕机,乃至三个节点宕机,但其中那台没session复制的机器也不应该啊。难道是Oracle有防火墙,同一时间出现网络闪断,但那也不用非得重启web服务器才好用啊,因为重启一个节点时,那个节点就好用了,不过另外的节点还是不好用。晚上的时候,开始在Linux查找各种问题。连接,以及日志,结果还是没问题。

2012-12-25

没办法了,只能出最后绝招了。因为系统宕机原因跑不出那五个原因,我决心全面监视起来,每一个信息参数都记录日志,然后进行分析。于是,我就做了个程序,监视内存,JVM内存,JVMCPU,死锁的表,用户操作登陆及日志,连接池,以及web服务器和数据库服务器的TCPIP流的吞吐量。剩下就是漫长的等待了,果然在下午两点多,TomcatJVM空闲内存值,一个节点在一小时内急速下降到0,然后JVM内存溢出,紧接着表开始死锁,然系统页面开始反应缓慢。

通过以上的现象来看。一天的操作都很正常,空闲内存突然的下降。引起了我很大的怀疑,同时我查看了那个时刻的Http页面的吞吐量。也是50多兆。不过JVM内存我可设置了1.5G,完全不是一个数量级别。就并发干整它一个星期,也宕机不了。一定是程序逻辑有问题,造成了内存超大的累加。

没办法,只能看是什么操作了,于是我划定了宕机时间段儿,通过群里的聊天记录,找出宕机的时间范围,然后把这几天的宕机时间内所有的操作日志调了出来,然后找出它们共同的操作。这个时候,“税控机导入”,这个日志这个词,紧排在“登陆/退出”的后面,立刻引起了我的注意。紧接着我就询问了开发人员,然后再我机器上搭了一套模拟环境,开始对这个操作日志进行了压力测试。结果表明,连续上传了三次,系统就JVM内存不够了,而且表被锁住。因为如果传一个比较大的excel,会出现上传时间很长的状态,如果没有耐心烦,就会把页面关闭,虽然关闭,数据库连接池并没有释放。紧接着使用者就会再次登陆,在去实验上传,然后屡试不爽。当他在实验的过程中,线程池,连接池一个个的被占满,内存逐渐溢出。其他人使用,不但反应缓慢,而且登陆都登陆不上去(因为连接池被占有没有释放)。

就此为止,罪魁祸首就浮出了水面。

就此处问题,我提出了解决方案。因为系统硬件为16G的内存,不过32位电脑JVM最大只支持到2G,而且excel上传并不耗费很大资源,只不过系统在读excel往数据库里插的时候,会耗费很大的内存空间。本来tomcat就最大1.5G的支持,几下就死掉。所以,只能把处理excel插数据库的任务,交给另外的进程和线程去做。做个服务,或应用啥的。实时改造的方法,可以利用消息队列进行业务接受。当上传成功后,就在消息队列内进行排序。然后服务读取到消息后,进行处理,等成功后在回执。

 

2012-12-26

准备收工,改造方案的落实。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一般线性模型和混合线性模型_从零开始的线性混合模型

一般线性模型和混合线性模型生命科学的数学统计和机器学习 (Mathematical Statistics and Machine Learning for Life Sciences) This is the eighteenth article from the column Mathematical Statistics and Machine Learning for Life Sciences where I try to explain som…

《企业私有云建设指南》-导读

内容简介第1章总结性地介绍了云计算的参考架构、典型解决方案架构和涉及的关键技术。 第2章从需求分析入手,详细讲解了私有云的技术选型、资源管理、监控和运维。 第3章从计算、网络、存储资源池等方面讲解了私有云的规划和建设,以及私有云建设的总体原则…

太原冶金技师学院计算机系,山西冶金技师学院专业都有什么

山西冶金技师学院专业大全大家在考试之后对除了选择学校之外,还更关注专业的选择,山西冶金技师学院有哪些专业成了大家最为关心的问题。有些同学一般是选择好专业再选择自己满意的学校,下面小编将为你介绍山西冶金技师学院开设的专业及其哪些…

海南首例供港造血干细胞志愿者启程赴广东捐献

海南首例供港造血干细胞志愿者启程赴广东捐献。 张瑶 摄 海南首例供港造血干细胞志愿者启程赴广东捐献。 张瑶 摄 中新网海口1月23日电 (张茜翼 张瑶)海南省首例供港造血干细胞捐献者晶晶(化名)23日启程赴广东进行捐献,将于28号正式捐献采集造血干细胞,为…

如何击败Python的问题

Following the previous article written about solving Python dependencies, we will take a look at the quality of software. This article will cover “inspections” of software stacks and will link a free dataset available on Kaggle. Even though the title say…

KindEditor解决上传视频不能在手机端显示的问题

KindEditor自带的上传视频生成的HTML代码为<embed>&#xff0c;在手机端并不支持。于是可以自己在控件里增加生成video标签相关代码。 参考https://www.jianshu.com/p/047198ffed92。。 然而对着修改后没有成功&#xff0c;可能是那里没有改对吧。依然生成的是<embed&…

《独家记忆》见面会高甜宠粉 张超现场解锁隐藏技能

1月23日&#xff0c;由爱奇艺出品&#xff0c;小糖人联合出品的沉浸式成长练爱剧《独家记忆》在京举行粉丝见面会。爱奇艺高级副总裁陈宏嘉&#xff0c;爱奇艺副总裁、自制剧开发中心总经理、《独家记忆》总制片人戴莹&#xff0c;小糖人董事长、《独家记忆》总制片人朱振华&am…

计算机软件技术基础fifo算法,软件技术基础真题

一、填空1、数据结构按逻辑结构可分为两大类&#xff0c;它们分别是线性和非线性2.1、在长为n的顺序存储的线性表中插入和删除元素时所需移动元素的平均次数(等概率情况下)为&#xff1a;Einn/2&#xff0c;Ede(n-1)/22.2、顺序表有5个元素&#xff0c;设在任何位置上插入元素是…

NOI 2016 优秀的拆分 (后缀数组+差分)

题目大意&#xff1a;给你一个字符串&#xff0c;求所有子串的所有优秀拆分总和&#xff0c;优秀的拆分被定义为一个字符串可以被拆分成4个子串&#xff0c;形如$AABB$&#xff0c;其中$AA$相同&#xff0c;$BB$相同&#xff0c;$AB$也可以相同 作为一道国赛题&#xff0c;95分…

多元线性回归 python_Python中的多元线性回归

多元线性回归 pythonVideo Link影片连结 This episode expands on Implementing Simple Linear Regression In Python. We extend our simple linear regression model to include more variables.本集扩展了在Python中实现简单线性回归的方法 。 我们扩展了简单的线性回归模型…

关于apache和tomcat集群,线程是否占用实验

测试目的&#xff1a; 测试在apache入口的时候进入&#xff0c;当Tomcat的一个请求陷入死循环&#xff0c;或者线程进入循环无反应的时候&#xff0c;是否此时占用apache的线程资源。 测试原因&#xff1a; 如果要是影响&#xff0c;无论tomcat线程设置成多大&#xff0c;都…

爬虫之数据解析的三种方式

一&#xff0c;正则表达式解析 re正则就不写了&#xff0c;前面已经写入一篇很详细的正则表达式模块了~ 而且&#xff0c;在爬虫中&#xff0c;下面两种方式用的多一些~ 正则表达式&#xff1a;https://www.cnblogs.com/peng104/p/9619801.html 大致用法&#xff1a; pattern …

相对于硬件计算机软件就是,计算机的软件是将解决问题的方法,软件是相对于硬件来说的...

计算机网络管理软件是为计算机网络配置的系统软件。它负责对网络资源进行组织和管理&#xff0c;实现相互之间的通信。计算机网络管理软件包括网络操作系统和数据通信处理程序。前者用于协调网络中各计算机的操作系统及实现网络资源的传递&#xff0c;后者用于网络内的通信&…

数据冒险控制冒险_劳动生产率和其他冒险

数据冒险控制冒险Labor productivity is considered one of the most important indicators of a country’s well-being. However, we don’t know so much about it, let’s try to figure out how it is calculated, and how things are with it in the world (data source:…

Java后端WebSocket的Tomcat实现

原文&#xff1a;https://www.cnblogs.com/xdp-gacl/p/5193279.html 一.WebSocket简单介绍 随着互联网的发展&#xff0c;传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来&#xff0c;随着HTML5的诞生&#xff0c;WebSocket协议被提出&#xff0c;它实现了浏览器与…

knn 邻居数量k的选取_选择K个最近的邻居

knn 邻居数量k的选取Classification is more-or-less just a matter of figuring out to what available group something belongs.分类或多或少只是弄清楚某个事物所属的可用组的问题。 Is Old Town Road a rap song or a country song?Old Town Road是说唱歌曲还是乡村歌曲…

EXTJS+JSP上传文件带进度条

需求来源是这样的&#xff1a;上传一个很大的excel文件到server&#xff0c; server会解析这个excel&#xff0c; 然后一条一条的插入到数据库&#xff0c;整个过程要耗费很长时间&#xff0c;因此当用户点击上传之后&#xff0c;需要显示一个进度条&#xff0c;并且能够根据后…

什么样的代码是好代码_什么是好代码?

什么样的代码是好代码编码最佳实践 (Coding Best-Practices) In the following section, I will introduce the topic at hand, giving you a sense of what this post will cover, and how each argument therein will be approached. Hopefully, this will help you decide w…

nginx比较apache

话说nginx在大压力的环境中比apache的表现要好&#xff0c;于是下载了一个来折腾一下。 下载并编译安装&#xff0c;我的编译过程有点特别&#xff1a; 1。去除调试信息&#xff0c;修改$nginx_setup_path/auto/cc/gcc这个文件&#xff0c;将 CFLAGS"$CFLAGS -g" …

计算机主板各模块复位,电脑主板复位电路工作原理分析

电源、时钟、复位是主板能正常工作的三大要素。主板在电源、时钟都正常后&#xff0c;复位系统发出复位信号&#xff0c;主板各个部件在收到复位信号后&#xff0c;同步进入初始化状态。如图7-11所示为复位电路的工作原理图&#xff0c;各个十板实现复位的电路不尽相同&#xf…