• Arthas协助排查线上skywalking不可用问题3


    转载自:https://www.jianshu.com/p/8602deba54fb

    在 dev 环境引入 SkyWalking 之后,ES CPU 长期飙到 200%。我们需要定位一下到底是内存不足导致的疯狂 GC 引致 CPU飙高,还是因为 CPU 不足运算性能太低导致的。

    性能问题分析

    具体情况如下图,可见 ES 的 CPU 消耗极高


     
    image.png

    首先我们判断是否是因为GC原因导致CPU飙高

    jstat -gcutil {processID} 1000 30 #间隔1s执行20次
    
     
    image.png

    年轻代的内存分分钟就满了,每秒差不多都要执行 3 次 Young GC。老年代内存每次到 70+% 的时候就要执行 FULL GC 了,差不多每10s执行一次 FULL GC 可以说太频繁了。

    这个时候我们大概能确定是 GC 导致 CPU 太高,但是我们还需要更多的证据。

    sudo -u elasticsearch jstack {processID} > /tmp/es-thread-stack.txt #导出线程堆栈信息
    
    top -n 1 -H {processID} #查看指定进程的线程CPU使用情况
    

    这里我们执行三次此命令,多次采样取平均值。


     
    ![image.png](https://upload-images.jianshu.io/upload_images/625996-da52e57ba5983249.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    图中PID即为线程ID,将其转换为16进制在 es-thread-stack.txt 文件中进行查询。

    cat es-thread-stack.txt | grep $(printf %x {threadId})
    
    21375-20.0%: "elasticsearch[C92gS_3][refresh][T#1]"
    21385-20.0%: "elasticsearch[C92gS_3][http_server_worker][T#2]"
    21096-13.3%: "Gang worker#2 (Parallel GC Threads)"
    21098-13.3%: "Gang worker#3 (Parallel GC Threads)"
    21376-13.3%: "elasticsearch[C92gS_3][refresh][T#2]"
    21495-13.3%: "elasticsearch[C92gS_3][write][T#2]"
    21560-13.3%: "elasticsearch[C92gS_3][write][T#4]"
    21094-6.70%: "Gang worker#0 (Parallel GC Threads)"
    21095-6.70%: "Gang worker#1 (Parallel GC Threads)"
    21494-6.70%: "elasticsearch[C92gS_3][write][T#1]"
    21559-6.70%: "elasticsearch[C92gS_3][write][T#3]"
    22420-6.70%: "elasticsearch[C92gS_3][search][T#2]"
    22423-6.70%: "elasticsearch[C92gS_3][search][T#1]"
    22424-6.70%: "elasticsearch[C92gS_3][search][T#4]"
    22446-6.70%: "elasticsearch[C92gS_3][search][T#6]"
    22458-6.70%: "elasticsearch[C92gS_3][search][T#7]"
    
    total CPU: 166.8% , elasticsearch CPU: 126.8% , GC CPU: 40.0%
    
     
    image.png
    21375-46.7%: "elasticsearch[C92gS_3][refresh][T#1]" 
    21376-40.0%: "elasticsearch[C92gS_3][refresh][T#2]"
    21397-26.7%: "elasticsearch[C92gS_3][http_server_worker][T#5]"
    21396-13.3%: "elasticsearch[C92gS_3][http_server_worker][T#4]"
    21495-13.3%: "elasticsearch[C92gS_3][write][T#2]"
    21494-6.7%:  "elasticsearch[C92gS_3][write][T#1]"
    21559-6.7%:  "elasticsearch[C92gS_3][write][T#3]"
    21560-6.7%:  "elasticsearch[C92gS_3][write][T#4]"
    22420-6.7%:  "elasticsearch[C92gS_3][search][T#2]"
    22422-6.7%:  "elasticsearch[C92gS_3][search][T#3]"
    22423-6.7%:  "elasticsearch[C92gS_3][search][T#1]"
    22436-6.7%:  "elasticsearch[C92gS_3][search][T#5]"
    22446-6.7%:  "elasticsearch[C92gS_3][search][T#6]"
    22458-6.7%:  "elasticsearch[C92gS_3][search][T#7]"
    
    total CPU: 200.3% , elasticsearch CPU: 200.3% , GC CPU: 0.0%
    
     
    image.png
    21376-25.0%: "elasticsearch[C92gS_3][refresh][T#2]"
    21094-18.8%: "Gang worker#0 (Parallel GC Threads)"
    21095-18.8%: "Gang worker#1 (Parallel GC Threads)"
    21098-18.8%: "Gang worker#3 (Parallel GC Threads)"
    21375-18.8%: "elasticsearch[C92gS_3][refresh][T#1]"
    21096-12.5%: "Gang worker#2 (Parallel GC Threads)"
    21494-12.5%: "elasticsearch[C92gS_3][write][T#1]"
    22458-12.5%: "elasticsearch[C92gS_3][search][T#7]"
    21116-6.2%:  "VM Thread"
    21446-6.2%:  "elasticsearch[C92gS_3][http_server_worker][T#7]"
    21495-6.2%:  "elasticsearch[C92gS_3][write][T#2]"
    21560-6.2%:  "elasticsearch[C92gS_3][write][T#4]"
    22370-6.2%:  "elasticsearch[C92gS_3][http_server_worker][T#8]"
    22424-6.2%:  "elasticsearch[C92gS_3][search][T#4]"
    22446-6.2%:  "elasticsearch[C92gS_3][search][T#6]"
    
    total CPU: 181.1% , elasticsearch CPU: 106.0% , GC CPU: 75.1%
    

    取三次的平均值

    total CPU: 182.7 , elasticsearch CPU: 144.4% , GC CPU: 38.3%
    

    根据该部分数据分析,ES 当前运行的机器不仅内存不足,CPU性能也不够。

    关闭 SkyWalking 的性能情况

     
    image.png

    CPU 基本都在 100% 以下

     
    image.png

    可以看到 Young GC 和 FULL GC 大大降低,不过看这个情况内存还是不太够。

    总结

    目前 dev 环境仅接入了 1/3 的节点,但是对 ES 的影响就已经如此巨大。为了测试和开发的完整性,目前的方案是降低 SkyWalking 应用端的采样率,ES 服务单独部署在高配机器上。

    SkyWalking 对于应用端的性能影响及其的低,但是针对存储端的影响是非常大的。在上线之前除了针对 SkyWalking 本身对应用端性能的测试外,还要根据测试环境 ES 的运行情况评估线上 ES 是否要增加集群节点。



    作者:Koosy
    链接:https://www.jianshu.com/p/8602deba54fb
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    高格-远程支持中的奇怪问题【15】
    关于er图的几个工具
    如何解决win10明明是管理员还要权限的问题
    判断日期天数
    谈一谈在公司两次压测我总结的思路
    vue学习之-----v-model数据双向绑定,自定义组件父子传参
    Js各种小技巧总结
    openlayers学习之-----核心类
    openlayers学习之-----把坐标点改为WKT格式的数据
    新书介绍 -- 《Redis核心原理与实践》
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/13633448.html
Copyright © 2020-2023  润新知