用户工具

站点工具


linux_basic:linux_expert:release_busy

locate

以实战的角度解读 sort 、uniq、top、ps 、tty、grep 、egrep

# 快速定位占用cpu内存的进程
ps -e -o "comm,rsz,pmem,pcpu" | awk '{rsz[$1] += $2; mem[$1] += $3; cpu[$1] += $4 }END{ for(i in rsz){ print cpu[i],"\t"mem[i],"\t"rsz[i]/1024" MiB","\t"i}}' | awk '{if ($1 > 0 || $2 > 0 || $3 > 0) print $0}' | sort -k 4,4 ; history -c


0       0.2     4.625 MiB       rsyslogd
0       0.2     5.41016 MiB     dhclient
0       0.2     5.65234 MiB     sftp-server
0       0.3     9.47266 MiB     bash
0       0.4     15.4688 MiB     nginxfrontend
0       0.4     8.05469 MiB     vmtoolsd
0       0.4     8.78906 MiB     NetworkManager
0       0.5     10.5234 MiB     VGAuthService
0       0.6     12.7227 MiB     polkitd
0       0.7     14.3594 MiB     haproxy
0       0.8     17.0078 MiB     tuned
0       1.4     28.8359 MiB     firewalld
0       1.4     30.2227 MiB     sshd
0       2.7     60.1836 MiB     httpd
0       7.3     157.73 MiB      php-fpm

sort

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。

# sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
# ASCII除特殊字符、标点符号外,按数字、大写字母、小写字母依次输出。

-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
-u: 去除重复行

  1. 有列的概念 -t 指定。冒号、空格等可以作为列分隔符
  2. 参数不分先后

sort -rk 1 -t " " sort.txt
# 以空格间隔后,反向对第一列逐字符进行排序(实际上是从第1列开始一直到行尾排列下去)
sohu 100 4500
guge 50 3000
google 110 5000
baidu 100 5000

sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
# 以空格间隔后,正向对第1列第2个字符到第1列第2个字符进行排序的,再只对第3列进行逐字符进行反向排序
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000

ps

提醒:如果服务器top显示CPU 1分钟、5分钟、15分钟过高,可能导致ps执行卡死。可以另开一个ssh窗口。kill提一个进程,再马上执行ps,此种情况是因为你还没有定位到原因的临时办法。

[root@VM_0_5_centos ~]# ps --help
Usage:
 ps [options]

 Try 'ps --help <simple|list|output|threads|misc|all>'   # human
  or 'ps --help <s|l|o|t|m|a>'                           # simple
 for additional help text.

For more details see ps(1).  # 更多详见 man ps

完整版帮助

ps的参数控制分为2类:

  1. 横向控制:过滤要输出显示的行(如,仅匹配指定进程或所有进程,过滤条件可以是列标:pid、user、pmem…, 多条件之间以逗号或空格间隔)
  2. 纵向控制:过滤要输出显示的列(如,显示额外列信息,有预置定义的,也有-o可以数学定义)
[root@VM_0_5_centos ~]# ps --help a

Usage:
 ps [options]

Basic options:        #基本操作 [横向控制参数]
 -A, -e               all processes
 -a                   all with tty, except session leaders
  a                   all with tty, including other users
 -d                   all except session leaders
 -N, --deselect       negate selection
  r                   only running processes
  T                   all processes on this terminal
  x                   processes without controlling ttys

Selection by list:    [横向控制参数]
 -C <command>         command name
 -G, --Group <GID>    real group id or name
 -g, --group <group>  session or effective group name
 -p, p, --pid <PID>   process id
        --ppid <PID>  parent process id
 -q, q, --quick-pid <PID>
                      process id (quick mode)
 -s, --sid <session>  session id
 -t, t, --tty <tty>   terminal
 -u, U, --user <UID>  effective user id or name
 -U, --User <UID>     real user id or name

  The selection options take as their argument either:
    a comma-separated list e.g. '-u root,nobody' or
    a blank-separated list e.g. '-p 123 4567'
---------------------------------------------------------------#输出显示控制
Output formats:       #输出显示控制。 [纵向控制参数]
#以下控制是否输出相应列
 -F                   extra full
 -f                   full-format, including command lines
  f, --forest         ascii art process tree
 -H                   show process hierarchy
 -j                   jobs format
  j                   BSD job control format
 -l                   long format
  l                   BSD long format
 -M, Z                add security data (for SELinux)

# 以下输出任意定义列
 -O <format>          preloaded with default columns
  O <format>          as -O, with BSD personality
 -o, o, --format <format>
                      user-defined format  : ps -e -o pid,rss,comm
 
# 输出预定义列                      [纵向控制参数]
                      #    s u v X  是预定义的几种输出,后文有输出示例
  s                   signal format
  u                   user-oriented format
  v                   virtual memory format
  X                   register format
 -y                   do not show flags, show rss vs. addr (used with -l)
     --context        display security context (for SELinux)
     --headers        repeat header lines, one per page     
                      #满屏自动再次添加表头信息(大概在第7行处),不再用向上找对应的表头。简化参数 h有冲突,不建议使用
     --no-headers     do not print header at all
     --cols, --columns, --width <num>
                      set screen width
     --rows, --lines <num>
                      set screen height
---------------------------------------------------------------#显示多线程信息
Show threads:         #显示多线程信息   [纵向控制参数]
  H                   as if they were processes
 -L                   possibly with LWP and NLWP columns
 -m, m                after processes
 -T                   possibly with SPID column
---------------------------------------------------------------#杂项
Miscellaneous options: # 杂项
 -c                   show scheduling class with -l option
  c                   show true command name
  e                   show the environment after command       #显示命令的环境变量 ps e 
  k,    --sort        specify sort order as: [+|-]key[,[+|-]key[,...]]
  L                   show format specifiers                   #显示列标题对应关系(重要,有用),ps L ,详见下文Appendix
  n                   display numeric uid and wchan
  S,    --cumulative  include some dead child process data
 -y                   do not show flags, show rss (only with -l)
 -V, V, --version     display version information and exit
 -w, w                unlimited output width

        --help <simple|list|output|threads|misc|all>
                      display help and exit

For more details see ps(1).

  1. USER - Username : The name of the user associated with the process.
  2. PID - Process ID : The unique numeric identifier assigned to the process.
  3. %CPU - Percentage of CPU: Time used (total CPU time divided by length of time the process has been running).
  4. %MEM - Percentage of RAM Memory: used (memory used divided by total memory available).
  5. VSZ - Virtual Memory Size: Size of the process in virtual memory expressed in KiB.
  6. RSS - Resident Set Size.
  7. TTY - Terminal controlling the process.
  8. STAT - Process State - Possible values.
    • R - Running.
    • S - Sleeping (may be interrupted).
    • D - Sleeping (may not be interrupted) - used to indicate process is handling input/output.
    • T - Stopped or being traced.
    • Z - Zombie or “hung” process.
  9. START: The date or time at which the process started.
  10. TIME: Cumulative CPU time used by the process and the child processes started by the process.
  11. COMMAND: Command used to start the process.

By default, the result will be in unsorted form. If we want to sort by particular column, we can add –sort option into ps command.

输出更多列

[root@centos77 ]# ps
   PID TTY          TIME CMD
  3424 pts/0    00:00:00 bash
  3442 pts/0    00:00:00 bash
  7617 pts/0    00:00:00 ps
  
[root@centos77 ]# ps -e | head
   PID TTY          TIME CMD
     1 ?        00:00:02 systemd
     2 ?        00:00:00 kthreadd
     4 ?        00:00:00 kworker/0:0H
     6 ?        00:00:00 ksoftirqd/0
     7 ?        00:00:00 migration/0

[root@centos77 ]# ps -e -L | head
   PID    LWP TTY          TIME CMD
     1      1 ?        00:00:02 systemd
     2      2 ?        00:00:00 kthreadd
    11     11 ?        00:00:00 watchdog/0

[root@centos77 ]# ps -e -f -L | head
# + UID  PPID   NLWP  STIME 
UID         PID   PPID    LWP  C NLWP STIME TTY          TIME CMD
root          1      0      1  0    1 09:53 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0      2  0    1 09:53 ?        00:00:00 [kthreadd]
root          4      2      4  0    1 09:53 ?        00:00:00 [kworker/0:0H]
root         11      2     11  0    1 09:53 ?        00:00:00 [watchdog/0]

[root@centos77 ]# ps -e -F -L | head
# + SZ   RSS PSR
UID         PID   PPID    LWP  C NLWP    SZ   RSS PSR STIME TTY          TIME CMD
root          1      0      1  0    1 47656  3904   0 09:53 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0      2  0    1     0     0   3 09:53 ?        00:00:00 [kthreadd]
root         11      2     11  0    1     0     0   0 09:53 ?        00:00:00 [watchdog/0]

自带过滤

STAT 状态过虑参数

ps -ef r 只显示 R+运行中的进程,r = running
ps -N -N 输出不带-N时未输出的部分。示例ps -ef = ps -N

进程还是线程

  • 进程优点:编程、调试简单,可靠性较高。
  • 进程缺点:创建、销毁、切换速度慢,内存、资源占用大。
  • 线程优点:创建、销毁、切换速度快,内存、资源占用小。
  • 线程缺点:编程、调试复杂,可靠性较差。

上面的对比可以归结为一句话:“线程快而进程可靠性高”。线程有个别名叫“轻量级进程”,在有的书籍资料上介绍线程可以十倍、百倍的效率快于进程; 而进程之间不共享数据,没有锁问题,结构简单,一个进程崩溃不像线程那样影响全局,因此比较可靠。我相信这个观点可以被大部分人所接受,因为和我们所接受的知识概念是相符的。

THREAD DISPLAY    #显示线程
       H      Show threads as if they were processes.
       -L     Show threads, possibly with LWP and NLWP columns.
       m      Show threads after processes.
       -m     Show threads after processes.
       -T     Show threads, possibly with SPID column.

[root@centos77 ]# ps -C nginx -L  #从输出可以验证nginx是多进程而非多线程的。[一个进程仅一个线程]
   PID    LWP TTY          TIME CMD
  7964   7964 ?        00:00:00 nginx
  7965   7965 ?        00:00:00 nginx
  7966   7966 ?        00:00:00 nginx
  7967   7967 ?        00:00:00 nginx
  7968   7968 ?        00:00:00 nginx
[root@centos77 ]# ps -C nginx -m O lwp
   PID    LWP S TTY          TIME COMMAND
  7964      - - ?        00:00:00 nginx
     -   7964 S -        00:00:00 -
  7965      - - ?        00:00:00 nginx
     -   7965 S -        00:00:00 -
  7966      - - ?        00:00:00 nginx
     -   7966 S -        00:00:00 -
  7967      - - ?        00:00:00 nginx
     -   7967 S -        00:00:00 -
  7968      - - ?        00:00:00 nginx
     -   7968 S -        00:00:00 -
[root@VM_0_5_centos ~]# ps -C docker-proxy -m O lwp   #多线程
  PID   LWP S TTY          TIME COMMAND
 9056     - - ?        00:00:01 docker-proxy
    -  9056 S -        00:00:00 -
    -  9057 S -        00:00:01 -
    -  9058 S -        00:00:00 -
    -  9059 S -        00:00:00 -
    -  9060 S -        00:00:00 -

[root@VM_0_5_centos ~]# ps -C dockerd -m O lwp
  PID   LWP S TTY          TIME COMMAND
 3703     - - ?        00:08:23 dockerd
    -  3703 S -        00:00:00 -
    -  3707 S -        00:00:53 -
    -  3708 S -        00:00:00 -
    -  3709 S -        00:00:00 -

[root@centos77 ~]# ps -e s  | head
  UID   PID          PENDING          BLOCKED          IGNORED           CAUGHT STAT TTY        TIME COMMAND
    0     1 0000000000000000 7be3c0fe28014a03 0000000000001000 00000001800004ec Ss   ?          5:46 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    0     2 0000000000000000 0000000000000000 ffffffffffffffff 0000000000000000 S    ?          0:00 [kthreadd]
    0     4 0000000000000000 0000000000000000 ffffffffffffffff 0000000000000000 S<   ?          0:00 [kworker/0:0H]
    0     6 0000000000000000 0000000000000000 ffffffffffffffff 0000000000000000 S    ?          0:54 [ksoftirqd/0]
[root@centos77 ~]# ps -e u  | head
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 191144  2920 ?        Ss   Jan30   5:46 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S    Jan30   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<   Jan30   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    Jan30   0:54 [ksoftirqd/0]
[root@centos77 ~]# ps -e v  | head
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
    1 ?        Ss     5:46    366  1416 189727 2920  0.2 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    2 ?        S      0:00      0     0     0     0  0.0 [kthreadd]
    4 ?        S<     0:00      0     0     0     0  0.0 [kworker/0:0H]
    6 ?        S      0:54      0     0     0     0  0.0 [ksoftirqd/0]
[root@centos77 ~]# ps -e X  | head
  PID   STACKP      ESP      EIP TMOUT ALARM STAT TTY        TIME COMMAND
    1 b25c59a0 b25c4c00 3bcbfe63     -     - Ss   ?          5:46 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    2 00000000 00000000 00000000     -     - S    ?          0:00 [kthreadd]
    4 00000000 00000000 00000000     -     - S<   ?          0:00 [kworker/0:0H]
    6 00000000 00000000 00000000     -     - S    ?          0:54 [ksoftirqd/0]

无参数ps输出的来历

[root@centos ~]# tty
# man tty - print the file name of the terminal connected to standard input
/dev/pts/1
# 每用putty打开一个到服务器的连接,都将产生一个tty编号。
# echo hello > /dev/pts/2   #可以跨tty输送信息到指定tty,信息将仅输出在另一个tty上,当前tty不输出。
# echo hello > `tty`        #输出到当前tty

[root@centos ~]# ps --tty `tty`
  PID TTY          TIME CMD
21683 pts/1    00:00:00 bash
21704 pts/1    00:00:00 bash
25699 pts/1    00:00:00 ps

[root@centos ~]# ps --tty `tty` -N
  PID TTY          TIME CMD
    1 ?        00:05:53 systemd
    2 ?        00:00:00 kthreadd
    4 ?        00:00:00 kworker/0:0H
    6 ?        00:00:55 ksoftirqd/0
    7 ?        00:00:00 migration/0
...省略n多行
 1123 tty1     00:00:00 agetty   # vmware console 
 1124 ttyS0    00:00:00 agetty
 1142 ?        00:00:00 kworker/u2:2
 1226 ?        00:00:18 sgagent
 1239 ?        00:00:28 barad_agent

[root@centos ~]# ps
  PID TTY          TIME CMD
21683 pts/1    00:00:00 bash
21704 pts/1    00:00:00 bash
25720 pts/1    00:00:00 ps

Appendix

ps输出表头对照表

[root@centos77 ~]# ps L
%cpu         %CPU
%mem         %MEM
_left        LLLLLLLL
_left2       L2L2L2L2
_right       RRRRRRRR
_right2      R2R2R2R2
_unlimited   U
_unlimited2  U2
alarm        ALARM
args         COMMAND
atime        TIME
blocked      BLOCKED
bsdstart     START
bsdtime      TIME
c            C
caught       CAUGHT
cgroup       CGROUP
class        CLS
cls          CLS
cmd          CMD
comm         COMMAND
command      COMMAND
context      CONTEXT
cp           CP
cpuid        CPUID
cputime      TIME
drs          DRS
dsiz         DSIZ
egid         EGID
egroup       EGROUP
eip          EIP
esp          ESP
etime        ELAPSED
etimes       ELAPSED
euid         EUID
euser        EUSER
f            F
fgid         FGID
fgroup       FGROUP
flag         F
flags        F
fname        COMMAND
fsgid        FSGID
fsgroup      FSGROUP
fsuid        FSUID
fsuser       FSUSER
fuid         FUID
fuser        FUSER
gid          GID
group        GROUP
ignored      IGNORED
intpri       PRI
ipcns        IPCNS
label        LABEL
lastcpu      C
lim          LIM
longtname    TTY
lsession     SESSION
lstart       STARTED

[root@centos77 ~]# ps L    # 分栏 续

luid         LUID
lwp          LWP
m_drs        DRS
m_size       SIZE
m_trs        TRS
machine      MACHINE
maj_flt      MAJFL
majflt       MAJFLT
min_flt      MINFL
minflt       MINFLT
mntns        MNTNS
netns        NETNS
ni           NI
nice         NI
nlwp         NLWP
nwchan       WCHAN
opri         PRI
ouid         OWNER
pagein       PAGEIN
pcpu         %CPU
pending      PENDING
pgid         PGID
pgrp         PGRP
pid          PID
pidns        PIDNS
pmem         %MEM
policy       POL
ppid         PPID
pri          PRI
ppid         PPID
pri          PRI
pri_api      API
pri_bar      BAR
pri_baz      BAZ
pri_foo      FOO
priority     PRI
psr          PSR
rgid         RGID
rgroup       RGROUP
rss          RSS
# RSS - Resident Set Size 实际使用物理内存
rssize       RSS
rsz          RSZ
rtprio       RTPRIO
ruid         RUID
ruser        RUSER
s            S
sched        SCH
seat         SEAT
sess         SESS
session      SESS
sgi_p        P
sgi_rss      RSS
sgid         SGID
sgroup       SGROUP
sid          SID
sig          PENDING
sig_block    BLOCKED
sig_catch    CATCHED

[root@centos77 ~]# ps L    # 分栏 续

sig_ignore   IGNORED
sig_pend     SIGNAL
sigcatch     CAUGHT
sigignore    IGNORED
sigmask      BLOCKED
size         SIZE
slice        SLICE
spid         SPID
stackp       STACKP
start        STARTED
start_stack  STACKP
start_time   START
stat         STAT
state        S
stime        STIME
suid         SUID
supgid       SUPGID
supgrp       SUPGRP
suser        SUSER
svgid        SVGID
svgroup      SVGROUP
svuid        SVUID
svuser       SVUSER
sz           SZ
tgid         TGID
thcgr        THCGR
thcount      THCNT
tid          TID
time         TIME
tname        TTY
tpgid        TPGID
trs          TRS
trss         TRSS
tsig         PENDING
tsiz         TSIZ
tt           TT
tty          TT
tty4         TTY
tty8         TTY
ucmd         CMD
ucomm        COMMAND
uid          UID
uid_hack     UID
uname        USER
unit         UNIT
user         USER
userns       USERNS
util         C
utsns        UTSNS
uunit        UUNIT
vsize        VSZ
vsz          VSZ
wchan        WCHAN
wname        WCHAN
zone         ZONE
# 完。共170余

glances

# 
yum install glances 
Dependencies Resolved

=================================================================================================================
 Package                                        Arch              Version                  Repository       Size
=================================================================================================================
Installing:
 glances                                        noarch            2.5.1-1.el7              epel            440 k
Installing for dependencies:
 python-backports                               x86_64            1.0-8.el7                base            5.8 k
 python-backports-ssl_match_hostname            noarch            3.5.0.1-1.el7            base             13 k
 python-ipaddress                               noarch            1.0.16-2.el7             base             34 k
 python-setuptools                              noarch            0.9.8-7.el7              base            397 k
 python2-psutil                                 x86_64            5.6.7-1.el7              epel            399 k

Transaction Summary
=================================================================================================================
Install  1 Package (+5 Dependent packages)

Total download size: 1.3 M
Installed size: 6.0 M
Is this ok [y/d/N]:

glances interface

[root@centos76 ~]# glances
centos77 (CentOS Linux 7.7.1908 64bit / Linux 3.10.0-1062.el7.x86_64)                               Uptime: 15:16:23

CPU  [   0.9%]   CPU       0.9%  nice:     0.0%   MEM     26.8%  active:     476M   SWAP      0.0%   LOAD    4-core
MEM  [  26.8%]   user:     0.5%  irq:      0.0%   total:  1.93G  inactive:   480M   total:   2.00G   1 min:    0.05
SWAP [   0.0%]   system:   0.3%  iowait:   0.0%   used:    531M  buffers:   2.06M   used:        0   5 min:    0.03
                 idle:    99.2%  steal:    0.0%   free:   1.42G  cached:     852M   free:    2.00G   15 min:   0.05

NETWORK     Rx/s   Tx/s   TASKS 169 (190 thr), 1 run, 168 slp, 0 oth sorted automatically by cpu_percent, flat view
ens33       536b    2Kb
ens34         0b     0b     CPU%  MEM%  VIRT   RES   PID USER        NI S     TIME+ IOR/s IOW/s Command
lo          256b   256b      3.5   0.8  225M 15.9M  9096 root         0 R   0:00.40     0     0 /usr/bin/python /usr
                             0.0   0.0     0     0  1904 root         0 S   0:01.28     0     0 kworker/2:0
DISK I/O     R/s    W/s      0.0   0.1 43.5M 1.85M   582 root         0 S   0:02.39     0     0 /usr/lib/systemd/sys
dm-0           0     1K      0.0   0.0     0     0    29 root       -20 S   0:00.00     0     0 netns
dm-1           0      0      0.0   0.0     0     0    38 root       -20 S   0:00.00     0     0 edac-poller
dm-2           0      0      0.0   0.1 25.5M 1.75M   795 root         0 S   0:00.59     0     0 /usr/lib/systemd/sys
sda            0     1K      0.0   0.0     0     0    12 root         0 S   0:00.16     0     0 watchdog/1
sda1           0      0      0.0   0.0     0     0   471 root       -20 S   0:00.00     0     0 xfs-log/dm-0
sda2           0     1K      0.0   0.1  113M 2.08M  1271 root         0 S   0:02.71     0     0 -bash
sr0            0      0      0.0   0.1 81.6M 1.74M  7964 root         0 S   0:00.00     0     0 nginx: master proces
sr1            0      0      0.0   0.0     0     0   468 root       -20 S   0:00.00     0     0 xfs-conv/dm-0
                             0.0   0.0     0     0   739 root       -20 S   0:00.00     0     0 xfs-cil/dm-2
FILE SYS    Used  Total      0.0   0.0     0     0   473 root         0 S   0:10.65     0     0 xfsaild/dm-0
/          9.27G  50.0G      0.0   0.4  317M 7.61M  1549 nginx        0 S   0:00.10     0     0 php-fpm: pool pod
/boot       136M  1014M      0.0   0.0     0     0   349 root       -20 S   0:00.00     0     0 scsi_tmf_2
/home      32.4M   971G      0.0   0.1 87.8M 2.20M  1701 root         0 S   0:00.42     0     0 /usr/libexec/postfix
                             0.0   0.0     0     0    18 root         0 S   0:00.30     0     0 migration/2
                             0.0   0.1 70.3M 2.83M  8917 root         0 S   0:00.10     0     0 /usr/libexec/openssh
                             0.0   0.0     0     0    47 root        19 S   0:00.52     0     0 khugepaged
                             0.0   0.2  186M 3.81M     1 root         0 S   0:23.10     0     0 /usr/lib/systemd/sys
                             0.0   0.3  157M 6.17M  8873 root         0 S   0:00.40     0     0 sshd: root@notty
                             0.0   0.7  321M 13.8M  3652 nginx        0 S   0:02.60     0     0 php-fpm: pool www
                             0.0   0.0     0     0    21 root       -20 S   0:00.00     0     0 kworker/2:0H
                             0.0   0.0  118M  732K  9002 root         0 S   0:00.00     0     0 /usr/sbin/anacron -s
                             0.0   0.2 82.2M 3.27M  7967 nginx        0 S   0:00.11     0     0 nginx: worker proces
                             0.0   0.0     0     0   741 root       -20 S   0:00.00     0     0 xfs-log/dm-2
                             0.0   0.7  321M 13.9M  1553 nginx        0 S   0:03.62     0     0 php-fpm: pool www
                             0.0   0.0     0     0   706 root       -20 S   0:00.00     0     0 xfs-buf/sda1
                             0.0   0.8  323M 15.9M  1551 nginx        0 S   0:03.62     0     0 php-fpm: pool www
                             0.0   0.0     0     0  7200 root         0 S   0:00.65     0     0 kworker/3:2
                             0.0   0.1  113M 2.07M  8858 root         0 S   0:06.36     0     0 /bin/bash -i
                             0.0   0.8  323M 16.0M  3617 nginx        0 S   0:03.36     0     0 php-fpm: pool www
                             0.0   0.0     0     0    16 root       -20 S   0:00.00     0     0 kworker/1:0H
                             0.0   0.0     0     0    36 root       -20 S   0:00.00     0     0 kblockd
                             0.0   0.0     0     0     6 root         0 S   0:00.17     0     0 ksoftirqd/0
                             0.0   0.0     0     0    10 root       -20 S   0:00.00     0     0 lru-add-drain


2020-03-08 10:08:14       No warning or critical alert detected

htop

Dependencies Resolved

============================================================================================
 Package            Arch                 Version                   Repository          Size
============================================================================================
Installing:
 htop               x86_64               2.2.0-3.el7               epel               103 k

Transaction Summary
============================================================================================
Install  1 Package

Total download size: 103 k
Installed size: 218 k
Is this ok [y/d/N]:

htop interface

[root@centos76 ~]# htop

  1  [                                            0.0%]   Tasks: 64, 21 thr; 1 running
  2  [                                            0.0%]   Load average: 0.00 0.01 0.05
  3  [                                            0.0%]   Uptime: 15:11:54
  4  [                                            0.0%]
  Mem[|||||||||||||||||||||||||||||||       343M/1.93G]
  Swp[                                        0K/2.00G]

   PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
  9054 root       20   0  119M  2400  1464 R  0.0  0.1  0:00.01 htop
     1 root       20   0  186M  3904  2584 S  0.0  0.2  0:02.89 /usr/lib/systemd/systemd --switched-root --system --
   554 root       20   0 38812  5080  4760 S  0.0  0.3  0:02.74 /usr/lib/systemd/systemd-journald
   576 root       20   0  185M  1356   968 S  0.0  0.1  0:00.00 /usr/sbin/lvmetad -f
   582 root       20   0 44536  1892  1320 S  0.0  0.1  0:01.03 /usr/lib/systemd/systemd-udevd
   763 root       16  -4 55256   892   484 S  0.0  0.0  0:00.16 /sbin/auditd
   762 root       16  -4 55256   892   484 S  0.0  0.0  0:00.59 /sbin/auditd
   785 root       20   0 21412  1300   988 S  0.0  0.1  0:01.55 /usr/sbin/irqbalance --foreground
   788 dbus       20   0 57984  2520  1840 S  0.0  0.1  0:02.85 /usr/bin/dbus-daemon --system --address=systemd: --n
   811 polkitd    20   0  598M 13028  4944 S  0.0  0.6  0:00.00 /usr/lib/polkit-1/polkitd --no-debug
   813 polkitd    20   0  598M 13028  4944 S  0.0  0.6  0:00.74 /usr/lib/polkit-1/polkitd --no-debug
   794 polkitd    20   0  598M 13028  4944 S  0.0  0.6  0:01.37 /usr/lib/polkit-1/polkitd --no-debug
   795 root       20   0 26148  1796  1472 S  0.0  0.1  0:00.59 /usr/lib/systemd/systemd-logind
   799 root       20   0  120M  1524   916 S  0.0  0.1  0:00.05 /usr/sbin/crond -n
   804 chrony     20   0  115M  1844  1376 S  0.0  0.1  0:00.11 /usr/sbin/chronyd
   805 root       20   0 98952  2676  1996 S  0.0  0.1  0:00.02 login -- root
  1217 root       20   0  350M 29528  7044 S  0.0  1.5  0:00.00 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --
   819 root       20   0  350M 29528  7044 S  0.0  1.5  0:04.20 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --
   931 root       20   0  537M  8996  6788 S  0.0  0.4  0:00.64 /usr/sbin/NetworkManager --no-daemon
   919 root       20   0  537M  8996  6788 S  0.0  0.4  0:10.14 /usr/sbin/NetworkManager --no-daemon
  1122 root       20   0  264M  8248  5216 S  0.0  0.4  0:00.00 /usr/sbin/vmtoolsd
  1038 root       20   0  264M  8248  5216 S  0.0  0.4  0:32.13 /usr/sbin/vmtoolsd
  1094 root       20   0 66216 10776  7528 S  0.0  0.5  0:00.07 /usr/lib/vmware-vgauth/VGAuthService -s
  1271 root       20   0  112M  2128  1644 S  0.0  0.1  0:00.15 -bash
  1787 root       20   0  295M  6088  4992 S  0.0  0.3  0:03.21 /usr/sbin/rsyslogd -n
  1477 root       20   0  295M  6088  4992 S  0.0  0.3  0:03.78 /usr/sbin/rsyslogd -n
  1779 root       20   0  560M 17416  6116 S  0.0  0.9  0:00.00 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
  1780 root       20   0  560M 17416  6116 S  0.0  0.9  0:04.16 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
  1483 root       20   0  110M  4364  3332 S  0.0  0.2  0:00.01 /usr/sbin/sshd -D
F1 Help  F2 Setup F3 Search F4 Filter F5 Tree  F6 SortBy F7 Nice -F8 Nice +F9 Kill  F10 Quit

vmstat

#vmstat 帮助


[root@centos76 ~]# vmstat --help

Usage:
 vmstat [options] [delay [count]]

Options:
 -a, --active           active/inactive memory
 -f, --forks            number of forks since boot
 -m, --slabs            slabinfo
 -n, --one-header       do not redisplay header
 -s, --stats            event counter statistics
 -d, --disk             disk statistics
 -D, --disk-sum         summarize disk statistics
 -p, --partition <dev>  partition specific statistics
 -S, --unit <char>      define display unit
 -w, --wide             wide output
 -t, --timestamp        show timestamp

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see vmstat(8).

# vmstat -s 统计输出结果

[root@centos76 ~]# vmstat -s
      2027968 K total memory
       336568 K used memory
       473460 K active memory
       490952 K inactive memory
       817128 K free memory
         2108 K buffer memory
       872164 K swap cache
      2097148 K total swap
            0 K used swap
      2097148 K free swap
         4576 non-nice user cpu ticks
            6 nice user cpu ticks
         9572 system cpu ticks
     22016107 idle cpu ticks
          981 IO-wait cpu ticks
            0 IRQ cpu ticks
          552 softirq cpu ticks
            0 stolen cpu ticks
       691768 pages paged in
       320668 pages paged out
            0 pages swapped in
            0 pages swapped out
      3591361 interrupts
      5227789 CPU context switches
   1583578311 boot time
         9268 forks
[root@centos76 ~]#

free

[root@centos76 ~]# free --help

Usage:
 free [options]

Options:
 -b, --bytes         show output in bytes
 -k, --kilo          show output in kilobytes
 -m, --mega          show output in megabytes
 -g, --giga          show output in gigabytes
     --tera          show output in terabytes
     --peta          show output in petabytes
 -h, --human         show human-readable output
     --si            use powers of 1000 not 1024
 -l, --lohi          show detailed low and high memory statistics
 -t, --total         show total for RAM + swap
 -s N, --seconds N   repeat printing every N seconds
 -c N, --count N     repeat printing N times, then exit
 -w, --wide          wide output

     --help     display this help and exit
 -V, --version  output version information and exit

For more details see free(1).

[root@centos76 ~]# free -t -m -h -w
              total        used        free      shared     buffers       cache   available
Mem:           1.9G        340M        461M         25M        2.1M        1.1G        1.4G
Swap:          2.0G          0B        2.0G
Total:         3.9G        340M        2.5G
[root@centos76 ~]# free -hw
              total        used        free      shared     buffers       cache   available
Mem:           1.9G        344M        458M         25M        2.1M        1.1G        1.4G
Swap:          2.0G          0B        2.0G

使用free命令查看内存信息,最重要的是理解当前系统的可用内存并不是直接看 free 字段就可以看出来的,应该参考的是

可用内存 = free + buffers + cached

除去标题行之后,第一行为 物理内存使用统计

标题 说明
total 物理内存总量 total = used + free
used 已使用内存总量,包含应用使用量+buffer+cached
free 空闲内存总量
shared 共享内存总量
buffers 块设备所占用的缓存
cached 普通文件数据所占用的缓存
available 当前可用内存总量(可用于分配给应用的,不包含虚拟内存)

对于available字段,在内核3.14中,它会从/proc/meminfo中的MemAvailable读取,在内核2.6.27+的系统上采用模拟的方式获取,其它情况下直接与free的值相同。

第二行-/+ buffers/cache 中只有两列usedfree有值,它们是物理内存的调整值

标题 说明
used 已使用内存(used)减去buffer和cached之后的内存,也就是应用正在使用的内存总量
free 空闲内存加上buffer和cached之后的内存,也就是真正的可用内存总量

第三行为交换分区使用统计

标题 说明
total 交换分区内存总量
used 正在使用的交换分区内存
free 空闲交换分区内存

在上面这些指标中,我们需要注意的是在下面这些情况下,系统是正常的,不需要担心

  • 空闲内存free接近于0
  • 已使用内存used接近于total
  • 可用内存(free+buffers/cache)占total的 20% 以上
  • 交换分区内存 swap 没有发生改变

下面情况说明内存过低,需要注意!

  • 可用内存(free+buffers/cache)过低,接近于0的时候
  • 交换分区内存占用swap used增加或者有波动
  • dmesg | grep oom-killer显示有OutOfMemory-killer正在运行
linux_basic/linux_expert/release_busy.txt · 最后更改: 2020/09/25 21:49 (modify by Amos)