linux top 定位线上问题

  当 cpu 飙升到 500%时,先用操作系统命令 top 命令观察是不是 mysqld 占用导致的,如果不是,找出占用高的进程,进行相关处理。

  如果是 mysqld 造成的, show processlist,看看里面跑的 session 情况,是不是有消耗资源的 sql 在运行。找出消耗高的 sql,看看是没用上索引还是IO过大造成的。

  定位问题,首先要定位问题出在哪个层次上。比如,是 Java 应用程序自身的问题还是外部因素导致的问题。我们可以先查看程序是否有异常,异常信息一般比较具体,可以马上定位到大概的问题方向;如果是一些资源消耗型的问题可能不会有异常,我们可以通过指标监控配合显性问题点来定位。

组件的问题,可以从以下几个方面排查:

  • 排查组件所在主机是否有问题;
  • 排查组件进程基本情况,观察各种监控指标;
  • 查看组件的日志输出,特别是错误日志;
  • 进入组件控制台,使用一些命令查看其运作情况。

linux top显示信息详解

第三,因为系统资源不够造成系统假死的问题,通常需要先通过重启和扩容解决问题,之后再进行分析,不过最好能留一个节点作为现场。系统资源不够,一般体现在 CPU 使用高、内存泄漏或 OOM 的问题、IO 问题、网络相关问题这四个方面。

对于 CPU 使用高的问题,如果现场还在,具体的分析流程是:

首先,在 Linux 服务器上运行top -Hp pid命令,来查看进程中哪个线程 CPU 使用高; 然后,输入大写的 P 将线程按照
CPU 使用率排序,并把明显占用 CPU 的线程 ID 转换为 16 进制; 最后,在 jstack 命令输出的线程栈中搜索这个线程
ID,定位出问题的线程当时的调用栈。

如果没有条件直接在服务器上运行 top 命令的话,我们可以用采样的方式定位问题:间隔固定秒数(比如 10 秒)运行一次 jstack 命令,采样几次后,对比采样得出哪些线程始终处于运行状态,分析出问题的线程。

如果现场没有了,我们可以通过排除法来分析。CPU 使用高,一般是由下面的因素引起的:

突发压力。这类问题,我们可以通过应用之前的负载均衡的流量或日志量来确认,诸如 Nginx 等反向代理都会记录 URL,可以依靠代理的 Access Log 进行细化定位,也可以通过监控观察 JVM 线程数的情况。压力问题导致 CPU 使用高的情况下,如果程序的各资源使用没有明显不正常,之后可以通过压测 +Profiler(jvisualvm 就有这个功能)进一步定位热点方法;如果资源使用不正常,比如产生了几千个线程,就需要考虑调参。

GC。这种情况,我们可以通过 JVM 监控 GC 相关指标、GC Log 进行确认。如果确认是 GC 的压力,那么内存使用也很可能会不正常,需要按照内存问题分析流程做进一步分析。

程序中死循环逻辑或不正常的处理流程。这类问题,我们可以结合应用日志分析。一般情况下,应用执行过程中都会产生一些日志,可以重点关注日志量异常部分。

实战那些事儿2

实时地检测进程,查看系统资源使用情况;

输入的第一部分显示的是系统的概况:

在这里插入图片描述

统计信息: 系统整体的统计信息;

第一行:当前时间、登录的用户数、
第二行:任务(进程)在运行、休眠、停止、僵化状态;
第三行:cpu的概要信息;
第四行:Cpus CPU相关信息
第五行:交换分区相关信息

显示进程:
top
显示完整命令
top -c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值