云计算实战系列十二(Linux系统优化)

Linux高级系统优化

uptime 命令

[root@newrain ~]# uptime 
 14:01:51 up 1 day, 20:11,  3 users,  load average: 0.13, 0.07, 0.05
当前服务器时间\服务器启动时间\  用户数    \平均负载:分别对应1分钟,5分钟,15分钟
参数 :
-p  服务器运行时长
-s  服务器启动时间

[root@newrain ~]# cat /proc/loadavg 
0.11 0.07 0.05 1/285 535
最直接查看系统平均负载的命令,前面依旧是平均负载,第四个字段分子为当前运行进程数,分母为系统总进程数,最后一个字段为当前正在运行的进程ID
loadavg: 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中
一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重.当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢.

top 命令

[root@newrain ~]# top
top - 14:17:18 up 1 day, 20:26,  3 users,  load average: 0.08, 0.06, 0.05
       启动时间     运行时间        用户数            平均负载
Tasks: 270 total,   1 running, 269 sleeping,   0 stopped,   0 zombie
任务(进程)  总数        运行中        休眠中         停止进程      僵尸进程       
%Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32932524 total, 31753392 free,   323628 used,   855504 buff/cache
KiB Swap:  8388604 total,  8388604 free,        0 used. 32209072 avail Mem 
=====================================================================================
Cpu(s):  
  0.0% us:  用户空间占用CPU百分比
  0.3% sy:  内核(系统)空间占用CPU百分比
  0.0% ni:   用户进程空间内改变过优先级的进程占用CPU百分比
  99.7% id: 空闲CPU百分比
  0.0% wa:    等待输入输出的CPU时间百分比
  0.0%hi:  硬件CPU中断占用百分比
  0.0%si:  软中断占用百分比
  0.0%st:  虚拟机(虚拟化技术)占用百分比
KiB Mem : 32932524 total 物理内存总和,31753392 free 剩余物理内存,323628 used 已使用内存,855504 buff/cache 用作内核缓存总量  
=====================================================================================
序号  列名    含义
a  PID    进程id
b  PPID      父进程id
c   RUSER    Real user name
d  UID       进程所有者的用户id
e  USER      进程所有者的用户名
f  GROUP     进程所有者的组名
g  TTY       启动进程的终端名。不是从终端启动的进程则显示为 ?
h  PR        优先级
i  NI        nice值。负值表示高优先级,正值表示低优先级
j  P         最后使用的CPU,仅在多CPU环境下有意义
k  %CPU      上次更新到现在的CPU时间占用百分比
l  TIME      进程使用的CPU时间总计,单位秒
m  TIME+     进程使用的CPU时间总计,单位1/100秒
n  %MEM      进程使用的物理内存百分比
o  VIRT      进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p  SWAP      进程使用的虚拟内存中,被换出的大小,单位kb。
q  RES       进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r  CODE      可执行代码占用的物理内存大小,单位kb
s  DATA      可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t  SHR       共享内存大小,单位kb
u  nFLT      页面错误次数
v  nDRT      最后一次写入到现在,被修改过的页面数。
w  S         进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
x  COMMAND   命令名/命令行
y  WCHAN     若该进程在睡眠,则显示睡眠中的系统函数名
z  Flags     任务标志,参考 sched.h
=====================================================================================
f :,进入后按a-z即可显示或隐藏
o:  可以改变列的显示顺序,进入后按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z  可以将相应的列向左移动。最后按回车键确定。
F或O: 进入后按a-z可以将进程按照相应的列进行排序,选定排序列按回车键退出之后还可以按R对当前选定列进行排序倒转。
k : 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽
i:  忽略闲置和僵死进程。这是一个开关式命令
q:  退出程序
S:  切换到累计模式。
s :  改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加
r:  重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
l:  切换显示平均负载和启动时间信息。即显示影藏第一行
m:  切换显示内存信息。即显示影藏内存行
t : 切换显示进程和CPU状态信息。即显示影藏CPU行
c:  切换显示命令名称和完整命令行。 显示完整的命令。 这个功能很有用。
M : 根据驻留内存大小进行排序。
P:  根据CPU使用百分比大小进行排序。
T:  根据时间/累计时间进行排序。
W:  将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法
=====================================================================================
参数:
d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p:通过指定监控进程ID来仅仅监控某个进程的状态。
n: 制定刷新几次后退出
 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND

sar 命令

[root@newrain ~]# sar
Linux 3.10.0-957.el7.x86_64 (newrain)   08/07/2019      _x86_64_        (24 CPU)

02:00:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
02:10:01 PM     all      0.10      0.00      0.17      0.01      0.00     99.72
02:20:01 PM     all      0.09      0.00      0.15      0.01      0.00     99.75
Average:        all      0.09      0.00      0.16      0.01      0.00     99.74

mpstat 命令

[root@newrain ~]# mpstat
Linux 3.10.0-957.el7.x86_64 (newrain)   08/07/2019      _x86_64_        (24 CPU)

03:15:10 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:15:10 PM  all    0.01    0.00    0.02    0.01    0.00    0.00    0.00    0.00    0.00   99.96

[root@newrain ~]# mpstat -P 23 5 2
Linux 3.10.0-957.el7.x86_64 (newrain)   08/07/2019      _x86_64_        (24 CPU)

03:17:25 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:17:30 PM   23    0.00    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.80
03:17:35 PM   23    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:      23    0.00    0.00    0.10    0.00    0.00    0.00    0.00    0.00    0.00   99.90

表示每5秒产生一个报告,总共产生2个。
-P {cpu l ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值

Iotop 命令

很多时候知道磁盘IO负载高,但并不知道是什么程序占用的,是PHP,还是MYSQL,还是其它的,这就不好查看了。
[root@newrain ~]# iotop
[root@newrain ~]# iotop –b –n 3 –d 5
--version #显示版本号
-h, --help #显示帮助信息
-o, --only #显示进程或者线程实际上正在做的I/O,而不是全部的,可以随时切换按o 
-b, --batch #运行在非交互式的模式
-n NUM, --iter=NUM #在非交互式模式下,设置显示的次数,
-d SEC, --delay=SEC #设置显示的间隔秒数,支持非整数值
-p PID, --pid=PID #只显示指定PID的信息
-u USER, --user=USER #显示指定的用户的进程的信息
-P, --processes #只显示进程,一般为显示所有的线程
-a, --accumulated #显示从iotop启动后每个线程完成了的IO总数
-k, --kilobytes #以千字节显示
-t, --time #在每一行前添加一个当前的时间

iostat 命令

[root@newrain ~]# iostat 1 1
Linux 3.10.0-957.el7.x86_64 (newrain)   08/07/2019      _x86_64_        (24 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.01    0.00    0.02    0.01    0.00   99.96
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.19         2.17         4.53     355977     744277
dm-0              0.19         2.08         4.51     341337     740141
dm-1              0.00         0.01         0.00       2328          0
dm-2              0.00         0.01         0.01       1541       2048
第一个1 是每1秒刷新一次,第二个1是共刷新1次
#备注:
如果%iowait的值过高,表示硬盘存在I/O瓶颈
如果%idle值高,表示CPU较空闲
如果%idle值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量。
如果%idle值持续低于10,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU。
#详解:
tps:该设备每秒的传输次数
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:  读取的总数据量;
kB_wrtn:写入的总数量数据量;

[root@newrain ~]# iostat -d -x -k 1 1
【-d 显示磁盘使用情况,-x 显示详细信息, -k指kb】
Linux 3.10.0-957.el7.x86_64 (newrain)   08/07/2019      _x86_64_        (24 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.01    0.07    0.12     0.00     0.00    69.07     0.02   84.58    3.83  130.56   3.68   0.07
dm-0              0.00     0.00    0.07    0.13     0.00     0.00    68.72     0.02   89.17    4.00  133.05   3.65   0.07
dm-1              0.00     0.00    0.00    0.00     0.00     0.00    52.91     0.00    6.41    6.41    0.00   5.55   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00    52.01     0.00    6.34    3.47   60.00   3.83   0.00

rrqm/s:  每秒进行 merge 的读操作数目.即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
%util: 一秒中有百分之多少的时间用于 I/O
如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷
idle小于70% IO压力就较大了,一般读取速度有较多的wait。

vmstat 命令

[root@newrain ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 32379216      0 244120    0    0     0     0    3    5  0  0 100  0  0
1.procs
r: 表示运行和等待CPU时间片的进程数(就是说多少个进程真的分配到CPU),这个值如果长期大于系统CPU个数,说明CPU 不足,需要增加CPU
b:表示在等待资源的进程数,比如正在等待I/O或者内存交换等。 
2、memory
swpd:表示切换到内存交换区的内存大小,即虚拟内存已使用的大小(单位KB),如果大于0,表示你的机器物理内存不足 了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free:表示当前空闲的物理内存
buff:表示baffers cached内存大小,也就是缓冲大小,一般对块设备的读写才需要缓冲
Cache:表示page cached的内存大小,也就是缓存大小,一般作为文件系统进行缓冲,频繁访问的文件都会被缓存,如果 cache值非常大说明缓存文件比较多,如果此时io中的bi比较小,说明文件系统效率比较好
3、swap
si:表示有磁盘调入内存,也就是内存进入内存交换区的内存大小;通俗的讲就是 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。 
so:表示由内存进入磁盘,也就是由内存交换区进入内存的内存大小。 
注意:一般情况下si、so的值都为0,如果si、so的值长期不为0,则说明系统内存不足,需要增加系统内存 
4、io
bi:表示由块设备读入数据的总量,即读磁盘,单位kb/s 
bo:表示写到块设备数据的总量,即写磁盘,单位kb/s 
注意:如果bi+bo的值过大,且wa值较大,则表示系统磁盘IO瓶颈

清除系统内的缓存

[root@newrain ~]# echo 3 > /proc/sys/vm/drop_caches

iftop 命令

[root@aliyun ~]# iftop -i eth1 指定网卡显示 第一行:带宽显示
中间部分:外部连接列表,即记录了哪些ip正在和本机的网络连接 
中间部分右边:实时参数分别是该访问ip连接到本机2秒,10秒和40秒的平均流量 
=>代表发送数据,<= 代表接收数据
底部三行:表示发送,接收和全部的流量 
底部三行第二列:为你运行iftop到目前流量 
底部三行第三列:为高峰值 
底部三行第四列:为平均值

htop 命令

htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。

与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。

与top相比,htop有以下优点:
- 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
- 在启动上,比top 更快。
- 杀进程时不需要输入进程号。
- htop 支持鼠标操作。

nload 命令

网速监控命令
上半部分是:Incoming也就是进入网卡的流量, 下半部分是:Outgoing,也就是从这块网卡出去的流量, 每部分都有:
当前流量(Curr)
平均流量(Avg)
最小流量(Min)
最大流量(Max)
总和流量(Ttl)

nethogs 命令

[root@newrain ~]# yum -y install nethogs 
实例1:设置5秒钟刷新一次,通过-d来指定刷新频率
# nethogs -d 5
实例2:监视eth0网络带宽 
# nethogs eth0 实例3:同时监视eth0和eth1接口
# nethogs eth0 eth1
交互命令: 以下是NetHogs的一些交互命令(键盘快捷键) 
m : 修改单位
r : 按流量排序
s : 按发送流量排序 
q : 退出命令提示符

dstat 命令

dstat命令是一个用来替换vmstat、iostat、netstat这些命令的工具,是一个全能系统信息统计工具
    dstat的定义为:多功能系统资源统计生成工具( versatile tool for generating system resource statistics)。在获取的信息上有点类似于top、free、iostat、vmstat等多个工具的合集。
    dstat命令有默认选项,执行dstat命令不加任何参数,它默认会收集-cpu-、-disk-、-net-、-paging-、- system-的数据,一秒钟收集一次。 默认输入 dstat 等于输入了dstat -cdngy 1或dstat -a 1。
常用选项:
直接跟数字,表示几秒收集一次数据,默认为一秒;dstat 5表示5秒更新一次
  -c,--cpu统计CPU状态,包括 user, system, idle(空闲等待时间百分比), wait(等待磁盘IO)等; 
  -d, --disk 统计磁盘读写状态
  -D total,sda 统计指定磁盘或汇总信息
  -l, --load 统计系统负载情况,包括1分钟、5分钟、15分钟平均值
  -m, --mem 统计系统物理内存使用情况,包括used, buffers, cache, free
  -s, --swap 统计swap已使用和剩余量
  -n, --net 统计网络使用情况,包括接收和发送数据
  -N eth1,total 统计eth1接口汇总流量
  -r, --io 统计I/O请求,包括读写请求
  -p, --proc 统计进程信息,包括runnable、uninterruptible、new
  -y, --sys 统计系统信息,包括中断、上下文切换
  -t 显示统计时时间,对分析历史数据非常有用
  --fs 统计文件打开数和inodes数

[root@newrain ~]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0 100   0   0   0|2345B 4989B|   0     0 |   0     0 |  78   119 
  0   0 100   0   0   0|   0     0 |2150B 3056B|   0     0 | 301   316 
  0   0  99   0   0   0|   0     0 |3568B 8342B|   0     0 | 796  1556 
  0   0 100   0   0   0|   0    19k|3596B 5224B|   0     0 | 274   303 
  0   0 100   0   0   0|   0     0 |1969B 2042B|   0     0 | 300   271 
  0   0  99   0   0   0|   0     0 |1120B 2656B|   0     0 | 666  1126 
  0   0 100   0   0   0|   0     0 |3526B 4206B|   0     0 | 319   338 
  0   0 100   0   0   0|   0     0 |1888B 2674B|   0     0 | 271   275 
  0   0  99   0   0   0|   0    17k|3988B 9800B|   0     0 | 936  1669 
  0   0 100   0   0   0|   0     0 |3578B 5042B|   0     0 | 296   302 ^C
检测界面各参数的含义:
• sys: 内核进程消耗的CPU时间百分比
sys 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。
• wai: IO等待消耗的CPU时间百分比
wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。 
• idl: CPU处在空闲状态时间百分比
找出占用资源最高的进程个用户
            --top-(io|bio|cpu|cputime|cputime-avg|mem) 通过这几个选项,可以看到具体是那个用户那个进程占 用了相关系统资源,对系统调优非常有效.
注意:bio是linux内核中通用块层的一个核心数据结构,它描述了块设备的I/O操作,联系了内存缓冲区与块设
备。
[root@newrain ~]# dstat --top-mem --top-io --top-cpu
--most-expensive- ----most-expensive---- -most-expensive-
  memory process |     i/o process      |  cpu process   
python2     16.0M|sshd: root@  22k 1091B|sshd: [email protected]
python2     16.0M|sshd: root@ 611k   37k|sshd: [email protected]
python2     16.0M|sshd: root@ 146k 4639B|                
python2     16.0M|sshd: root@ 623k   41k|top          0.1

你可能感兴趣的:(云计算实战系列十二(Linux系统优化))