一、开发阶段遇到的问题
商品详情页功能
http://8.133.184.64:8081/15.html
二、上线之后,服务崩溃了
上线之后,面对千军万马,你会发现,啥也不是。
1、搞不好,出现OOM
1)启动脚本
使用脚本: deploy2.sh 启动项目,这个脚本中限定了项目启动的内存大小为:500M
1、Java堆溢出 (java.lang.OutofMemoryError:Java heap space)
内存溢出 out of memory:
是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;
复制代码
2、PermGen space(永久区内部不足)
3、内存泄露 memory leak,
是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光
复制代码
4、StackOverflowError(虚拟机在扩展栈时无法申请到足够的内存空间)
5、直接崩溃
2) 压力测试
压力测试: /product/brand/oom/1115
3)监控内存
jprofiler:
可以发现内存一直处于飙升状态,甚至一度达到了100%,最后甚至程序直接卡死,走不下去了,程序直接崩溃掉了;
4)查看日志
接下来,我们去看一下日志,我们发现直接OOM了,甚至程序错误率100%,直接崩溃
Jmeter:
5)解决方案
jprofiler CPU图:
可以发现cpu爆满,占比几乎达到100%,对于系统来说是一个很危险的信号,随时都有可能崩溃掉。
jprofiler 内存图
可以发现内存平均占用已经超过了80%,甚至有时候占用达到了接近100%,这对于系统来说很危险,随时面临崩溃的风险;
你可以思考一下,这样的bug,你应该如何解决?会解决这种bug的,薪资才能要的上去
2、流量集中,CPU瘫痪
1)启动服务
运行deploy-shop.sh启动脚本,启动你的服务即可。 启动过程中可以查看日志: tail -f product.log , 观察是否启动成功。
2)压力测试
给定了10w个样本进行测试。
测试地址: http://8.133.184.64:8081/15.html , 查询商品详情接口
3)top指令查询,观察cpu指标
可以看见 load average 最终飙到 10以上,说明cpu已经出现了严重的阻塞现象。
4)Jmeter观察TPS
最终结果,就是导致程序出现大量的错误;
3、服务雪崩效应
服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。
造成的原因:
1、服务提供者不可用(硬件故障,BUG,大量请求)
2、重试加大流量(用户重试不断发送请求,代码逻辑重试)
3、服务调用者不可用(同步等待造成资源耗尽)