对于经常VPS的同学来说,肯定需要掌握一些VPS命令,大叔这里整理了一些常用的Linux负载查看命令。
uname,lsb_release,uptime,w,free,top,vmstat,iostat,netstat,tcpdump,ps等
系统版本/内核版本
查看内核版本
uname -a
//显示结果如下
Linux fklds 4.18.5-1.el7.elrepo.x86_64 #1 SMP Fri Aug 24 11:35:05 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
或者
cat /proc/version
//结果
Linux version 4.18.5-1.el7.elrepo.x86_64 (mockbuild@Build64R7) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)) #1 SMP Fri Aug 24 11:35:05 EDT 2018
查看发行版本
lsb_release -a
//一般系统都有安装,如果没有的话需要先安装模块
yum install lsb -y
或
apt-get install lsb -y
//结果一般为
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.5.1804 (Core)
Release: 7.5.1804
Codename: Core
也可以使用 cat /etc/issue
cat /etc/redhat-release
//结果
CentOS Linux release 7.5.1804 (Core)
快速查看负载
w
w
//结果
16:34:21 up 7 days, 16 min, 1 user, load average: 0.00, 0.05, 0.08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
centos pts/0 218.51.232.170 15:23 1.00s 0.02s 0.00s sshd: centos [priv]
第一行结果内容分别表示:现在时间,开机到现在时间7 days, 16 min,当前在线用户,以及1,5,15分钟内的负载
第二行结果表示:当前用户,登录终端,登录IP ,登录时间,空闲时间,当前终端所执行的所有进程时间总和,当前进程占用时间,当前进程。
uptime
uptime
//结果16:39:56 up 7 days, 21 min, 1 user, load average: 0.00, 0.01, 0.05
即 w 命令的第一行
CPU/内存/IO/网络
free
显示内存的使用信息,默认是按kb显示,使用-m参数可以按M为单位显示
free -m
//结果
total used free shared buff/cache available
Mem: 479 254 71 1 154 192
Swap: 1024 126 898
第一行分别代表,全部,已使用,空闲,回收,缓存中,对程序来说的可用内存大小,第二行表示的则是swap的大小,即虚拟内存。
vmstat
vmstat
procs -----------memory-------------swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 121600 84292 0 193476 0 0 8 7 33 12 0 0 100 0 0
r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wt 等待IO CPU时间。
top
top命令可以说是最常用的一个命令,面且默认是每3秒刷新一次。我们可以通过-d 选项来更改刷时间
#top -d 1 表示一秒钟刷新一次
使用TOP后,会进入一个专门的界面,此时无法进行普通shell操作,只有top下的命令可以执行,几个常用的命令。
q:退出
排序:默认top以CPU占用百分比排序,大写状态下按以下字母或者直接按SHITF+以下字母
P:CPU占用百分比排序,%CPU
M:占据内存百分比排序,%MEM
T:累计占据CPU时间排序,TIME+
终止指定进程:
k:直接输入k,在输入进程的PID号
修改刷新时间间隔:
s:按s直接输入数字,1就表示1秒刷新一次
TOP界面说明
top - 16:10:34 up 9 days, 23:52, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 120 total, 1 running, 74 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 : 491500 total, 83608 free, 214036 used, 193856 buff/cache
KiB Swap: 1049596 total, 927996 free, 121600 used. 242248 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 43464 3536 2536 S 0.0 0.7 0:05.55 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.07 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kb
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:03.68 ksoftirqd/0
10 root 20 0 0 0 0 I 0.0 0.0 0:02.34 rcu_sched
11 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh
12 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
13 root rt 0 0 0 0 S 0.0 0.0 0:01.98 watchdog/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
16 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
17 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kauditd
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xenbus
19 root 20 0 0 0 0 S 0.0 0.0 0:00.01 xenwatch
21 root 20 0 0 0 0 S 0.0 0.0 0:00.21 khungtaskd
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
23 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
24 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kcompactd0
第一行同上面的uptime
第二行显示的是进程数,分别为当前进程总数,正在运行进程,睡眠进程,停止的进程,僵尸进程
第三行表示CPU占用时间的百分比,分别为当前用户的,内核时间百分比,负优先级进程,空闲时间,IO等待状态,硬中断状态,软中断状态
第四行表示内存,分别是总内存,空闲内存,使用中的,缓存状态的
第五行表示swap即交换空间:分别是总数量,空闲,已用,可有内存
下面的内容则是动态的一张列表,列表的表头如下:
PID:进程ID
USER:进程的所有者
PR:进程的优先级
NI:nice值
VIRT:占用的虚拟内存
RES:占用的物理内存
SHR:使用的共享内存
S:进行状态 S:休眠 R运行 Z僵尸进程 N nice值为负
%CPU:占用的CPU
%MEM:占用内存
TIME+: 占用CPU的时间的累加值
COMMAND:启动命令
iostat
硬盘状态显示,需要单独安装
yum install sysstat
基本命令
iostat 1 10 //每秒一次,总共10次
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 0.00 0.00 0.00 0 0
xvda 0.00 0.00 0.00 0 0
....
分别表示 设备每秒传输次数,每秒读取量,写入量,总读取,总写入
netstat
tcpdump
ps等