Linux常用的性能分析
阅读原文时间:2023年07月12日阅读:3

参考文档: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 显示内存使用总合

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命令时也会触发上述操作。

[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

六、常用查询

显示磁盘空间使用情况。获取硬盘被占用了多少空间,目前还剩下多少空间等信息,如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 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 命令

今年的 11 月 22 日是星期三
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