Linux 操作系统调优相关工具

系统调优概述和查看 CPU 负载相关工具

系统调优思路

1. 系统的运行状况: CPU -> MEM -> DISK-> NETWORK -> application
2. 分析是否有瓶颈(依据当前应用需求)
3. 调优(采取一定措施使变得优异)
这些子系统之间关系是相互彼此依赖的,任何一个高负载都会导致其他子系统出现问题.比如:
1. 大量的网页调入请求导致内存队列的拥塞;
2. 网卡的大吞吐量可能导致更多的 CPU 开销;
3. 大量的 CPU 开销又会尝试更多的内存使用请求;
4. 大量来自内存的磁盘写请求可能导致更多的 CPU 以及 IO 问题;

所以要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能是别的子系统导致的。调优就像医生看病,因此需要你对服务器所有地方都了解清楚。

查看 CPU 负载相关工具

1、使用 uptime 命令查看系统 cpu 负载

其内容如下:
12:38:33  当前时间
up 50days  系统运行时间 ,说明此服务器连续运行 50 天了
3 user  当前登录用户数
load average:
0.06, 0.60, 0.48
系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5分钟、15 分钟前到现在的平均值。

服务器 1: load average: 0.15, 0.08, 0.01 1 核
服务器 2: load average: 4.15, 6.08, 6.01 1 核
服务器 3: load average: 7.15, 7.08, 7.01 4 核
答案:服务器 2 负载过高。
经验:单核心,1 分钟的系统平均负载不要超过 3,就可以,4 核心不要超过 12,这是个经验值。所以如果服务器的 CPU 为 1 核心,则 load average 中的数字 >=3 负载过高,如果服务器的 CPU 为4 核心,则 load average 中的数字 >=12 负载过高。

实战:找出系统中使用 CPU 最多的进程

1、运行 top 命令,按下大写的 P,可以按 CPU 使用率来排序显示,按下c可以查看程序所在路径

2、 按照实际使用 CPU,从大到小排序显示所有进程列表

[root@centos60 ~]# ps -aux --sort -pcpu | more

-pcpu 可以显示出进程绝对的路径,方便找出木马程序运行的路径

3、查看 CPU 信息

cat /proc/cpuinfo

[root@centos60 ~]# grep -c 'processor' /proc/cpuinfo               cpu的核心数

[root@centos60 ~]# grep "physical id" /proc/cpuinfo | sort |uniq |wc -l     几个cpu

[root@centos60 ~]# grep "cpu cores" /proc/cpuinfo | uniq  cpu的核心数

扩展:top 中 VIRT、RES 和 SHR 的含意:
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等;
2、假如进程申请 70m 的内存,但实际只使用了 7m,那么它会增长 70m,而不是实际的使用量。
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括 swap out;
2、包含其他进程的共享;
3、如果申请 70m 的内存,实际使用 7m,它只增长 7m,与 VIRT 相反;
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。

SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存;
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小;
3、计算某个进程所占的物理内存大小公式:RES – SHR;
4、swap out 后,它将会降下来。

使用 mpstat 查看 CPU 运行情况

[root@centos60 ~]# yum -y install sysstat

[root@centos60 ~]# rpm -qf `which mpstat`      #查看安装 mpstat 命令的安装包

usr:用户空间 CPU 使用占比。
nice:低优先级进程使用 CPU 占比。nice 值大于 0。
sys:内核空间 CPU 使用占比。
iowait:CPU 等待 IO 占比。
irq:CPU 处理硬中断占比。
soft:CPU 处理软中断占比。
idle:CPU 空闲时间占比。
guest 与 steal 与虚拟机有关,暂不涉及。

[root@centos60 ~]# mpstat -P ALL      #查看所有 CPU 运行状态

[root@centos60 ~]# mpstat -P ALL 1 70      #一秒钟刷新一次 连续刷新 70 次

查看 Memory 运行状态相关工具

查看 Memory 运行状态相关工具

free 命令查看内存使用情况

[root@centos60 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7964        2585        4875          11         503        5098
Swap:          1906 

[root@centos60 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.8G        2.5G        4.8G         11M        503M        5.0G
Swap:          1.9G          0B        1.9G

在 centos7 系统中 available 这一列是真正可用内存。 available 包括了 buff/cache 中一些可以被释放的内存。当物理内存不够用的时候,内核会把非活跃的数据清空。

通过/proc 目录,查看非活跃的内存:

/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。可以使用的文件随系统配置的变化而变化。

[root@centos60 ~]# cat /proc/meminfo

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

实战:找出系统中使用内存最多的进程?

方法 1:运行 top,然后按下大写的 M 可以按内存使用率来排序显示,按e切换单位,分别是kb,mb,gb,tb,pb

方法 2:按照实际使用内存,从大到小排序显示所有进程列表

[root@centos60 ~]# ps auxx --sort -rss | more      # -rss 降序, 去掉- 则为 升序
[root@centos60 ~]# ps auxx --sort -rss > a.log

 

查看 IO 运行状态相关工具

查看文件系统块大小

对于 xfs 文件系统,查看文件系统块大小
[root@centos60 ~]# xfs_growfs -l /dev/sda1 | grep bsize
log size unchanged, skipping
data     =                       bsize=4096   blocks=243968, imaxpct=25
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
 

对于 ext4 文件系统,查看文件系统块大小
tune2fs -l /dev/sda1 | grep size
Block size: 724 # 为 1 个字节 。 一个扇区 512 字节。

实战-找出系统中对磁盘读写最多的进程
实战场景1:对于这个服务器,8块磁盘中,哪个硬盘最繁忙?哪个分区最繁忙?

1、通过iostat命令查看IO是否存在瓶颈
[root@centos60 ~]# rpm -ivh /mnt/Packages/sysstat-10.1.5-17.el7.x86_64.rpm

常用参数:
-d 仅显示磁盘统计信息。
-k 以K为单位显示每秒的磁盘请求数,默认单位块。
-p device | ALL 用于显示块设备及系统分区的统计信息。

[root@centos60 ~]# iostat -d -k -p /dev/sda
Linux 3.10.0-957.el7.x86_64 (centos60)     2020年11月06日     _x86_64_    (4 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.04        16.72         7.28     416100     181206
sda1              0.04         0.22         0.08       5554       2068
sda2              0.00         0.09         0.00       2212          0
sda3              0.99        16.33         7.20     406258     179138

[root@centos60 ~]# iostat -d -m -p /dev/sda
Linux 3.10.0-957.el7.x86_64 (centos60)     2020年11月06日     _x86_64_    (4 CPU)

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda               1.04         0.02         0.01        406        177
sda1              0.04         0.00         0.00          5          2
sda2              0.00         0.00         0.00          2          0
sda3              0.99         0.02         0.01        396        175

每列含意:
kB_read/s 每秒从磁盘读入的数据量,单位为K.
kB_wrtn/s 每秒向磁盘写入的数据量,单位为K.
kB_read 读入的数据总量,单位为K.
kB_wrtn 写入的数据总量,单位为K.

2、测试,给磁盘写入一些内容, 写入时尽可能不读磁盘?

[root@centos60 ~]# dd if=/dev/zero of=a.txt bs=7M count=700;sync
记录了700+0 的读入
记录了700+0 的写出
5138022400字节(5.1 GB)已复制,353.145 秒,14.5 MB/秒

读入的数据用/dev/zero,/dev/zero不会读磁盘的。

iostat -p sda -dk

实战场景2:公司的服务器很卡,查看CPU使用率不高,内存也够用,但就是卡,尤其是打开新程序或文件时,更卡。此时是哪出问题了?

这时系统的瓶颈在哪里? 在磁盘IO上。使用iotop命令,查看哪个进程使用磁盘读写最多。
[root@centos60 ~]# rpm -ivh /mnt/Packages/iotop-0.6-4.el7.noarch.rpm
[root@centos60 ~]# yum -y install iotop

iotop的参数:
-o, -only 只显示在读写硬盘的程序
-d SEC, -delay=SEC 设定显示时间间隔。 刷新时间
iotop 常用快捷键:
<- / ->:左右箭头:改变排序方式,默认是按 IO 排序。
r:改变排序顺序。
o:只显示有 IO 输出的进程。
p:进程/线程的显示方式的切换。
a:显示累积使用量。
q:退出,按 q 或 ctrl+C

[root@centos60 ~]# iotop -o -d 1

在另一个终端对磁盘进行大量读操作,执行:

查看 Network 运行状态相关工具

实战 1:找出系统中使用网络最多的进程

1、安装nload

[root@centos60 ~]# yum -y install epel-release nload

2、开始监控

[root@centos60 ~]# nload

然后另一个终端上运行ab,开始测试:

[root@centos60 ~]# yum -y install httpd

[root@centos60 ~]# ab -n 700 -c 2 http://www.baidu.com/index.html

 

实战2: 使用nethogs找出使用带宽最多的进程

实战情景:突然今天11:00左右,运维人员接到IDC机房电话,说你的网站流量对外输出很多,这样应该怎么办?

1、上传到nethogs到linux上:

[root@centos60 ~]# wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/nethogs-0.8.5-1.el7.x86_64.rpm

[root@centos60 ~]# yum -ivh nethogs-0.8.5-1.el7.x86_64.rpm

[root@centos60 ~]# yum install -y nethogs

[root@centos60 ~]# nethogs

2、在另一个终端生成一些数据:

[root@centos60 ~]# wget http://issuecdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_5.5.3.exe
[root@centos60 ~]# ab -n 700 -c 2 http://www.baidu.com/index.html

查看结果,找出wget是使用流量最多的进程

查看系统整体运行状态

使用 vmstat 查看内存及系统整体运行状态

使用 vmstat 可以看到整个机器的 CPU,内存,IO 的使用情况,而不是单单看到各个进程的 CPU 使用率和内存使用率。 比 top 命令节省资源。

当机器运行比较慢时,建议大家使用 vmstat 查看运行状态,不需要使用 top,因 top 使用资源比较多。

[root@centos60 ~]# vmstat 1 5                 #刷新5次,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 7891532   2076 129384    0    0   552    29  556  860  5 14 73  9  0
 0  0      0 7891632   2076 129384    0    0     0     0  106  157  0  0 100  0  0
 0  0      0 7891632   2076 129384    0    0     0     0  101  155  0  0 100  0  0
 0  0      0 7891632   2076 129384    0    0     0     0  117  152  0  0 100  0  0
 0  0      0 7891632   2076 129384    0    0     0    28   97  153  0  0 100  0  0

r 运行状态的进程个数 。展示了正在执行和等待 cpu 资源的任务个数。当这个值超过了 cpu 个数,就会出现 cpu 瓶颈。
b 不可中断睡眠 正在进行 i/o 等待--阻塞状态的进程个数 进程读取外设上的数据,等待时
free 剩余内存,单位是 KB
buffers #内存从磁盘读出的内容
cached #内存需要写入磁盘的内容
si swapin swap 换入到内存
so swapout 内存换出到 swap 换出的越多,内存越不够用
bi blockin 从硬盘往内存读。 单位是块。 把磁盘中的数据读入内存
bo blockout 从内存拿出到硬盘 (周期性的有值) 写到硬盘
#判断是读多还是写多,是否有 i/o 瓶颈
in 系统的中断次数,cpu 调度的次数多
cs 每秒的上下文切换速度
CPU 上下文切换--程序在运行的时候,CPU 对每个程序切换的过程。
更多内存参以一下表格: vmstat 每个字段含义说明

us用户态使用cpu占比
sy内核态使用cpu占比
id为cpu空闲占比
wa为cpu的io等待时间占比
st跟虚拟内存有关

使用 sar 命令记录系统一段时间的运行状态

[root@centos60 ~]# yum -y install sysstat

[root@centos60 ~]# sar -u 2 5 -o cpu.sar

-u 看cpu利用率

2 秒采集一次

共采集5次

-o输出到外部文件  cpu.sar

查看二进制文件 cpu.sar 中的内容

[root@centos60 ~]# sar -u -f cpu.sar  #查看文件结果

在所有的显示中,我们应主要注意%wio 和%idle,%wio 的值过高,表示硬盘存在 I/O 瓶颈,%idle值高,表示 CPU 较空闲,如果%idle 值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量。%idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。

idle 空闲占比越高越好,如果idle空闲高,机器还是很慢,就要看看内存或其他

如果idle空闲很低,那就要查看下是什么影响cpu

查看 sar 的计划任务并读取日志

[root@centos60 ~]# vim /etc/cron.d/sysstat

读取日志

[root@centos60 ~]# ls /var/log/sa
sa06  sa07

看cpu信息
[root@centos60 ~]# sar -u -f /var/log/sa/sa06       

看网卡信息
[root@centos60 ~]# sar -n DEV -f /var/log/sa/sa07

看内存信息
[root@centos60 ~]# sar -r -f /var/log/sa/sa07

看磁盘吞吐量
[root@centos60 ~]# sar -d -f /var/log/sa/sa07

sar 最大特点是可以监控所有状态,sar 的其他使用方法如下:
sar -r 1 #查看内存
sar -n ALL #查看所有
sar -b 1 10  #缓冲区使用情况,每秒刷新一次,查看 10 次
sar -I ALL 1 10
sar -r -f /tmp/file -n -r -b -m
sar -s 15:00:00 -e 15:30:00 #查看某个时间段,系统运行情况
sar -s 15:00:00 -e 15:30:20 -f /var/log/sa/sa01
sar -r -s 15:00:00 -e 15:30:20 -f /var/log/sa/sa01

 

sar 命令行的常用格式: sar [options] [-A] [-o file] t [n]
在命令行中,n 和 t 两个参数组合起来定义采样间隔和次数,t 为采样间隔,是必须有的参数,n 为采样次数,是可选的,默认值是 1,-o file 表示将命令结果以二进制格式存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar 命令的选项很多

下面只列出常用选项:
-A:所有报告的总和。
-n:网络接口的情况。
-u:CPU 利用率
-v:进程、I 节点、文件和锁表状态。
-d:硬盘使用报告。
-r:没有使用的内存页面和硬盘块。
-g:串口 I/O 的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。
-o 文件名:打印到屏幕并将采样结果以二进制形式存入当前目录下的文件中。
-f 文件名:查看之前保存的二进制文件。
-d:显示磁盘。
-d 1 100 #必须得指定次数。
-c:每秒创建进程的个数。
-i 1 10 #指定时间间隔。
-P:查看 cpu。
-r:查看内存。
-w:每秒上下文切换次数。
-o /cpu.sar #保存并显示。
-f cpu.sar #读取。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值