如何查看linux系统可以使用top查看CPU利用率率


一个应用占用CPU很高除了确实是計算密集型应用之外,通常原因都是出现了死循环
下面我们将一步步定位问题,详尽的介绍每一步骤的相关知识

一、通过top命令定位占鼡cpu高的进程

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

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


这里顺便解释下上图各个参数的意义,有利于读者更好的排查问题

系统负载,即任务队列的平均長度1分钟前、5分钟前、15分钟前平均负载

2)第二行为进程的信息

用户空间占用CPU百分比
内核空间占用CPU百分比
用户进程空间内改变过优先级的进程占用CPU百分比
等待输入输出的CPU时间百分比
  1. 第四、五行为内存信息。

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

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

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

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

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

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

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

while循环无法结束一直抢占cpu,导致程序cpu使用过高修改代码即可。
到此为止因为代码问题导致的cpu使用过高的故障排查方法就介绍完了。

tips:由于内存的原因频繁的GC,也可能导致cpu使用过高内存的解决方案在文章中介绍。

笔者是喜欢一、二、三步骤定位cpu使用率过高的问题但是如果读者觉得以上方法不喜欢戓者以上无法定位问题时,可以使用jstack方法获取进程PID41843包含的运行线程的所有状态使用如下命令:

首先我们来介绍下,Jstack的输出中Java线程状态嘚四种状态的概念:

接下来用简单的代码模拟这4种状态的发生,同时介绍下问题的排查方法

执行main函数,使用命令jstack -l PID(pid为printPId函数打印的值)得到鉯下输出信息:状态为RUNNABLE,程序在Test类的runnable()方法中占用cpu一般该状态不会出现问题。但是如果多次执行该命令发现cpu在持续执行该方法,且cpu使用過高可以排查runnable()方法是否存在死循环等持续占用cpu的情况。

2) 让线程一直处于BLOCKED状态(重点关注)

根据以下输出可以看出:
1)“TIMED_WAITING ”中的 timed_waiting 指等待狀态但这里指定了时间,到达指定的时间后自动退出等待状态

4) 让线程处于WAITING状态状态

掌握各个线程的状态和信息,将无往而不利~~

通过jmx可以监控vm内存使用,系统内存使用等

以下是网上某博客代码特点是通过window和linux命令获得CPU使用率。 


 利用java程序实现获取计算机可以使用top查看CPU利用率率和内存使用信息 
 创建一個Bean用来存贮要得到的信 
 
 
 
 
 
 
 
 
 
 
 
 其中,Bytes类用来处理字符串 

  Linux 系统下您可以按如下步骤進行排查:

  1、定位问题。找到影响带宽和 CPU 跑满或跑高的具体进程

     2、分析处理。排查影响带宽和 CPU 跑满或跑高的进程是否正常并分類进行处理

     3、对于 正常进程:您需要对程序进行优化或者升级服务器配置。

  4、对于 异常进程:您可以手动对进程进行查杀也可以使用第三方安全工具去查杀。

  如果云服务器 Linux 系统的 CPU 持续跑高则会对系统稳定性和业务运行造成影响。本文对 CPU 占用率较高问题的排查汾析做简要说明

  CPU 跑满或跑高的问题定位

  若云服务器的 CPU 持续跑高,会对系统的稳定性和业务运行造成影响Linux 系统下,查看进程的瑺用命令如下:

  Linux 系统中通常使用 top 命令来查看系统的负载问题,并定位耗用较多 CPU 资源的进程

  说明:资源负载异常时,通常无法通過 SSH 进行远程连接建议您通过控制台管理终端进行连接。

  通过 top 命令查看系统当前的运行情况

  针对负载问题,您只需关注回显的苐一行和第三行信息详细说明如下。

  top 命令的第三行会显示当前 CPU 资源的总体使用情况下方会显示各个进程的资源占用情况。

  通過字母键 P可以对 CPU 使用率进行倒序排列,进而定位系统中占用 CPU 较高的进程

  说明:通过字母键 M, 您可以对系统内存使用情况进行排序如果有多核 CPU,数字键 1 可以显示每核 CPU 的负载状况

  CPU 跑满或跑高的分析处理

  CPU 的跑满或跑高,在确认具体的进程结果后针对异常的進程,您需要通过 top 命令将其终止;而对于 kswapd0 进程导致的内存不足等问题您需要对系统进行规格的升级或程序的优化。

  使用 top 直接终止 CPU 消耗較大的进程

  您可以直接在 top 运行界面快速终止相应的异常进程操作步骤如下:

  若您想要终止某个进程,只需按下小写的 k 键

  輸入想要终止的进程 PID (top 输出结果的第一列)。例如若您想要终止 PID 为 86 的进程,输入 86 后按回车即可

  操作系统都用分页机制来管理物理内存,系统会把一部分硬盘空间虚拟成内存使用由于内存的速度要比磁盘快得多,所以系统要按照某种换页机制将不需要的页面换到磁盘中将需要的页面调到内存中。

  kswapd0 是虚拟内存管理中负责换页的进程当服务器内存不足的时候 kswapd0 会执行换页操作,这个换页操作是十分消耗主机 CPU 资源的操作步骤如下:

  检查该进程是否持续处于非睡眠状态,且运行时间较长若是,可以初步判定系统在持续地进行换页操作kswapd0 进程占用了系统大量 CPU 资源。

  您可以通过 free 、ps 等指令进一步查询系统及系统内进程的内存占用情况做进一步排查分析。

  针对系统当前内存不足的问题您可以重启 Apache,释放内存

  说明:从长远的角度来看,您需要对内存进行升级

  带宽跑满或跑高的分析處理

  对于正常进程导致的带宽跑满或跑高的问题,需要对服务器的带宽进行升级对于异常进程,有可能是由于恶意程序问题或者昰部分 IP 恶意访问导致,也可能是服务遭到了 CC 攻击

  通常情况下,您可以使用 iftop 工具或 nethogs 查看流量的占用情况进而定位到具体的进程。

  使用 iftop 工具排查

  在服务器内部安装 iftop 流量监控工具

  服务器外网带宽被占满时,如果通过远程无法登陆可进入到服务器内部,运荇下面命令查看流量占用情况:

  注意:-P 参数将会显示请求端口执行 iftop -i eth0 -P 命令,可以查看通过服务器哪个端口建立的连接以及内网流量。举例如下:

  在上图中您可以查看到流量高耗的是服务器上 53139 端口和 115.205.150.235 地址建立的连接。

  经反查服务器上 vsftpd 服务产生大量流量,您鈳以通过停止服务或使用 iptables 服务来对指定地址进行处理如屏蔽 IP 地址或限速,以保证服务器带宽能够正常使用

  在服务器内部安装 nethogs 流量監控工具。

  通过 nethogs 工具来查看网卡上进程级的流量信息若未安装可以通过 yum、apt-get 等方式安装。举例如下:

  查看每个进程的网络带宽情況以及进程对应的 PID

  确定导致带宽跑满或跑高的具体进程。

  若进程确定是恶意程序可以通过执行 kill -TERM 来终止程序。

  说明: 如果昰 Web 服务程序您可以使用 iftop 等工具来查询具体 IP 来源,然后分析 Web 访问日志是否为正常流量日志分析可以使用 logwatch 或 awstats 等工具进行。

我要回帖

更多关于 可以使用top查看CPU利用率 的文章

 

随机推荐