在性能测试的时候,当并发数达到200时触发该问题
现象表现为,load达到200左右,CPU高达100%,内存使用正常,FullGC频率为1小时一次。虽然java进程正常,jvm并未崩溃,但是系统已经拒绝服务,可视为宕机。
该问题一直持续到第二天上班时。在发现问题后,我们停止了LoadRunner,同时也停止了apache,也就是可以保证系统不再接收任何请求。
可是系统并未因此恢复正常。经分析怀疑系统存在死循环之类耗CPU的操作。
通过top shift+h shift+p 命令,查看线程情况,发现出现上百个java线程,他们各占1%的cpu。
进一步确定是代码问题造成的本次故障。
通过jstack命令打印出java线程的快照到日志文件,对日志文件进行分析,发现大多java线程的快照如下
"http-bio-8080-exec-2957" daemon prio=10 tid=0x09d01800 nid=0x4841 runnable [0x69fd4000]
java.lang.Thread.State: RUNNABLE
at org.apache.commons.collections.map.AbstractHashedMap.getEntry(AbstractHashedMap.java:440)
at org.apache.commons.collections.map.LRUMap.get(LRUMap.java:174)
at com.hongli.pandora.item.manager.WeightScoreComputor.compute(WeightScoreComputor.java:29)
at com.hongli.pandora.item.manager.CargoManager$2.compare(CargoManager.java:462)
at com.hongli.pandora.item.manager.CargoManager$2.compare(CargoManager.java:458)
at java.util.Arrays.mergeSort(Arrays.java:1270)
因此确定apache的LRUMap存在问题,经过对代码的分析发现,LRUMap是线程不安全的,在高并发的环境下,触发了死循环的bug。
最终通过在WeightScoreComputor中加入ReentrantReadWriteLock来手动保证线程的安全的方式解决了这一问题。
总结:高并发环境下暴露出的问题通常是由于内存泄漏,线程不安全等问题导致,除了在编码期间充分考虑这些问题外,更重要的是要进行充分的压力测试,并且对发生的问题进行合理的分析和排查,以解决问题和避免类似问题的再现。
这是一例典型的线程不安全的bug导致系统宕机的案例,再次提醒我们在编码过程中,必须时刻牢记共享变量的危险性,应尽量避免使用共享变量,在必须使用的情况下,必须保证共享变量在多线程环境下的安全性。
- 大小: 18 KB
- 大小: 24.1 KB
- 大小: 11 KB
分享到:
相关推荐
本文旨在通过分析实际案例来总结WebLogic宕机的原因及应对措施,以期为企业运维人员提供参考。 #### 二、WebLogic宕机概述 WebLogic宕机主要表现为服务器不再响应外部请求,导致应用程序无法正常使用。宕机的原因...
在2012年的系统架构师考试科目二中,案例分析涉及了一个大型社交网络系统在使用传统关系型数据库时遇到的问题,以及如何通过转向NoSQL数据库来解决这些问题。以下是具体的知识点解析: 问题1: (1) 用户响应时间慢...
2. **并发用户模拟**:使用LoadRunner模拟高并发场景,测试系统在极端条件下的稳定性。通过逐步增加虚拟用户数量,百度能够评估系统资源的利用率和响应时间,确保在高流量时段系统仍能保持高效稳定。 3. **兼容性...
性能分析是企业级应用系统软件不可或缺的一部分,对于业务操作的响应时间和并发数的要求非常高。只有经过不断的调整优化,才能达到资源的最大利用率,满足客户对系统吞吐量和响应时间的要求。应用系统本身的优化是至...
案例中分析了问题的根本原因,包括流量双倍增加导致某一核心服务达到性能瓶颈,进而引发系统雪崩和宕机。针对这些问题,美团外卖采取了包括提前预警、模拟压测和及时响应等措施来减少线上风险。 总而言之,文档...
2. **高可用性**:虚拟机可快速迁移,确保业务连续性,降低宕机风险。 3. **灵活性**:快速部署新应用,便于测试和开发环境的创建与销毁。 4. **安全性**:每个虚拟机之间相互隔离,降低单点故障风险。 5. **灾难...
合理地设计数据访问方式,确保读写操作能够尽可能避免上锁,特别是在高并发场景下尤为重要。 3. **异步处理**:将同步操作转换为异步操作。例如,在执行插入操作时,可以通过异步机制将数据先缓存起来,之后再进行...
10. **异常和错误处理**:测试系统应能检测游戏在异常情况下的表现,如断网、服务器宕机后的恢复机制。 通过阅读《网络式测试系统及方法.pdf》,我们可以获取更详细的步骤和案例,学习如何建立一个全面的测试框架,...
8. **故障预防**:人为失误是导致系统宕机的主要原因之一。通过最佳实践,如容器化DevOps,可以减少人为错误,提高系统的稳定性和可靠性。 综上所述,基于容器服务的双十一电商平台架构通过技术创新、优化资源管理...
例如,单点故障的存在、数据访问模式的不合理、缓存机制的缺失等,都会在高并发场景下暴露出性能短板。 **2. CPU与内存** 硬件资源,尤其是CPU和内存,是执行任务和存储数据的关键。资源不足或使用不当(如内存...
- 使用Codis作为分布式数据库管理工具,它可以实现对Redis的集群管理和数据分片,确保高并发下的性能。 - 集群之间通过主从同步保持数据一致性,当Master宕机时,可以通过Sentinel自动故障转移或者人工干预恢复...
6. **读写分离与缓存**:在高并发场景下,可采用读写分离策略,将查询压力分散到多个从库。同时,对于频繁查询的结果,可以考虑缓存来减轻数据库压力。 7. **监控与调优**:定期分析慢查询日志,找出性能瓶颈,对...
1. **线上Tair集群大面积超时**:流量双倍增长导致核心服务达到性能瓶颈,最终引发服务宕机,持续时间长达2小时以上。 2. **核心服务load过高**:某一核心服务在高峰期load过高,导致JVM线程数飙升,产生线程等待...
- 增强系统稳定性:减少系统宕机时间和故障恢复时间,提升系统的可用性。 - 智能化管理:通过自动负载平衡和故障转移机制,提高系统的灵活性和可靠性。 #### 二、系统整体架构 **2.1 技术框架** - **框架选择**:...
分布式服务框架是现代大型互联网应用的核心技术之一,它旨在解决单体系统在高并发、海量数据场景下的扩展性问题。《分布式服务框架原理与实践》这本书深入浅出地讲解了分布式服务的基础理论和实际操作,对于想要深入...
案例分析: 1. APISrv:APISrv是指使用API服务器来提供Web服务。 2. AuthSrv:AuthSrv是指使用认证服务器来提供认证服务。 3. User DB:User DB是指使用数据库来存储用户信息。 4. POP3/SMTPAttrSrv:POP3/...
- **应用服务器集群**:多台服务器通过负载均衡设备组成集群,共同对外提供服务,任一服务器宕机不会影响整体服务。 - **数据冗余备份**:确保数据在多台服务器上互相备份,即使部分服务器故障也能保证数据安全。 ...