Liunx系统调优相关工具

1.系统调优的概述

1.1系统调优

  1. 系统的运行状况:CPU->MEM->DISK->NETWORK->用用程序调优
  2. 分析是否存在瓶颈(依据当前需求)
  3. 调优(把错误的调正确,低效率的调高效率)

1.2性能调优

性能调优就是找到系统处理瓶颈以及去除这些的过程。
性能优化其实是对os各子系统达到一种平衡的定义,这些子系统包括:

  • CPU
  • MEM
  • IO
  • NETWORK
    这些子系统之间的关系是相互彼此依赖的,任何一个高负载都会导致其他子系统出现问题
    比如:
  1. 大量的网页调入请求导致内存队列的拥塞;
  2. 网卡的大量吞吐可能导致CPU开销;
  3. 大量的CPU开销又会尝试更多的内存使用请求;
  4. 大量来自内存的磁盘写请求可能导致更多的CPU以及IO问题;
    所以要对一个子系统进行优化,查找瓶颈来自于那个方向是关键,虽然看似是某一个子系统出现问题,器使有可能是别的子系统出现问题导致的。

调优就像医生看病,因此需要我们对服务器所有地方了解非常清楚。
当系统出现问题,运行卡,如何快速找出一下问题(进程):

  1. 找出系统中使用CPU最多的进程?
  2. 找出系统中使用内存最多的进程?
  3. 找出系统中对磁盘读写最多的进程?
  4. 找出系统中使用网路最多的进程?

查看CPU负载相关工具,找出系统中使用CPU最多的进程

1.查看CPU负载相关工具

示例1:找出系统中使用CPU最多的进程?
uptime 命令
$ uptime
 22:08:04 up 2 days,  2:59,  1 user,  load average: 0.00, 0.01, 0.05

# 22:08:04   当前时间
# up 2 当前系统运行时间,说明此服务器运行了2天
# 1 users 当前登录的用户数
# load average: 0.00,0.01,0.05 系统负载值,三个数值分别为:1、5、15分钟平均负载
例1:

找出当前系统中,CPU负载过高的服务器?

服务器1: load average: 0.00, 0.01, 0.05 1核
服务器2: load average: 4.00, 6.01, 6.05 1核
服务器3: load average: 10.00, 10.01, 10.05 4核

答案:服务器2

如果服务器的CPU为1核,则load average 中的数字 >= 3 负载过高,如果服务器CPU为4核,则load average 中的数字 >= 12 负载过高.

经验: 单核心,1分钟的系统平均负载不要超过3,就可以,这是个经验值。

系统负载,就是任务队列的平均长度。
任务队列的平均长度是什么?
就以大厅排队买票。

uptime命令获取的负载是从/proc/loadavg这个文件中获取的值

[root@c7-45 ~]# cat /proc/loadavg
0.00 0.01 0.05 1/234 32239
示例2.找出系统中使用CPU最多的进程
1.使用top命令
$ top  运行top命令,按大写的P:
top - 22:32:33 up 2 days,  3:23,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 135 total,   2 running, 133 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  6154100 total,  2546724 free,   551976 used,  3055400 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  5281276 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 28445 root      20   0       0      0      0 R   1.6  0.0   0:06.60 kworker/0:2
     1 root      20   0   43968   4324   2584 S   0.0  0.1   0:05.59 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.07 kthreadd
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.78 ksoftirqd/0
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.24 migration/0
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S   0.0  0.0   0:12.95 rcu_sched
2.使用ps命令
$ ps -aux --sort -pcpu | more    #使用空格翻页   使用-pcpu可以显示出进程的绝对路径,方便中出木马程序运行路径。
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       2098  0.4  0.7 598416 48176 ?        Ssl  Sep10  13:30 /usr/bin/containerd
root          1  0.0  0.0  43968  4324 ?        Ss   Sep10   0:05 /usr/lib/systemd/systemd --switched-root --system --deseria
lize 22
root          2  0.0  0.0      0     0 ?        S    Sep10   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   Sep10   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    Sep10   0:00 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    Sep10   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    Sep10   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    Sep10   0:12 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<   Sep10   0:00 [lru-add-drain]

查看ps帮助文档

$ man ps
   C     pcpu         cpu utilization  (utilization 翻译为利用率)

查看cpu信息

$ cat /proc/cpuinfo
model name      : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
cpu MHz         : 2304.001
physical id     : 0
cpu cores       : 2
3.top命令详解
3.1 系统运行时间和平均负载
top - 22:44:39 up 2 days,  3:35,  1 user,  load average: 0.00, 0.01, 0.05
#参考uptime的解释说明
3.2. 任务
Tasks: 135 total,   1 running, 134 sleeping,   0 stopped,   0 zombie

#Tasks是任务(进程),
#系统总共有105个任务,
#1个正在运行,
#134个休眠状态,
#0个停止,
#0个是僵尸状态。
3.3 Cpu状态
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

按下数字1,查看CPU核数,核数编号从0开始,所以根据下图可知,该系统cpu核数为2,

%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

# us: 运行(未调整优先级的)用户进程的cpu时间
# sy: 系统运行内核进程CPU时间
# ni: 运行已调整优先级的用户进程的CPU时间
# wa: 用于等待IO完成的CPU时间
# hi: 处理硬件中断的CPU时间
# si:处理关键中断的CPU时间
# st: 这个虚拟机被 hypervisor偷取的cpu时间
3.4内存使用的状况
KiB Mem :  6154100 total,  2544160 free,   552524 used,  3057416 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  5280728 avail Mem

Swap: 交换分区。就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。一般为内存的两倍大小(1.5到2倍)。

Mem:
6154100 total      : 物理内存的总量
2544160 free       :空闲内存的总量
552524 used        :使用中的内存总量
3057416 buff/cache : 缓存内存量
3.5各个进程(任务)的状态监控
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  2098 root      20   0  598416  48176  15148 S   0.3  0.8  13:39.29 containerd
     1 root      20   0   43968   4324   2584 S   0.0  0.1   0:05.61 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.07 kthreadd
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.79 ksoftirqd/0
 
# PID: 进程ID.进程的唯一标识符
# USER: 进程所有者的实际用户名
# PR: 进程调度优先级。这个字段的一些值是“rt”。这意味着这些进程运行在实时态。
# NI: 进程的优先级(nice值),值越小,优先级越高
# VIRT: 进程使用的虚拟内存,进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
# RES: 驻留内存大小。驻留内存是任务使用的非交换物理内存的大小。进程使用的,未被换出的物理内存大小,单位kb.RES=CODE+DATA
# SHR: 是进程使用的共享内存,单位Kb。
# S: 这个是进程的状态:
  R - 运行态
  S - 睡眠态
  T - 被跟踪或已停止
  Z - 僵尸态
  D - 不可中断的睡眠态
# %CPU : 自从上一次更新时到现在任务所使用的CPU时间的百分比
# %MEM : 进程使用可用物理内存百分比
# TIME+ : 任务启动后到现在所有使用的全CPU时间,精确到百分之秒
# COMMAND : 运行进程所使用的命令
3.6 CPU专用命令mpstat
1. 查看cpu运行情况
$ mpstat   
Linux 3.10.0-1062.el7.x86_64 (c7-45)    09/12/2020      _x86_64_        (2 CPU)

11:14:18 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:14:18 PM  all    0.03    0.00    0.11    0.00    0.00    0.00    0.00    0.00    0.00   99.86

# CPU : all 表示所有CPU处理情况,数字表述CPU核ID
# usr : 用户空间CPU使用占比
# nice: 优先级进程使用CPU的占比
# sys: 内核空间CPU使用占比
# iowait: CPU等待IO占比
# irq : CPU处理硬中断占比
# soft : CPU处理软中断占比
# steal和guest与虚拟机有关,暂不涉及
2. 查看所有cpu运行状态
$ mpstat -P ALL  
Linux 3.10.0-1062.el7.x86_64 (c7-45)    09/12/2020      _x86_64_        (2 CPU)

11:19:37 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:19:37 PM  all    0.03    0.00    0.11    0.00    0.00    0.00    0.00    0.00    0.00   99.86
11:19:37 PM    0    0.03    0.00    0.11    0.00    0.00    0.00    0.00    0.00    0.00   99.86
11:19:37 PM    1    0.03    0.00    0.11    0.00    0.00    0.00    0.00    0.00    0.00   99.86
3. 每一秒刷新一次,连续刷新3次
$ mpstat -P ALL 1 3
Linux 3.10.0-1062.el7.x86_64 (c7-45)    09/12/2020      _x86_64_        (2 CPU)

11:21:19 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:21:20 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:21:20 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:21:20 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

11:21:20 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:21:21 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:21:21 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:21:21 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

11:21:21 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:21:22 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:21:22 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:21:22 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:       0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:       1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

查看Memory负载相关工具,找出系统中使用内存最多的进程

1.使用 free 命令查看内存

$ free
              total        used        free      shared  buff/cache   available
Mem:        6154100      551816     2544788       22828     3057496     5281436
Swap:       2097148           0     2097148

$ free -h   #表示给数值单位展示
              total        used        free      shared  buff/cache   available
Mem:           5.9G        538M        2.4G         22M        2.9G        5.0G
Swap:          2.0G          0B        2.0G

total  容量总数
used  已使用的容量
free  空余容量
shared 共享容量
buffers  缓冲,通常缓冲元数据(读入缓冲)
cached  缓存,通常缓存数据(写入缓存)

ps: 针对与buff,cache,当物理内存不够用的时候,内核会把非活跃的数据清空

2.通过 /proc/meminfo 查看非活跃的数据内存

$ cat /proc/meminfo
MemTotal:        6154100 kB
MemFree:         2543908 kB
MemAvailable:    5280564 kB
Buffers:            2108 kB
Cached:          2827176 kB
SwapCached:            0 kB
Active:           945364 kB   #活跃内存,指的是进程一致读写的内存空间
Inactive:        2097444 kB   #非活跃内存
Active(anon):     199880 kB
Inactive(anon):    36504 kB
Active(file):     745484 kB
Inactive(file):  2060940 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:                24 kB
Writeback:             0 kB
AnonPages:        213424 kB
Mapped:           105004 kB
Shmem:             22860 kB
Slab:             386608 kB
SReclaimable:     228252 kB
SUnreclaim:       158356 kB
KernelStack:        5808 kB
PageTables:         7896 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     5174196 kB
Committed_AS:    1849360 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      191240 kB
VmallocChunk:   34359310332 kB
HardwareCorrupted:     0 kB
AnonHugePages:     94208 kB

ps:当内存不够用的时候,kernel(内核)总是把不活跃的内存交换到swap空间,如果inactive内存多时,加swap空间可以解决问题,而active多,则考虑加内存。

3. 找出系统中使用内存最多的进程?

3.1使用top
$ top  #运行top,然后按下大写M可以按照内存使用率来排序了
top - 23:40:05 up 2 days,  4:31,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 138 total,   1 running, 137 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  6154100 total,  2542788 free,   553732 used,  3057580 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  5279488 avail Mem
Change delay from 3.0 to
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  2862 root      20   0  609100 100000  30524 S   0.0  1.6   1:51.71 dockerd
  2098 root      20   0  598416  48176  15148 S   0.3  0.8  13:52.77 containerd
  1655 root      20   0  574200  17444   6116 S   0.0  0.3   0:16.41 tuned
  4379 102       20   0  244852  16088  14740 S   0.0  0.3   0:00.28 postgres
  3103 root      20   0  122756  15436   7336 S   0.0  0.3   0:15.47 registry
3.2 使用 ps
ps -aux --sort -rss | more
ps -aux --sort -rss | head -n 10
ps -aux --sort -rss > /root/a.log
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云原生解决方案

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值