千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:郑州千锋IT培训  >  行业资讯  >  郑州云计算学习之如何快速排查线上Linux系统故障

郑州云计算学习之如何快速排查线上Linux系统故障

来源:千锋教育
发布人:Yolanda
时间: 2019-06-26 11:31:00

  和Linux打交道、在服务器上分析系统性能是每个Linux运维工程师或云计算开发人员的工作日常,而性能优化被看做是软件系统中最有挑战的工作之一,让工作人员很是头疼。今天千锋小编就给大家分享郑州云计算学习中快速排查线上Linux系统故障的方法。

  Linux性能优化是个系统工程,除了要学习那些基础知识点之外,还有2点比较重要:1)掌握性能优化的思路和方法,尝试大量Linux性能工具;2)从学习到输出,即不断实践、从实践中总结经验。只有理论知识与实践相结合,你才能把观察到的性能问题跟系统原理关联起来。

  线上Linux系统故障的原因通常包括以下几个方面:

  一、CPU使用率过高

  一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。排查技巧如下:

  1)通过top命令定位占用CPU高的进程。比如进程PID41843占用CPU过高,明显存在问题,定位到了进程id。当然如果你想只观察进程PID41843的CPU和内存以及负载情况,可以使用命令:top -p 41843

图片5

  top命令执行结果

图片6

  top -p 41843命令执行结果

  2)通过top命令定位问题进程中每个线程占用CPU情况。使用命令:top -p 41843 -H

图片7

  top -p 41843 -H的执行结果

  3)通过jstack 命令定位问题代码。比如发现线程PID41892占用的CPU过高,就将这个PID转换成16进制,其中PID41892转化成16进制为a3a4。使用如下命令命令定位问题代码:jstack 41892 | grep a3a4

  输出如下:

  "Thread" prio=10 tid=0x00007f950043e000 nid=0x54ee in test();

  可以分析得到:线程Thread下的wait()函数cpu使用率很高,查看源代码中的test()函数代码如下:

  public void test(){

  while(true){

  for(int i = 0 ;i<100;i++);

  }

  }

  while循环无法结束,一直抢占CPU,导致程序CPU使用过高,修改代码即可。

  二、内存占用过高

  在Java开发中,常见的异常及解决方法如下:

  java.lang.OutOfMemoryError: PermGen space

  异常出现原因:应用中有很多CLASS的话,就很可能出现PermGen space错误。WEB或者APP用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)就会产生此错误信息。

  解决方法:调整PermSize、MaxPermSize的大小;减少jar重复使用,重复占用内存。

  java.lang.OutOfMemoryError: Java heap space

  异常出现原因:在JVM中,如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

  异常原因排查步骤:

  1)通过jstat命令查询gc情况。通过top命令定位到内存占用过高的进程PID后,排查该进程的GC情况,命令:jstat -gccause 41843 2000

图片8

  jstat命令的结果

  2)通过jmap命令查询进程实体类内存占用情况。如果步骤1中发现,gc非常频繁,则可以使用jmap命令查询进程实体类内存占用情况。命令:jmap -histo:live 41843 | head -n 100

图片9

  jmap 命令结果

  可以看出,jdbc所占用的存活对象特别多,而且占用的内存也很高,从这里就可以看出,需要去检查下mysql的调用中,哪里存在问题,有内存泄露。

  3)通过jmap命令查询进程堆的使用情况。如果以上没有查出问题,可以看看进程中,新生代、老年代、永久代的使用情况。命令:jmap -heap 41843

图片10

  jmap -heap 41843结果

  如果发现频繁的gc是因为新生代、老年代、永久代分配的大小有问题,则可以通过修改设置解决。

  永久代解决方法:调整PermSize、MaxPermSize的大小;减少jar重复使用,重复占用内存。

  新生代、老年代解决方法:调整Xms -Xmx -Xmn的大小。

  如果你想了解更多郑州云计算学习教程资料,可以关注“千锋郑州校区”微信公众号,定期发布技术热点和行业趋势分析,助你更快更好地了解行业需求。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

大数据培训要花多少钱

2023-04-12

计算机前端怎么学

2023-04-12

大数据都需要学什么?难不难

2023-03-30

最新文章NEW

javaee是前端还是后端,都学什么

2023-03-24

it前端是做什么的

2023-03-24

大数据培训要多久?你了解多少

2023-03-09

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>