加入收藏 | 设为首页 | 会员中心 | 我要投稿 沧州站长网 (https://www.0317zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

Linux问题故障定位,看这一篇就够了

发布时间:2019-04-07 13:01:50 所属栏目:Windows 来源:Lucien_168
导读:1. 背景 有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩坑是非常

通过抓取了两张普通的火焰图,然后进行对比,并对差异部分进行标色:红色表示上升,蓝色表示下降。 差分火焰图是以当前(“修改后”)的profile文件作为基准,形状和大小都保持不变。因此你通过色彩的差异就能够很直观的找到差异部分,且可以看出为什么会有这样的差异。

使用方式:

  1. cd quick_location 
  2.  
  3. //抓取代码修改前的profile 1文件 
  4. perf record -F 99 -p pid -g -- sleep 30 
  5. perf script > out.stacks1 
  6.  
  7. //抓取代码修改后的profile 2文件 
  8. perf record -F 99 -p pid -g -- sleep 30 
  9. perf script > out.stacks2 
  10.  
  11. //生成差分火焰图: 
  12. ./FlameGraph/stackcollapse-perf.pl ../out.stacks1 > out.folded1 
  13. ./FlameGraph/stackcollapse-perf.pl ../out.stacks2 > out.folded2 
  14. ./FlameGraph/difffolded.pl out.folded1 out.folded2 | ./FlameGraph/flamegraph.pl > diff2.svg 

DEMO:

  1. //test.c 
  2. #include <stdio.h> 
  3. #include <stdlib.h> 
  4.  
  5. void foo3() 
  6. { 
  7. } 
  8.  
  9. void foo2() 
  10. { 
  11.   int i; 
  12.   for(i=0 ; i < 10; i++) 
  13.        foo3(); 
  14. } 
  15.  
  16. void foo1() 
  17. { 
  18.   int i; 
  19.   for(i = 0; i< 1000; i++) 
  20.      foo3(); 
  21. } 
  22.  
  23. int main(void) 
  24. { 
  25.   int i; 
  26.   for( i =0; i< 1000000000; i++) { 
  27.       foo1(); 
  28.       foo2(); 
  29.   } 
  30. } 
  31.  
  32. //test1.c 
  33. #include <stdio.h> 
  34. #include <stdlib.h> 
  35.  
  36. void foo3() 
  37. { 
  38. } 
  39.  
  40. void foo2() 
  41. { 
  42.   int i; 
  43.   for(i=0 ; i < 10; i++) 
  44.        foo3(); 
  45. } 
  46.  
  47. void foo1() 
  48. { 
  49.   int i; 
  50.   for(i = 0; i< 1000; i++) 
  51.      foo3(); 
  52. } 
  53.  
  54. void add() 
  55. { 
  56.   int i; 
  57.   for(i = 0; i< 10000; i++) 
  58.      foo3(); 
  59. } 
  60.  
  61. int main(void) 
  62. { 
  63.   int i; 
  64.   for( i =0; i< 1000000000; i++) { 
  65.       foo1(); 
  66.       foo2(); 
  67.       add(); 
  68.   } 
  69. } 

DEMO红蓝差分火焰图:

10. 案例分析

10.1 接入层nginx集群异常现象

通过监控插件发现在2017.09.25 19点nginx集群请求流量出现大量的499,5xx状态码。并且发现机器CPU使用率升高,目前一直持续中。

10.2 分析nginx相关指标

a) **分析nginx请求流量:

结论:

通过上图发现流量并没有突增,反而下降了,跟请求流量突增没关系。

b) **分析nginx响应时间

结论:

通过上图发现nginx的响应时间有增加可能跟nginx自身有关系或者跟后端upstream响应时间有关系。

(编辑:沧州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!