Linux常用的性能分析

参考文档:https://www.runoob.com/w3cnote/linux-common-command-2.html

一、ps -aux

ps -aux
ps -ef
-a:所有进程。
-u:显示用户。
-x:列出所有tty进程,tty是当前所使用虚拟终端。
-e:所有进程,与a略有区别,这里不做具体区分。
-f:完整显示进程信息。
ctrl + d 进程结束
[root@iZbp1d6ukr7d6j6eosyixaZ LianXi]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  43528  3340 ?        Ss   Oct26   1:00 /usr/lib/syste
root         2  0.0  0.0      0     0 ?        S    Oct26   0:01 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Oct26   1:17 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Oct26   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S    Oct26   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    Oct26   0:00 [rcu_bh]
root         9  0.1  0.0      0     0 ?        S    Oct26  27:08 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<   Oct26   0:00 [lru-add-drain
root       298  0.0  0.0      0     0 ?        S    Oct26   1:00 [jbd2/vda1-8]
root       299  0.0  0.0      0     0 ?        S<   Oct26   0:00 [ext4-rsv-conv
root       367  0.0  1.5  88260 28396 ?        Ss   Oct26   0:23 /usr/lib/syste
root       393  0.0  0.1  44616  1864 ?        Ss   Oct26   0:00 /usr/lib/syste
root       462  0.0  0.0  55524  1088 ?        S<sl Oct26   0:10 /sbin/auditd
root       512  0.0  0.0      0     0 ?        S<   Oct26   0:00 [nfit]
polkitd    534  0.0  0.5 716588 10164 ?        Ssl  Oct26   0:14 /usr/lib/polki
dbus       536  0.0  0.1  58132  2172 ?        Ss   Oct26   0:43 /usr/bin/dbus-
root       552  0.0  0.0  26376  1656 ?        Ss   Oct26   0:25 /usr/lib/syste
root       564  0.0  0.0  25904   932 ?        Ss   Oct26   0:00 /usr/sbin/atd 
chrony     575  0.0  0.1 117784  1812 ?        S    Oct26   0:06 /usr/sbin/chro
root       576  0.0  0.0 126284  1580 ?        Ss   Oct26   0:13 /usr/sbin/cron
root       584  0.0  0.0 110104   800 ttyS0    Ss+  Oct26   0:00 /sbin/agetty -
root       585  0.0  0.0 110104   812 tty1     Ss+  Oct26   0:00 /sbin/agetty -
.......

字段说明

USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
  D 不可中断 uninterruptible sleep (usually IO)
  R 运行 runnable (on run queue)
  S 中断 sleeping
  T 停止 traced or stopped
  Z 僵死 a defunct (”zombie”) process
START: 行程开始时间 TIME: 执行的时间 COMMAND:所执行的指令

 

二、监控当前系统状态vmstat

说明:vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

[root@iZbp1d6ukr7d6j6eosyixaZ etc]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  78880 172316 749264    0    0     3     7    8   24  1  1 98  0  0
[root@iZbp1d6ukr7d6j6eosyixaZ etc]# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  79028 172316 749264    0    0     3     7    8   24  1  1 98  0  0
[root@iZbp1d6ukr7d6j6eosyixaZ etc]# vmstat 2 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  78748 172316 749264    0    0     3     7    8   24  1  1 98  0  0
 0  0      0  78756 172316 749264    0    0     0     0  852 1553  1  1 98  0  0
 0  0      0  78756 172316 749264    0    0     0     0  845 1561  1  1 98  0  0
 0  0      0  78756 172316 749264    0    0     0     8  827 1526  1  1 99  0  0
 0  0      0  78756 172316 749264    0    0     0     0  878 1594  1  1 98  0  0
 0  0      0  78756 172316 749264    0    0     0     8  876 1573  2  1 97  0  0
 0  0      0  78756 172316 749264    0    0     0    12  847 1462  2  1 97  0  0
^C

三、uptime

同top查看的第一行 
[root@iZbp1d6ukr7d6j6eosyixaZ LianXi]# uptime
 14:37:54 up 14 days,  3:51,  1 user,  load average: 0.07, 0.07, 0.05

 

四、top

常用参数

-c 显示完整的进程命令
-s 保密模式
-p <进程号> 指定进程显示
-n <次数>循环显示次数

实例

top - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35
Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  32949016k total, 14411180k used, 18537836k free,   169884k buffers
Swap: 32764556k total,        0k used, 32764556k free,  3612636k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
28894 root      22   0 1501m 405m  10m S 52.2  1.3   2534:16 java  

前五行是当前系统情况整体的统计信息区。

第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:

14:06:23 — 当前系统时间

up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)

2 users — 当前有2个用户登录系统

load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行,Tasks — 任务(进程),具体信息说明如下:

系统现在共有206个进程,其中处于运行中的有1个,205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行,cpu状态信息,具体属性说明如下:

5.9%us — 用户空间占用CPU的百分比。
3.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
90.4% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.2% si — 软中断(Software Interrupts)占用CPU的百分比

备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!

第四行,内存状态,具体信息如下:

32949016k total — 物理内存总量(32GB)
14411180k used — 使用中的内存总量(14GB)
18537836k free — 空闲内存总量(18GB)
169884k buffers — 缓存的内存量 (169M)

第五行,swap交换分区信息,具体信息说明如下:

32764556k total — 交换区总量(32GB)
0k used — 使用的交换区总量(0K)
32764556k free — 空闲交换区总量(32GB)
3612636k cached — 缓冲的交换区总量(3.6GB)

第六行,空行。

第七行以下:各进程(任务)的状态监控,项目列信息说明如下:

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

top 交互命令

h 显示top交互命令帮助信息
c 切换显示命令名称和完整命令行
m 以内存使用率排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中
o或者O 改变显示项目的顺序

五、free   (cat /proc/meminfo)内存使用情况

常用参数

-b 以Byte显示内存使用情况
-k 以kb为单位显示内存使用情况
-m 以mb为单位显示内存使用情况
-g 以gb为单位显示内存使用情况
-s<间隔秒数> 持续显示内存
-t 显示内存使用总合

free -h

1、执行命令free输出如下

 

Mem:是内存的使用情况。
total:总内存大小。
used:已经使用的内存大小(这里面包含cached和buffers和shared部分)。
free:空闲的内存大小。
shared:进程间共享内存(一般不会用,可以忽略)。
buff:内存中写完的东西缓存起来,这样快速响应请求,后面数据再定期刷到磁盘上。
cached:内存中读完缓存起来内容占的大小(这部分是为了下次查询时快速返回)。
available:显示还可以被应用程序使用的物理内存大小。(total = used + free + available)
Swap:硬盘上交换分区的使用大小。
Swap的设计目的是为了内存上的空间用完以后,可以将内存中的空间交换到磁盘上,空出内存来使用。

状态: 当used大、free低、buff/cache低说明内存不足。当used低、free低、buff/cache高,是正常状态,只是缓存没有被使用或者销毁。

调用的顺序:free > buff/cache > Swap

2.linux下内存、Swap、Cache、Buff关系

 

Cache(缓存)为了调高CPU和内存之间数据交换而设计。Buffer(缓冲)为了提高内存和硬盘(或其他I/O设备的数据交换而设计)。
Cache主要是针对读操作设计的,不过Cache概念可能容易混淆,我理解为CPU本身就有Cache,包括一级缓存、二级缓存、三级缓存,我们知道CPU所有的指令操作对接的都是内存,而CPU的处理能力远高于内存速度,所以为了不让CPU资源闲置,Intel等公司在CPU内部集成了一些Cache,但毕竟不能放太多电路在里面,所以这部分Cache并不是很大,主要是用来存放一些常用的指令和常用数据,真正大部分Cache的数据应该是占用内存的空间来缓存请求过的数据。
Buffer主要是针对写操作设计的,更细的说是针对内存和硬盘之间的写操作来设计的,目的是将写的操作集中起来进行,减少磁盘碎片和硬盘反复寻址过程,提高性能。在Linux系统内部有一个守护进程会定期清空Buffer中的内容,将其写入硬盘内,当手动执行sync命令时也会触发上述操作。

 

cat /proc/meminfo

[root@iZbp1d6ukr7d6j6eosyixaZ LianXi]# cat -n /proc/meminfo
     1 MemTotal:        1776404 kB
     2 MemFree:          102328 kB
     3 MemAvailable:     801316 kB
     4 Buffers:          159744 kB
     5 Cached:           628844 kB
     6 SwapCached:            0 kB
     7 Active:          1286680 kB
     8 Inactive:         222788 kB
     9 Active(anon):     721356 kB
    10 Inactive(anon):      300 kB
    11 Active(file):     565324 kB
    12 Inactive(file):   222488 kB

六、常用查询 

df 命令

显示磁盘空间使用情况。获取硬盘被占用了多少空间,目前还剩下多少空间等信息,如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB 为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示

-a 全部文件系统列表
-h 以方便阅读的方式显示信息
-i 显示inode信息
-k 区块为1024字节
-l 只显示本地磁盘
-T 列出文件系统类型

实例:

(1)显示磁盘使用情况

df -l

(2)以易读方式列出所有文件系统及其类型

df -haT

du 命令

du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看:

命令格式:

du [选项] [文件]

常用参数:

-a 显示目录中所有文件大小
-k 以KB为单位显示文件大小
-m 以MB为单位显示文件大小
-g 以GB为单位显示文件大小
-h 以易读方式显示文件大小
-s 仅显示总计
-c或--total  除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
实例:

(1)以易读方式显示文件夹内及子文件夹大小
  du -h Lianxi/2)以易读方式显示文件夹内所有文件大小
  du -ah LianXi/3)显示几个文件或目录各自占用磁盘空间的大小,还统计它们的总和
  du -hc test/ Lianxi/4)输出当前目录下各个子目录所使用的空间
  du -hc --max-depth=1 LianXi/

date 命令

命令参数

-d<字符串>  显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s<字符串>  根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u  显示GMT。
%H 小时(00-23)
%I 小时(00-12)
%M 分钟(以00-59来表示)
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)
%a 星期的缩写。
%A 星期的完整名称。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%m 月份(以01-12来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。

案例

[root@iZbp1d6ukr7d6j6eosyixaZ LianXi]# date +%Y%m%d --date="+1 day"//显示下一天的日期
20211110

-d参数使用

wc 命令

 今年的 1122 日是星期三
date -d '2 weeks' 2周后的日期
date -d 'next monday' (下周一的日期)
date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
date -d last-month +%Y%m(上个月是几月)
date -d next-month +%Y%m(下个月是几月)

 

wc 命令

wc(word count)功能为统计指定的文件中字节数、字数、行数,并将统计结果输出

命令格式:

wc [option] file..

命令参数:

-c 统计字节数
-l 统计行数
-m 统计字符数
-w 统计词数,一个字被定义为由空白、跳格或换行字符分隔的字符串

实例:

(1)查找文件的 行数 单词数 字节数 文件名 

wc text.txt
[root@iZbp1d6ukr7d6j6eosyixaZ LianXi]# wc text.txt
  8  20 117 text.txt

(2)统计输出结果的行数

cat test.txt | wc -l

 

posted @ 2021-11-09 12:41  Delta.Farce  阅读(141)  评论(0编辑  收藏  举报