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

某直播平台性能调优手记

作者: 旻璿 | 来源:发表于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