命令w
[[email protected] ~]# w
09:03:29 up 8:14, 1 user, load average: 0.10, 0.20, 0.30
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root pts/0 192.168.134.1 09:02 0.00s 0.00s 0.00s w
主要分析红色字体,表示CPU负载 0.10表示一分钟cpu负载,该值一般不能大于cpu的核数,大于cpu核数,如一核表示cpu负载有点高,0.20表示五分钟cpu负载,0.30表示十五分钟cpu负载
查看CPU核数:红色字体,0表示单核,1表示双核
[[email protected] ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 69
model name : Intel(R) Core(TM) i5-4200U CPU @1.60GHz
命令uptime
和w命令差不多
[[email protected] ~]# uptime
09:05:57 up 1 min, 1 user, load average: 0.21, 0.09, 0.03
命令vmstat
当使用w命令,查看到cpu一分钟负载有点高时,就要分析在哪个地方使用高了。就使用这个命令分析
[[email protected] ~]# 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 3516 69292 196588 513076 0 0 0 25 1 2 0 099 0 0
[[email protected] ~]# vmstat 1 5 #每秒钟显示一次,一共显示五次
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 3516 68920 196588 513480 0 0 0 25 1 2 0 099 0 0
0 0 3516 68904 196588 513480 0 0 0 0 166 275 1 198 0 0
0 0 3516 68780 196588 513480 0 0 0 124 179 317 0 099 1 0
0 0 3516 68780 196588 513480 0 0 0 0 170 301 0 0100 0 0
0 0 3516 68780 196588 513484 0 0 0 0 184 293 2 197 0 0
[[email protected] ~]# vmstat 2 #一直监控,两秒显示一次
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 3516 67928 196592 514288 0 0 0 25 1 2 0 099 0 0
0 0 3516 67920 196592 514296 0 0 0 0 134 214 0 199 0 0
r(running、运行):表示运行和等待cpu时间片的进程数。如果长期大于服务器cpu个数,则说明cpu不够用了;
b(block、阻塞):表示等待资源的进程数,
swpd:虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其它机器
free:空闲的物理内存的大小
buff:Linux、unix系统是用来存储目录里面有什么内容,权限等得缓存
cache:cache直接用来记忆我们打开的文件,给文件做缓冲,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高程序执行的性能,当程序使用内存时,buffer/cache会很快被使用
si :每秒从磁盘读入虚拟内存的大小,如果这个大于0,表示物理内存不够用或者内存泄露了,要查找内存进程解决掉,我的机器内存充裕,一切正常
so :每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上
bi :从块设备读取数据的量(读磁盘);
bo:从块设备写入数据的量(写磁盘);
bi:块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机>器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
bo:块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
si:从交换分区到内存,so:从内存到交换分区;bi:从硬盘到内存,bo:从内存到硬盘;
这样理解是否正确:si和so和swpd的值一直增加,说明内存不足,因为要把内存某些数据交换出去。而bi bo值大,说明读写硬盘频繁,再大说明硬盘IO瓶颈。考虑陈列卡或固态硬盘、减少磁>盘IO操作
cs:每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和
线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表
示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us :cpu占用的百分比,这个大于50,就要找原因了,看哪个进程占用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
当使用w或者vmstat命令的时候,查看系统负载情况,top可以分析哪个进程占用cpu高
每三秒显示一次,按q退出
用法:top -bn1 #静态显示进程的负载,可以写入脚本里
[[email protected] ~]# top
top - 19:01:55 up 170 days, 8:15, 1 user, load average: 0.00, 0.01,0.00
Tasks: 98 total, 2 running, 96 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.7%sy, 0.0%ni, 98.7%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1030600k total, 980784kused, 49816k free, 196864k buffers
Swap: 2097148k total, 3516kused, 2093632k free, 530960k cached
PIDUSER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15624 root 20 0 7056 5904 432 S 0.3 0.6 135:18.16 sap1002
15627 root 20 0 31464 12m 664 R 0.3 1.3 282:13.96 sap1005
1root 20 0 2900 936 796 S 0.0 0.1 0:10.05 init
2root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4root 20 0 0 0 0 S 0.0 0.0 0:56.08 ksoftirqd/0
前面几行可以看到cpu负载,内存的使用used,空闲内存free,和buffers,cached
下面的有PR(0--39),NI(-20--19)
VIRT:虚拟内存
RES:真实内存
SHR:共享内存
%CPU :占用cpu的百分比
%MEM:占领内存百分比
COMMAND:具体的进程
命令sar
查看网卡流量
首先要先安装
yum install -y sysstat
刚才是可能会显示“无法打开 /var/log/sa/sa08: 没有那个文件或目录”,过10分钟才能正常显示
[[email protected] ~]# sar -n DEV
Linux 2.6.32-504.30.3.el6.i686 (feiji) 2016年11月08日 _i686_ (1 CPU)
20时20分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20时30分01秒 lo 0.13 0.13 0.01 0.01 0.00 0.00 0.00
20时30分01秒 eth0 1.35 1.40 0.15 0.22 0.00 0.00 0.00
平均时间: lo 0.13 0.13 0.01 0.01 0.00 0.00 0.00
平均时间: eth0 1.35 1.40 0.15 0.22 0.00 0.00 0.00
其中主要看eth0(外网网口)的rxkB/s(进网口)、txkB/s(出网口)
rxkB/s(每秒收取的数据量)
txkB/s(每秒发送的数据量)
0.15kb/s / 1000 = 0.00015mb/s
带宽等于0.00015mb/s * 8bi t= 0.0013m
须知道1byt = 8bit
常说的网线带宽单位就是比特10m的带宽都是已经乘于8
10 / 8 = 1.25 就是它的下载速度
比特是网卡上的进量单位
计算机单位有字节(byt),KB,MB,GB
sar –q #能够查看历史负载
sar –b #可以查看当前的磁盘状态
sar –p #可以查看cpu的使用情况
命令free
[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 1006 961 44 0 187 541
-/+ buffers/cache: 232 774
Swap: 2047 4 2043
Men 表示内存,total表示总数,used表示使用量,free表示剩余内存
真正的剩余内存看-/+ buffers/cache: free=744= 44+187+541
第二部分(-/+ buffers/cache):
(-buffers/cache) used内存数:232M (指的第一部分Mem行中的used – buffers – cached)
(+buffers/cache) free内存数: 774M (指的第一部分Mem行中的free +buffers + cached)
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数.