专栏首页Linyb极客之路程序员不可不知的Linux性能工具

程序员不可不知的Linux性能工具

前言

际开发中,有时候会收到一些服务的监控报警,比如CPU飙高,内存飙高等,这个时候,我们会登录到服务器上进行排查。本篇博客将涵盖这方面的知识:Linux性能工具。

一次线上问题排查模拟

背景:服务在平稳运行一段时间后,CPU突然飙高。

通过top命令,可以确认下,到底是哪个进程导致CPU飙高了(也许是误报呢?)。 可以看到图中PID是2816的进程,CPU使用率非常高。

使用top -Hp 2816来对进程下的线程进行观察。图中可以发现,2825这个线程CPU非常高。

这里利用Python非常方便的把十进制的线程ID转化成了16进制,为什么要这么做呢? 因为在接下来的线程DUMP文件中使用的就是16进制的NID。

在实际中,我们应该利用jstack pid多DUMP几次,因为线程存在状态转换,因此多次DUMP有利于抓取到线程更多的信息。 图中,你可以观察到,一个线程得到了锁,在运行,迟迟没有释放,而另一个线程一直在等待这个锁。至此,就可以到去查看代码去分析为什么锁迟迟不释放的原因了。

性能监测工具top详解

上文的案例中,就使用到了top,而在实际中,top的信息量是很大的,这里详细分析下。

第一行: 涉及到2个时间,一个是系统时间,一个是机器运行的时间。【我们应该重点关注的是机器运行的时间,Why? 有时候,重启机器能带来很多问题,你懂的!】 多少用户登录了系统?【通过who/w/history可以查到更多信息】 3个load值是什么含义? 分别代表的是1MIN,5MIN,15MIN机器的负载情况,如何确定负载的大小呢?需要和CPU的核数相结合来看,比如该机器是4核CPU,那么如果load值超过了4,就意味着负载很大了!【在top下按下1可以观察出CPU的个数】 上述信息,其实也可以通过uptime命令来获取。 第二行: 主要是总共有多少个任务,重点应该关注的是僵尸状态的任务数。 第三行: 主要是CPU的一些信息。 US/SY,说的就是用户进程和系统进程使用CPU的占比。 NI,即NICE,表示被调整过线程优先级的进程占比,这个比例正常不应该很大。 ID,表示空闲;WA表示资源等待的时间,比如在瞬时大流量下,服务打了很多日志的话,那么这个值就会飙高,因为这会很消耗资源的。 HI,硬中断,一般就是外设引起的,如果HI飙高的话,那么意味着外设在硬件层面出现了问题。SI表示软中断。 ST,即steel,如果该主机是虚拟的话会有这个ST信息,也即是该虚拟机从宿主机获取CPU的时间片的百分占比。

第四和第五行: 这里主要说2个概念性的东西:buffer 和 cache。 buffer主要是什么呢?应该是待处理的数据,主要是处理2个系统之间速度不匹配的问题。而cache,一般应该是结果数据的缓存,比如从DB加载一些信息供查询用。 SWAP分区,就是想利用硬盘的做一部分缓存,如果SWAP交换非常频繁的话,就是说内存不够用! 列表说明: PID 进程ID、USER 用户、PR 优先级、VIRT 虚拟内存、RES 驻留内存、SHR 共享内存 这里需要指出的是,RES表示的是该进程实际占用的内存,而并不是申请的内存大小。也就是说当前进程所占用的内存物理大小是 RES-SHR。

本文分享自微信公众号 - Linyb极客之路(gh_c420b2cf6b47),作者:zfz_linux_boy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何查看 Linux 服务器性能参数指标?

    这里只是一些简单的工具查看系统的相关参数,当然很多工具也是通过分析加工 /proc、/sys 下的数据来工作的,而那些更加细致、专业的性能监测和调优,可能还需要...

    lyb-geek
  • Java中实现不可变Map

    有时最好不允许修改 java.util.Map, 例如跨线程共享只读数据。为此,我们可以使用Unmodifiable Map或Immutable Map。

    lyb-geek
  • linux系统下ps -aux和ps -ef命令参数的作用及区别详解

    在linux系统中,ps是简单而强大的进程查看命令,而ps -aux和ps -ef是打印出所有进程。其中的参数详解如下:ps -aux是以BSD方式显示a显示所...

    lyb-geek
  • 程序员不可不知的Linux性能工具

    在实际开发中,有时候会收到一些服务的监控报警,比如CPU飙高,内存飙高等,这个时候,我们会登录到服务器上进行排查。本篇博客将涵盖这方面的知识:Linux性能工具...

    用户2890438
  • 数据猿专访丨VMware中国区研发中心总经理任道远:中国经济放缓正是大数据的发展良机

    <数据猿导读> 数据猿专访VMware中国区研发中心总经理任道远是他说道,中国宏观经济可能进入新常态,增长减速,企业面临业务增长的挑战,但同时也是面临着成本的有...

    数据猿
  • 【DB笔试面试738】在Oracle中,将RAC备份集恢复到单实例数据库的步骤有哪些?

    将RAC备份集恢复到单实例数据库的过程基本上就是先将备份集恢复为RAC数据库,然后再将数据库转换为单实例的数据库。

    小麦苗DBA宝典
  • NGINX 配置本地HTTPS(双向认证)

    1、客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。  2、服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的...

    py3study
  • Myeclipse中java web.xml报错cvc-complex-type.2.3: Element 'web-app' cannot have character [children], be

      由于是粘贴过来的编码可能有问题,将xml中的文本重新手打输入一遍,一般就会解决这种问题。

    黑泽君
  • 独家 | 文本数据探索性数据分析结合可视化和NLP产生见解(附代码)

    作为数据科学家或NLP专家,可视化地表示文本文档的内容是文本挖掘领域中最重要的任务之一。然而,在可视化非结构化 (文本)数据和结构化数据之间存在一些差距。

    数据派THU
  • 聊一聊线程变量绑定之ThreadLocal

    这里我们从源码角度来聊一聊 ThreadLocal 的原理。先来看一看它的属性和方法:

    开发架构二三事

扫码关注云+社区

领取腾讯云代金券