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   %idle0.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.00rrqm/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 st0  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: root@pt0.0
python2     16.0M|sshd: root@ 611k   37k|sshd: root@pt0.0
python2     16.0M|sshd: root@ 146k 4639B|
python2     16.0M|sshd: root@ 623k   41k|top          0.1

云计算实战系列十二(Linux系统优化)相关推荐

  1. xen是服务器虚拟化,xen虚拟化实战系列(十二)之xen虚拟机高可用之在线迁移

    xen虚拟化实战系列文章列表 xen虚拟化实战系列(十三)之xen虚拟机集中管理之convirt 1. 方案背景概述 本文是有对我们一个xen虚拟化生产环境将要改造的一个方案而来,在项目上线初期,没有 ...

  2. 云计算实战系列十四(MySQL基础)

    一.Mysql开篇 1.1.MySQL数据库介绍 什么是数据库DB? 数据库无处不在 DB的全称是database,即数据库的意思.数据库实际上就是一个文件集合,是一个存储数据的仓库,数据库是按照特定 ...

  3. 云计算实战系列十五(SQL I)

    一.MySQL数据库表操作 MySQL表的基本概念 在windows中有个程序叫做excel. 而Excel文件中存在了如sheet1.sheet2.sheet3的表, 所有的sheet都存储在这个E ...

  4. 云计算实战系列十六(SQL II)

    1.3 MySQL数据操作DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括使用INSERT实现数据 的插入.DELETE实现数据的删除以及UPDATE实现数据的更 ...

  5. 云计算实战系列一(走进linux)

    走进Linux世界 1.GNU/Linux 的历史 1.1 自由软件之父 Richard M. Stallman 1984 GNU Copyleft OpenSource Free GPL 既然是历史 ...

  6. 云计算实战系列十(文件查找及包管理)

    文件查找 知识点 grep: 文件内容过滤 find : 文件查找,针对文件名 xargs 文件打包及压缩 gzip bzip2 xz unzip(了解) 1.1 命令文件 # which ls // ...

  7. [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店...

    原文:[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店 一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Bytear ...

  8. 抖音短视频数据抓取实战系列(二)——Fiddler安装配置以及模拟器监测环境配置

    抖音短视频数据抓取实战系列(二)--Fiddler安装配置以及模拟器监测环境配置 项目目录 1.抖音短视频数据抓取实战系列(〇)--前言 2.抖音短视频数据抓取实战系列(一)--模拟器的选择与设置 3 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二) 转载于:https://github.com/Meowv/Blog 上一篇搭建了 Blazor 项目并 ...

最新文章

  1. android内存取证实现,[内存取证]Volatility基本用法
  2. bzoj 1189 紧急疏散 网络流
  3. ASP 三十二条精华代码
  4. React之函数中的this指向
  5. webpack代理解决跨域
  6. Windows Phone 8.1 开发实例 网络编程 天气预报
  7. 深入理解SpringBoot(4)——web开发
  8. 我摸鱼写的Java片段意外称霸Stack Overflow十年、征服6000多GitHub开源项目: 有bug!...
  9. jQuery Mobile中尾部栏footer的data-*选项
  10. 从矩阵与空间操作的关系理解CSS3的transform
  11. c语言lookup函数怎么用,lookup函数的使用方法,lookup函数怎么用?
  12. 《剑破武林》用户注册协议
  13. Python如何利用双色球每天薅个煎饼果子
  14. Git git update-index --assume-unchanged
  15. Redux的工作流程
  16. MyBatis学习笔记(六)——高级查询之一对多映射
  17. 【3d游戏模型】女骑士制作指南:硬表面和纹理
  18. [转]详细解释数据挖掘中的 10 大算法
  19. 华为“天才少年” DIY 生日礼物:四个月打造能缝葡萄的机械臂!
  20. 那个经常加班的人后来怎么样了?

热门文章

  1. 5G远程驾驶亮相进博会 网友:以后考个远程驾照?
  2. 百度搜索遭遇“假德邦” 宣判结果来了...
  3. 为什么MediaPlayer中onCompletion()每次播放音频时都触发?
  4. 《运营之光》-- 学习笔记(四)
  5. 斐波那契数列的非递归实现
  6. 华为p10plus能用鸿蒙吗,鸿蒙系统第四批什么时候 华为鸿蒙系统第四批 鸿蒙系统第四批升级机型介绍...
  7. php 打印多维数组中的值,从多维数组php中提取值
  8. opencv 识别机车
  9. base64 编码 在websocket协议中的应用
  10. 苹果手机怎么拍星空_手机怎么拍星空