Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式最占cpu的进程

Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式

2016/12/220 Comments

#########

# top -b -o +%CPU | head -n 22
top - 21:02:00 up 2:34, 9 users, load average: 0.10, 0.08, 0.11
Tasks: 190 total, 1 running, 189 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.2 us, 2.2 sy, 0.0 ni, 94.4 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3764128 total, 1585344 free, 1056656 used, 1122128 buff/cache
KiB Swap: 8388592 total, 8388592 free, 0 used. 2093248 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8277 root 20 0 20768 3456 2480 R 12.5 0.1 0:00.03 top
2263 root 20 0 225248 67008 33248 S 6.2 1.8 2:55.64 Xorg
2934 cs2c 20 0 370128 33984 25440 S 6.2 0.9 1:17.02 nm-applet
1 root 20 0 8288 5104 3520 S 0.0 0.1 0:08.16 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:01.34 rcu_preempt
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_sched
11 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
12 root rt 0 0 0 0 S 0.0 0.0 0:00.03 migration/1
13 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/1
16 root rt 0 0 0 0 S 0.0 0.0 0:00.03 migration/2
17 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/2

##########

[[email protected] ~]# top -b -o +%MEM | head -n 22
top - 21:02:21 up 2:34, 9 users, load average: 0.07, 0.07, 0.11
Tasks: 190 total, 1 running, 189 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.2 us, 2.2 sy, 0.0 ni, 94.4 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3764128 total, 1584064 free, 1057904 used, 1122160 buff/cache
KiB Swap: 8388592 total, 8388592 free, 0 used. 2092032 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3809 cs2c 20 0 2048432 276368 131472 S 0.0 7.3 1:35.16 firefox
3884 cs2c 20 0 1648624 227712 83984 S 0.0 6.0 4:01.08 Web Content
3102 cs2c 20 0 687184 143808 100256 S 0.0 3.8 0:16.76 wps
3122 cs2c 20 0 672624 143216 99824 S 0.0 3.8 0:04.76 et
3120 cs2c 20 0 663232 135136 96224 S 0.0 3.6 0:06.21 wpp
3411 cs2c 20 0 659552 131904 94048 S 0.0 3.5 0:05.20 wps
3415 cs2c 20 0 639296 131120 94416 S 0.0 3.5 0:05.75 et
3413 cs2c 20 0 647072 125040 89808 S 0.0 3.3 0:06.36 wpp
2496 cs2c 20 0 606848 74176 39840 S 0.0 2.0 1:22.02 mutter
2263 root 20 0 224224 67008 33248 S 0.0 1.8 2:56.27 Xorg
3998 cs2c 20 0 411600 66016 32448 S 0.0 1.8 0:56.40 xchm
3499 cs2c 20 0 397072 55088 35056 S 0.0 1.5 0:15.05 xchm
2556 cs2c 20 0 1011520 52944 32272 S 0.0 1.4 0:09.02 caja
3586 cs2c 20 0 391040 48208 33120 S 0.0 1.3 0:08.45 xchm
3484 cs2c 20 0 394928 45216 31552 S 0.0 1.2 0:02.22 xchm
[[email protected] ~]#

################

最占cpu的进程

ps 指令輸出

若要找出系統上最耗費 CPU 的程式,也是使用類似的指令,只是在排序時,將排序的欄位換成 CPU 使用量:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head

#########################

?top 指令輸出

若要找出最耗費 CPU 資源的行程,則改用 CPU 使用量來排序即可:

top -b -o +%CPU | head -n 17

###

# ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 4034 4.1 0.0 0 0 ? S 18:34 5:53 [kworker/0:0]
cs2c 3884 2.7 5.8 1643504 219424 ? Sl 18:33 3:58 /usr/lib64/firefox/firefox -contentproc -greomni /usr/lib64/firefox/omni.ja -appomni /usr/lib64/firefox/browser/omni.ja -appdir /usr/lib64/firefox/browser 3809 tab
root 2263 1.9 1.7 224208 67024 tty7 Ssl+ 18:28 2:52 /usr/libexec/Xorg -core -background none :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
cs2c 3809 1.0 7.3 2048432 276368 ? Sl 18:32 1:33 /usr/lib64/firefox/firefox
root 74 0.9 0.0 0 0 ? S 18:27 1:27 [kworker/0:2]
cs2c 2496 0.9 1.9 606848 74176 ? Sl 18:28 1:20 mutter
cs2c 2934 0.8 0.9 370128 33984 ? Sl 18:28 1:15 nm-applet
cs2c 3998 0.6 1.7 411600 66016 ? Sl 18:33 0:56 xchm /home/yixuan/20191009chm/MySQL分布式.chm
cs2c 3453 0.4 0.0 20976 3664 pts/0 S+ 18:28 0:38 top
cs2c 2699 0.2 0.3 263888 14480 ? Sl 18:28 0:18 /usr/libexec/mate-panel/notification-area-applet



####################

#####################

這裡介紹如何在 Linux 中使用 ps 與 top 指令列出系統上最吃 CPU 與記憶體的程式。

作為 Linux 系統的管理者,時常都需要查看系統的負載狀況,如果系統中出現不正常的程式,吃掉太多的 CPU 或記憶體資源,就會影響系統的效能,太嚴重的話甚至會造成當機等狀況。

查閱系統負載(loading)與行程(process)的狀況最常用的就是 ps 與 top 這兩個指令,以下我們示範如何利用這兩個指令撰寫簡單的指令稿,自動找出系統上最耗費資源的程式。

ps 指令

這行指令可利用 ps 指令列出行程的一些基本資訊,按照每個行程所使用的記憶體排序後,列出排名最前面的幾個行程,也就是列出系統上最耗費記憶體的程式:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

這裡的 -e 參數是代表輸出所有行程的資訊,而 -o 參數則是用來指定輸出欄位用的,後面接著所有想要輸出的欄位名稱,這裡我們讓 ps 輸出以下幾個欄位:

  • pid:行程 ID(process ID)。
  • ppid:父行程 ID(parent process ID)。
  • cmd:程式名稱。
  • %mem:記憶體使用量(百分比)。
  • %cpu:CPU 使用量(百分比)。

而 --sort 參數則是指定排序的依據欄位,預設會依照數值由小到大排序,若要由大到小的方式排序的話,可以在欄位名稱前加上一個負號。以這個例子來說,我們將排序的欄位指定為 -%mem,這樣就可以依照記憶體使用量,從大到小排序。

最後將 ps 的輸出以 Linux 管線(pipe)導向至 head,只保留前 10 行的資料,其餘的都丟棄,以下是輸出的結果。

  PID  PPID CMD                         %MEM %CPU
 2124  1278 /usr/lib/chromium-browser/c 25.0 14.4
 1446  1278 /usr/lib/chromium-browser/c 21.5 15.4
 1253     1 /usr/lib/chromium-browser/c 19.2 13.0
 1328  1278 /usr/lib/chromium-browser/c  7.6  2.9
 1392  1278 /usr/lib/chromium-browser/c  7.6  0.5
  732   669 /usr/bin/X :0 -seat seat0 -  5.7  2.0
 1060     1 /usr/lib/arm-linux-gnueabih  1.8  0.0
 1086   758 pcmanfm --desktop --profile  1.5  0.2
 1085   758 lxpanel --profile LXDE-pi    1.5  0.3

ps 指令輸出

若要找出系統上最耗費 CPU 的程式,也是使用類似的指令,只是在排序時,將排序的欄位換成 CPU 使用量:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head

輸出為:

  PID  PPID CMD                         %MEM %CPU
 1446  1278 /usr/lib/chromium-browser/c 33.8 19.6
 1253     1 /usr/lib/chromium-browser/c 19.6 12.1
 2124  1278 /usr/lib/chromium-browser/c 20.5 11.2
 2555     1 gvim -f                      2.5  6.3
 1328  1278 /usr/lib/chromium-browser/c  6.1  3.0
  732   669 /usr/bin/X :0 -seat seat0 -  7.1  2.2
 1392  1278 /usr/lib/chromium-browser/c  6.7  0.5
 1085   758 lxpanel --profile LXDE-pi    1.5  0.3
 1060     1 /usr/lib/arm-linux-gnueabih  1.3  0.1

ps 指令輸出

top 指令

top 指令是一個互動式(interactive)的工具,可以顯示即時的系統負載狀態,而它也可以用於指令稿中,輸出各種系統資訊。

這行指令可將系統行程以記憶體的使用賴排序後,以 batch 模式輸出報表,並且只保留前 10 個最耗費記憶體的行程:

top -b -o +%MEM | head -n 17

其中 -b 參數是 batch 模式的意思,而 -o 參數則是設定以記憶體用量來排序行程,最後面的 head -n 17 則是篩選 top 輸出的文字內容,只保留前 17 行,剩餘的內容則捨棄。輸出會類似這樣:

top - 14:54:24 up 7 min,  3 users,  load average: 0.99, 1.52, 0.87
Tasks: 164 total,   1 running, 163 sleeping,   0 stopped,   0 zombie
%Cpu(s): 17.0 us,  2.7 sy,  0.1 ni, 68.2 id, 11.9 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:    947732 total,   757336 used,   190396 free,     9892 buffers
KiB Swap:  1914876 total,     8588 used,  1906288 free.   288704 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1392 pi        20   0  557272 206424  90776 S   0.0 21.8   1:46.69 chromium-b+
 1223 pi        20   0  674816 194156 126276 S   0.0 20.5   1:42.47 chromium-b+
 1490 pi        20   0  459804 164732  76728 S   5.6 17.4   0:44.62 chromium-b+
  732 root      20   0  245288  84204  52640 S   0.0  8.9   0:15.90 Xorg
 1353 pi        20   0  366756  82720  47504 S   0.0  8.7   0:07.21 chromium-b+
 1357 pi        20   0  355952  77080  55684 S   0.0  8.1   0:09.30 chromium-b+
 1293 pi        20   0  354048  73844  51024 S   0.0  7.8   0:13.32 chromium-b+
 1084 pi        20   0  105612  29380  24928 S   0.0  3.1   0:02.43 lxpanel
 1243 pi        20   0  189852  28780  23760 S   0.0  3.0   0:00.16 chromium-b+
 1086 pi        20   0  147124  26976  24256 S   0.0  2.8   0:01.63 pcmanfm

?top 指令輸出

若要找出最耗費 CPU 資源的行程,則改用 CPU 使用量來排序即可:

top -b -o +%CPU | head -n 17

輸出會類似這樣:

top - 15:12:19 up 25 min,  4 users,  load average: 1.66, 1.43, 1.08
Tasks: 173 total,   1 running, 172 sleeping,   0 stopped,   0 zombie
%Cpu(s): 13.4 us,  1.8 sy,  0.1 ni, 79.0 id,  5.6 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:    947732 total,   870680 used,    77052 free,     5588 buffers
KiB Swap:  1914876 total,   148740 used,  1766136 free.   267360 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1959 pi        20   0  327404  49012  22340 S 107.0  5.2   0:02.75 java
 1490 pi        20   0  459804  99192  49040 S   5.9 10.5   1:26.10 chromium-b+
 1809 pi        20   0  576268 162008  55228 S   5.9 17.1   0:57.49 chromium-b+
 1969 pi        20   0    7052   2380   2060 R   5.9  0.3   0:00.03 top
    1 root      20   0   22948   2768   2120 S   0.0  0.3   0:04.85 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:00.14 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:+
    6 root      20   0       0      0      0 S   0.0  0.0   0:02.67 kworker/u8+
    7 root      20   0       0      0      0 S   0.0  0.0   0:01.41 rcu_sched

通常如果發現異常的程式佔用了太多的 CPU 或記憶體,最好的處理方式就是把這些程式正常關閉,如果程式當掉無法關閉的話,就可以使用 kill 或 killall 這類的指令,中止不正常程式的執行,由於上面的報表中都有每個程式的 PID,所以使用 PID 來中止特定的程式是最直接的方式。

假設我們想要中止的程式其 PID 是 1959,首先我們會用一般的方式嘗試讓程式正常結束:

kill 1959

如過執行這行之後,沒有效果的話,再嘗試強制關閉程式:

kill -9 1959

這兩種 kill 指令是最常見的處理方式。

原文地址:https://www.cnblogs.com/xuanbjut/p/11644297.html

时间: 2024-12-18 16:15:33

Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式最占cpu的进程的相关文章

java程序CPU消耗分析之找出最耗CPU线程

java程序CPU消耗过高一般有两种情况: 1. us过高,应用占用CPU资源过高,需找出具体占用CPU的线程所执行的代码,分析定位问题原因. 分析步骤如下: (1) 使用top命令找出占用cpu最高的JAVA进程 (2) 找出占用cpu最高的线程  top -Hp 1781 (3) 占CPU最高线程17596换算成16进制对应线程44bc 用命令 printf "%x\n" 17596 (4) 打印占CPU最高JAVA进程1781的堆栈信息 jstack 1781> stack

LINUX之ps,pstree,top,vmstat简单介绍

ps,pstree,top,vmstat用来查看进程或系统负载.下面介绍经常使用的命令组合,或显示内容解释. 程序,进程,线程的关系 程序:拥有某此功能(能被cpu运行的指令),可以被cpu调用运行的文件,通常都放在外部存储设备上. 进程:程序文件被调用运行时,一般都在内存中或cpu正在执行的程序. 线程:把进程中的执行任务的指令分成多个片,而每片可以单独做为一个执行流运行和调用,并且每个片可以分配到不同的cpu核心上运行.可以被单独调用的片称为线程.线程是比进程更小的调度单位.比进程更轻量级.

JVM调优之jstack找出最耗cpu的线程并定位代码

一.jstack使用总结 分析java进程,cpu占用高的问题 { 1.找到cpu占用高的进程pid 在top中,按组合键: shift + h ,会按cpu使用从高到低排序2.找到cpu占用高的线程pid top -Hp cpu高的进程pid, shift +h 查找最高线程,显示线程3.jstack 进程的pid | grep -A 线程pid的十六进制 #分析Java应用程序线程堆栈dump出来 printf "%x\n" cpu高的线程pid ==> 得到十六进制 pyt

使用ps、top、ps_mem命令找出Linux中的最大内存消耗过程

使用ps.top.ps_mem命令找出Linux中的最大内存消耗过程 2020-02-08 16:06:59作者:自力稿源:云网牛站 您可能已经看到Linux系统多次消耗过多的内存,如果是这种情况,那么最好的办法是识别在Linux计算机上消耗过多内存的进程.使用top命令和ps命令可以很容易地识别出它,我曾经同时检查这两个命令,并且都得到了相同的结果. 使用ps命令在Linux中查找最大内存消耗过程 ps命令用于报告当前进程的快照,ps命令代表进程状态,这是一个标准的Linux应用程序,用于查找

java:找出占用CPU资源最多的那个线程(HOW TO)

在这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结:linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: 先用top命令找出占用资源厉害的java进程id,如: 如上图所示,java的进程id为'12377',接下来用top命令单独对这个进程中的所有线程作监视: ? 1 top -p 12377 -H 如图: 如上图所示,linux下,所有的java内部线程,其实都对应了一

一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存

Top K 算法详解应用场景: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节.        假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个.一个查询串的重复度越高,说明查询它的用户越多,也就是越热门.),请你统计最热门的10个查询串,要求使用的内存不能超过1G. 必备知识:什么是哈希表?        哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进

ps与top命令简单介绍

Linux中ps与top命令 这两个命令都是查看系统进程信息的命令,但是用处有点儿不同 1.ps命令--提供系统过去信息的一次性快照 也就是说ps命令能够查看刚刚系统的进程信息  命令:ps aux或者ps lax [[email protected] ~]# ps aux USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND root         1  0.1  0.1   2032   644 ?

Java中用正则表达式找出数字

Java中用正则表达式找出数字 1.题目    String str = "fjd789klsd908434jk#$$%%^38488545",从中找出78990843438488545,请找到解决办法 2.实现源码 /** * */ package com.you.model; /** * @author YouHaidong * */ public class FindNumber { /** * 字符串str */ public static String str = "

找出Linux的名称,版本以及内核详细

This short tutorial is intended to help newbies who don't know how to find out the Linux distribution name, version and kernel details via command line. Method 1 – Distribution & Version Details Command: cat /etc/*-release Sample Output On CentOS 6.4