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

Linux系统线上故障排查的几种技巧

发布时间:2019-03-30 10:06:15 所属栏目:Windows 来源:Java面经
导读:无论是开发还是运维,和 Linux 打交道是每个技术人的日常。然而,性能优化、故障排查也是软件系统中最有挑战的工作之一,甭管看了多少资料和书,一旦涉及到解决具体问题,照样儿一脸懵逼,比如: 流量高峰期,服务器 CPU 使用率过高报警,你登录 Linux 上

无论是开发还是运维,和 Linux 打交道是每个技术人的日常。然而,性能优化、故障排查也是软件系统中最有挑战的工作之一,甭管看了多少资料和书,一旦涉及到解决具体问题,照样儿一脸懵逼,比如:

  • 流量高峰期,服务器 CPU 使用率过高报警,你登录 Linux 上去 top 完之后,却不知道怎么进一步定位,到底是系统 CPU 资源太少,还是程序并发部分写得有问题?
  • 系统并没有跑什么吃内存的程序,但在敲完 free 命令之后,却发现已经没什么内存了,到底是哪里占用了内存?为什么?
  • 一大早就收到 Zabbix 告警,你发现某台存放监控数据的数据库主机 CPU 的 I/O Wait 较高,该怎么办?

Linux系统线上故障排查的几种技巧

下面,介绍几个 CPU 使用率过高的排查技巧:

1、通过top命令定位占用cpu高的进程

执行top命令得到以下结果:

通过上图可以明显看出进程PID41843占用cpu过高,明显存在问题,,定位到了进程id。当然如果你想只观察进程PID41843的CPU和内存以及负载情况,可以使用以下命令

  1. top -p 41843 

结果如下:

2、通过top命令定位问题进程中每个线程占用cpu情况

通过问题进程中每个线程占用cpu情况使用可以使用如下命令:

  1. top -p 41843 -H 

查看进程PID41843的每一个线程占用CPU情况,如图。

由上图明显可以发现,线程PID41892CPU占用率最高,接下来定位该线程的代码是否出现异常导致cpu占用过高。

3、通过jstack 命令定位问题代码

上一步发现PID41892占用的CPU过高,就将这个PID转换成16进制,易知,PID41892转化成16进制为a3a4。使用如下命令命令定位问题代码:

  1. jstack 41892 | grep a3a4 

输出如下:

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

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

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

当然了,除了cpu以外,还有很多其它问题,这种类似的排查经验只能从实践中总结,原理书是不会告诉你这些的。几年前,我自己学习那会儿也看了不少书,尝试从网上找过些零零散散的资料。但说真的,Linux 性能优化是个系统工程,除了要学习那些基础知识点之外,还有 2 点比较重要:

  • 掌握性能优化的思路和方法,尝试大量 Linux 性能工具
  • 从学习到输出,说白了就是不断实践,从实践中总结经验

【编辑推荐】

  1. 攻克Linux系统编程,细说系统调用规范,入行要先熟悉套路
  2. 为什么Linux系统管理员需要编程技能
  3. 4个Linux小技巧帮你提高机器学习生产效率
  4. 如何挑选适合自己的Linux系统版本?
  5. 一文告诉你如何全方位监控Linux系统状况
【责任编辑:武晓燕 TEL:(010)68476606】
点赞 0

(编辑:宜春站长网)

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

    热点阅读