事故经过:

1  15:18收到短信报警:国际酒店调用OMS queryGorderOrderList方法失败;成单接口调用OMS获取token失败。

2  查看checkList发现15:18开始发现调用OMS 订单列表接口响应时间明显变长。

3  业务反馈国际酒店MIS系统查询不到数据,也无法导出数据。怀疑是因为这个引起的。

登录ihotelMs系统

IhotelMis调用OMS返回errorCode

总共调用OMS出现问题3000多次,并且还在调用。

4  查看ihotelMs cpu使用率正常,gc也正常。

5  15:27登录OMS一中心机器,CPU使用率60%以上,并且一直full gc,几乎把老龄带内存全部占满。导致OMS服务不可用,

影响其他业务线。二中心的机器没有问题。

6    15:28重启一中心两台OMS,但是过几分钟又挂了。

7    查看日志曾有人在导出国际酒店半个月的数据,大概两万条,猜测是国际酒店的问题。15:38将ihotel的业务都切到outeroms.

然后国际酒店业务正常,查询OMS没有问题。

8   15:56将OMS全部切到二中心。

9    15:59trainAPI也切到outeroms,服务也正常了。

10  16点以后所有服务正常【OMS一中心没有流量】

11  17:45恢复一中心流量。所有业务正常。

事故分析:

国际酒店MS系统大量调用OMS造成OMS服务不可用,进而影响其他业务线。

分析订单导出代码,发现可能造成死循环:

标红线部分代码,一次调用OMS设置的是分页大小是5000,很容易造成OMS返回失败,如果调用OMS返回失败【可能OMS收到请求,已经执行了查询命令,但是因为网络或者别的异常原因没有返回国际酒店数据】,代码会执行continue,重试去调用OMS,如果再失败再重试。。如果正好有几秒钟的时间,网络不好或者因为OMS系统问题没有返回正常数据,这段代码会一直循环调用OMS,这种大量调用造成OMS系统压力大,OMS堆内存使用过多,更加剧国际酒店这行代码收不到正常数据,恶性循环。。最终造成OMS down掉。

解决方案:

1.代码中写continue的作用是为了防止在业务导出数据,多次查询OMS有一次失败,可以进行重试操作,保证拿到的数据。但是会造成死循环,并且查询OMS订单列表底层已经设置了重试机制,双重重试会加重OMS负担。因此去掉continue。

2. 设置OMS分页大小为5000,很容易造成OMS压力过大,因此设置分页大小为500,分多次调用OMS。

薛天俊

OMS国际酒店

事故经过:

1  15:18收到短信报警:国际酒店调用OMS queryGorderOrderList方法失败;成单接口调用OMS获取token失败。

2  查看checkList发现15:18开始国际酒店开始大量调用OMS 订单列表接口,很不正常。

3  业务反馈国际酒店MIS系统查询不到数据,也无法导出数据。怀疑是因为这个引起的。

登录ihotelMs系统

IhotelMis调用OMS返回errorCode

总共调用OMS出现问题3000多次,并且还在调用。

4  查看ihotelMs cpu使用率正常,gc也正常。

5  15:27登录OMS一中心机器,CPU使用率60%以上,并且一直full gc,几乎把老龄带内存全部占满。导致OMS服务不可用,

影响其他业务线。二中心的机器没有问题。

6    15:28重启一中心两台OMS,但是过几分钟又挂了。

7    查看日志曾有人在导出国际酒店半个月的数据,大概两万条,猜测是国际酒店的问题。15:38将ihotel的业务都切到outeroms.

然后国际酒店业务正常,查询OMS没有问题。

8   15:56将OMS全部切到二中心。

9    15:59trainAPI也切到outeroms,服务也正常了。

10  16点以后所有服务正常【OMS一中心没有流量】

11  17:45恢复一中心流量。所有业务正常。

事故分析:

国际酒店MS系统大量调用OMS造成OMS服务不可用,进而影响其他业务线。

分析订单导出代码,发现可能造成死循环:

标红线部分代码,一次调用OMS设置的是分页大小是5000,很容易造成OMS返回失败,如果调用OMS返回失败【可能OMS收到请求,已经执行了查询命令,但是因为网络或者别的异常原因没有返回国际酒店数据】,代码会执行continue,重试去调用OMS,如果再失败再重试。。如果正好有几秒钟的时间,网络不好或者因为OMS系统问题没有返回正常数据,这段代码会一直循环调用OMS,这种大量调用造成OMS系统压力大,OMS堆内存使用过多,更加剧国际酒店这行代码收不到正常数据,恶性循环。。最终造成OMS down掉。

解决方案:

1.代码中写continue的作用是为了防止在业务导出数据,多次查询OMS有一次失败,可以进行重试操作,保证拿到的数据。但是会造成死循环,并且查询OMS订单列表底层已经设置了重试机制,双重重试会加重OMS负担。因此去掉continue。

2. 设置OMS分页大小为5000,很容易造成OMS压力过大,因此设置分页大小为500,分多次调用OMS。

补充一些:

1.当发现oms一中心的服务处于假死状态时,ops操作重启了一中心的服务,但是一起来就挂了,因为这时候ihotelMis还有大量的三级联查(每次5000条)的查询请求打到一中心(办公网请求都会打到一中心)。

2.oms流量切到二中心,请求也会打到二中心,所以出现了二中心的请求量也很高的现象。

3.ihotelMis引用的omsagent的包刚好有问题,打印不出inOut日志,这也影响了快速定位问题。

 

jvm 之 国际酒店 8 月 19 一次full GC 导致的事故的更多相关文章

  1. jvm 之 国际酒店 6月25日上线内存溢出原因

    6月25日OMS,Ihotel上线成功后执行了一个批处理,SOA报警提示某一台IHOTEL机器调用OMS失败率大于阀值,登录这个机器后发现这台机器CPU使用率处于80%以上,调用OMS有的时候超过5秒 ...

  2. jvm之 国际酒店 一次报表 load数据死循环导致的FULLGC

    从目前这几天的运行情况看,每天晚上0点到3点,应该是你们那边有大数据任务处理,在这个时间段,SOA会频繁报ZK断开重联的告警,见下图.   类似的问题,在CRM系统上也有出现过,我们dump内存,分析 ...

  3. [ZT] 酒店大洗脑:最全各大国际酒店集团族谱图

    原文地址: http://www.licai.com/yuedu/201411-62884.html 如果你对各大耳熟能详的国际酒店管理集团还有什么问题,相信今天和你分享的各大酒店集团家族系谱图和最全 ...

  4. Python array,list,dataframe索引切片操作 2016年07月19日——智浪文档

    array,list,dataframe索引切片操作 2016年07月19日——智浪文档 list,一维,二维array,datafrme,loc.iloc.ix的简单探讨 Numpy数组的索引和切片 ...

  5. 2016年12月19日 星期一 --出埃及记 Exodus 21:14

    2016年12月19日 星期一 --出埃及记 Exodus 21:14 But if a man schemes and kills another man deliberately, take hi ...

  6. 2016年11月19日 星期六 --出埃及记 Exodus 20:10

    2016年11月19日 星期六 --出埃及记 Exodus 20:10 but the seventh day is a Sabbath to the LORD your God. On it you ...

  7. 2016年10月19日 星期三 --出埃及记 Exodus 19:3

    2016年10月19日 星期三 --出埃及记 Exodus 19:3 Then Moses went up to God, and the LORD called to him from the mo ...

  8. 7月19日Docker&Kubernetes技术沙龙总结 - DockOne.io

    7月19日Docker&Kubernetes技术沙龙总结 - DockOne.io undefined

  9. 9月19号-9月21号丰宁坝上草原行 - 营销系统 - 京东内部论坛 - Powered by Discuz!

    9月19号-9月21号丰宁坝上草原行 - 营销系统 - 京东内部论坛 - Powered by Discuz! 9月19号-9月21号丰宁坝上草原行   [复制链接]

随机推荐

  1. 误删system04.dbf 报:ORA-01157 ORA-01110

    DB:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production OS:Oracle Linux 5.7 ...

  2. c++编程规范的纲要和记录

    这是一本好书, 可以让你认清自己对C++的掌握程度.看完之后,给自己打分,我对C++了解多少? 答案是不足20分.对于我自己是理所当然的问题, 就不提了, 记一些有启发的条目和细节: (*号表示不能完 ...

  3. 使用IC框架开发跨平台App的备忘录123

    1,关于图标与启动屏幕 icon.png 192x192splash.png 2208x2208 将这两个图片放在resources目录下,在终端执行:ionic resources --iocn - ...

  4. 修改linux端口范围 ip_local_port_range

    tags: ip_local_port_range 端口范围 sysctl Linux中有限定端口的使用范围,如果我要为我的程序预留某些端口,那么我需要控制这个端口范围, 本文主要描述如何去修改端口范 ...

  5. 在本地环境用虚拟机win2008 sever搭建VS2013 + SVN 代码版本控制环境

    此文仅仅是自己笔记做个备忘.因为自己开发一些中小型的软件经常需要修修改改,特别是winform界面的大改动.经常需要对版本进行管理.而租用分布式服务器和远程服务器都不是自己想要的.本文结合虚拟机 + ...

  6. Java实现Tire

    Trie,又称单词查找树或键树,是一种树形结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比 ...

  7. 【每日scrum】NO.5

    尝试采用自己的地图,绘点并计算路径,但是地图打开出现问题.

  8. 【Python】网络编程

    1.TCP编程 2.SocketServer模块 3.Twisted框架 4.UDP编程 1.TCP编程--TCP是面向连接的,其一般的设计如下: # encoding:utf-8 ''' Creat ...

  9. java加载机制整理

    本文是根据李刚的<疯狂讲义>作的笔记,程序有的地方做了修改,特别是路径,一直在混淆,浪费了好多时间!!希望懂的同学能够指导本人,感激尽............ 1.jvm 和 类的关系 当 ...

  10. CSS3动画制作的简单示例

    CSS3 大大强化了制作动画的能力,但是如果要做出图案比较复杂的动画,选择 GIF 依然是一个不错的选择.今天给大家介绍一个使用 CSS animation 配合雪碧图(CSS sprite)来制作动 ...