面对流量洪流,请准备好你的姿势(1)

·  阅读 281

一、开发阶段遇到的问题

image.png

商品详情页功能

http://8.133.184.64:8081/15.html

二、上线之后,服务崩溃了

上线之后,面对千军万马,你会发现,啥也不是。

1、搞不好,出现OOM

1)启动脚本

使用脚本: deploy2.sh 启动项目,这个脚本中限定了项目启动的内存大小为:500M

image.png

1、Java堆溢出 (java.lang.OutofMemoryError:Java heap space)

内存溢出 out of memory:

是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;
复制代码

2、PermGen space(永久区内部不足)

3、内存泄露 memory leak,

是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光
复制代码

4、StackOverflowError(虚拟机在扩展栈时无法申请到足够的内存空间)

5、直接崩溃

2) 压力测试

image.png

压力测试: /product/brand/oom/1115

3)监控内存

jprofiler:

image.png

可以发现内存一直处于飙升状态,甚至一度达到了100%,最后甚至程序直接卡死,走不下去了,程序直接崩溃掉了;

4)查看日志

image.png

接下来,我们去看一下日志,我们发现直接OOM了,甚至程序错误率100%,直接崩溃

Jmeter:

image.png

5)解决方案

image.png

image.png

image.png

jprofiler CPU图:

image.png 可以发现cpu爆满,占比几乎达到100%,对于系统来说是一个很危险的信号,随时都有可能崩溃掉。

jprofiler 内存图

image.png

可以发现内存平均占用已经超过了80%,甚至有时候占用达到了接近100%,这对于系统来说很危险,随时面临崩溃的风险;

你可以思考一下,这样的bug,你应该如何解决?会解决这种bug的,薪资才能要的上去

2、流量集中,CPU瘫痪

1)启动服务

image.png

运行deploy-shop.sh启动脚本,启动你的服务即可。 启动过程中可以查看日志: tail -f product.log , 观察是否启动成功。

2)压力测试

给定了10w个样本进行测试。

image.png

测试地址: http://8.133.184.64:8081/15.html , 查询商品详情接口

3)top指令查询,观察cpu指标

image.png

可以看见 load average 最终飙到 10以上,说明cpu已经出现了严重的阻塞现象。

image.png

4)Jmeter观察TPS

image.png

最终结果,就是导致程序出现大量的错误;

3、服务雪崩效应

服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。

image.png

造成的原因:

1、服务提供者不可用(硬件故障,BUG,大量请求)

2、重试加大流量(用户重试不断发送请求,代码逻辑重试)

3、服务调用者不可用(同步等待造成资源耗尽)

分类:
后端
标签:
分类:
后端
标签: