它怎么又去了。
来源:互联网 发布:批量剪裁图片软件 编辑:程序博客网 时间:2024/04/24 04:56
最近找工作啊,要是哪们郑州的同鞋有好工作,请推建一下,某某不胜感激,请客吃饭自然不必多说。好吧直接讲故事吧。
一同事说那谁谁,你写的代码是不是有问题啊,相同的报文发了两次,哪个领导发来邮件了,附件中是证据。
我心想"我怎么这么苦B吧,别人走了留下的代码,交接给别人了,怎么又成我负责了,但又不能直说,怎么办,闷头解决吧!”,于是乎这场战斗就打响了。
第一步,首先分析了一个重发这一块的代码。很简单用的httpurlconnection请求远程服务器,发现里面有些代码不是很好,但是也不足以产生这个bug,报着蒙
的思想改过后,发布到服务器上,由于报文重发这种现像是在并发量大的时候产生的,没法测试,所以只能等问题出来了。
第二步,果不其然,该来的总会来的,它又来了,看来这的问题,好吧,抓包吧。系统采用的是集群管理,负载用的nginx在A上,两台tomcat分别在B,C上。在A上抓发往BC的包,在B和C上抓请求别的服务器的包(抓包命令就不写了,网上一搜太多了)。等 布好了天罗地网,就等着这条大鱼出现了。
第三步,分析抓包结果,问题是A发往B、C各一次,A发往B或C后,若1分钟后B/C服务器没有响应,则发往另一台服务器。(http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream)nginx中有一段话
If an error occurs during communication with a server, the request will be passed to the next server, and so on until all of the functioning servers will be tried. If a successful response could not be obtained from any of the servers, the client will receive the result of the communication with the last server.
就是说其中一台服务器出问题的时候,nginx会发往其它服务器处理。
第四步,为什么我的服务器会出问题,那段代码又没有问题,难道是其它问题。好吧,如果无法定位问题,就跟踪问题,从入口开始到进入请求处理逻辑结束,凡是有IO操作的,我都加上时间输出,最终发现问题出现在和数据库的连接池。连接池用的是dbcp,本身该插件是没有问题的,是我们配置出错了,数据库连接池连接配置过少,maxwait等待时间未设置,这就会造成。A转发请求到B后,B请求数据库连接,但是连接现在如果都是被占用的,好吧,等吧!超过一分钟后(该时间是在nginx.conf中设置),A认为B没有回应,A断开与B的连接 ,但是B的请求并未结束,B等 到有可用数据库连接后,断续执行。A断开连接后,发送请求到C,C也可能成功,或许失败。现在nginx认为处理完了,得到结果后,返回结果。
此文章只是一种问题解决思路,没有提供图片和代码,请各位客官见谅。
- 它怎么又去了。
- 又想起了它
- 时间都去哪儿了,你又想让它去哪儿
- 又去天安门了!
- 我又怎么了
- 又想去教书了
- 又去参观手术了
- 又去了趟中医院
- 你又怎么了啊
- 怎么又用到了开始这个词了
- 程序又出问题了,不知怎么了
- 又去考6级了
- 今天又去招聘会了
- 今天又去见客户了
- 明天去苏州,又要出差了
- 今天又去体检了,一年。
- 老妈又去SZ了
- 身边的"它"怎么都病了
- GDB调试之重定向
- EventBus小记
- Leetcode NO.73 Set Matrix Zeroes
- CentOS yum有时出现“Could not retrieve mirrorlist ”的解决办法——resolv.conf的配置
- ContentProvider 内容提供者
- 它怎么又去了。
- 当前商务日语教材的现状及其建设建议
- Java 基础知识汇总 - 02
- 108. Convert Sorted Array to Binary Search Tree Leetcode Python
- Kali系统ssh服务开启
- Leetcode NO.74 Search a 2D Matrix
- 缩略图、图片水印图、文字水印图
- 爬上喜马拉雅的喜悦——Leo谈跑步(1)
- Balanced Binary Tree Leetcode Python