美文网首页
某直播平台性能调优手记

某直播平台性能调优手记

作者: 旻璿 | 来源:发表于2020-06-22 09:29 被阅读0次

某直播平台用的后台是人人SpringBoot框架。

其中获取视频流地址的接口是get请求:

https://admin.xxxxxxx.com/renren-admin/liveroom/1272354267629535233,调用后返回JSON数据:

{"code":0,"msg":"success","data":{"id":"1272354267629535233","roomId":"room_1592187871261_3f76","roomInfo":"xxxxxx"}}

目前无论是jmeter还是loadrunner,单独对该接口压测,1000并发就开始大量超时报错。而同样是查询接口,renren-api上的post请求https://api.xxxxxxx.com/renren-api/api/meetingenroll/isRegistration获取报名状态,3000并发轻轻松松没有任何问题。

观察后台进程情况发现,admin上哪怕只压测50个并发,cpu都会飙升。如图,

一些文字和图片的手机截图 描述已自动生成 image

具体来分析,

# top -Hp 18711

前面十几个线程都很平均的占用cpu。

image

找个排第1的来看,

# printf "%x\n" 18714

491a

# jstack 18711 | grep 491a  -A 50
image

全是GC,其他几个线程也全是GC占了CPU。检查三次gccause。

# jstat -gccause 18711 2000 10
image

再看下gc日志,

手机屏幕的截图 描述已自动生成

也没什么问题,虽然有Allocation Failure,但是应该不影响。

代码很简单,就一句自动生成的代码。

image

试着调整启动参数,原启动参数:

java -server -Xms4096m -Xmx4096m -Xmn1024m -Xss256K -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=15 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/gc.log -Djava.awt.headless=true -jar renren-admin.jar

调下:

java -server -Xss256k -Xms2g -Xmx8g -XX:MetaspaceSize=200m -XX:MaxMetaspaceSize=4096m -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/gc_api.log -jar renren-admin.jar

然而只从1000并发提升到1200并发。。

换个思路,用jprofiler分析下到底性能损耗在哪。

JProfiler11 序列号: L-J11-Everyone#speedzodiac-327a9wrs5dxvz#463a59

100并发,api:
1、这是正常的情况

image

100并发,admin:
2、这是异常的情况,各种Blocked Threads

image

快照发现:

image

这个问题参考:

https://www.iteye.com/blog/dikar-767612

http://blog.sina.com.cn/s/blog_5374d6e30100tk6q.html

应该是这个接口是get请求的问题,时间有限,来不及深究了。

先把接口改成post请求解决该性能问题,3000并发妥妥的。

相关文章

网友评论

      本文标题:某直播平台性能调优手记

      本文链接:https://www.haomeiwen.com/subject/cgwtfktx.html