• 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
  • 相关阅读:
    小程序的媒体组件
    微信小程序开发系列之Hello World
    centos 6 mysql 5.6 源码安装
    php 源码安装
    centos7 源码安装nginx
    CentOS 7.2部署MariaDB Galera Cluster(10.1.21-MariaDB) 3主集群环境
    MySQL读写分离
    MySQL主从复制(Master-Slave)实践
    lvs+keepalived+nginx负载均衡搭建
    Kubernetes在CentOS7下二进制文件方式安装、离线安装
  • 原文地址:https://www.cnblogs.com/070727sun/p/15528326.html
Copyright © 2020-2023  润新知