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