前言
我标题写的是思路,其实也是工作一天之后坐在床上静静思考,关于linux,怎么去聊这个事情会好一些。事实上就我个人而言,linux对于一名开发来讲需求是比较直接的,其实就是学会看性能就可以了。因为真实在生产线上的时候同时还会有专业的运维同学,还有一些系统专门去让我们去看,我们需要挑关键点。
从我们日常的Window出发
其实不管是window和linux,我们其实都是会按照一样的想法去看性能的;我们平时在window用得比较多,当系统负载高的时候我们直观的感觉就是卡,然后我们会打开我们的任务管理器,看看我们的CPU,看看我们的磁盘,是不是有什么东西占用高了。其实这个思路到了linux上面也是一样的,只不过的话,linux命令行方式多一些,我们只要把window上面看性能的思路迁移到linux就可以。
我们windows是用资源管理器去看的,曲线其实很明朗就可以看到了。
我们可以按照这个思路
CPU->内存->磁盘->网络,我们按照这个思路来,应该是清晰的。
性能评判的原则
还一个需要强调的是,生产上面其实会有一个原则,一般不能等系统挂了的时候再去处理,通常来说一台机器(多核)超过60%-70%其实就算压力比较大了,超过了80%的话其实就已经负荷很高了,这个是我们用来判断的性能的参考。
命令介绍
我们其实要先知道我们的目的,再介绍命令会比较合适,正如我们想要编辑文档的时候,我们会有word和wps的介绍,我们其实可以有不止一种的方式去实现我们的这个需求。
linux下的资源监视器
top命令是最常用的,对应我们的windos下面的资源监视器,linux top命令一敲,便是下面的内容
top - 22:33:12 up 467 days, 12:44, 3 users, load average: 2.82, 3.14, 3.33 Tasks: 468 total, 1 running, 467 sleeping, 0 stopped, 0 zombie Cpu(s): 14.8%us, 0.9%sy, 1.4%ni, 82.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 132244968k total, 75537804k used, 56707164k free, 1201448k buffers Swap: 33554428k total, 0k used, 33554428k free, 53700216k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 63276 hdfs 20 0 19.7g 8.7g 25m S 356.0 6.9 297879:19 java 2123 root 20 0 49960 2252 1704 S 0.7 0.0 149:44.81 syslog-ng 2152 nscd 20 0 945m 1736 1068 S 0.3 0.0 383:46.29 nscd ......
因为没得曲线看,我们需要晓得一下关键的字段:
load average 便是我们的系统负载情况,分别表示系统一分钟 五分钟 十五分钟的平均负载
id 全称的 idle,这个是空闲率,这个当然就是越空闲就系统压力越小,如果这三个值加起来/3 x100% 超过60% 说明负载比较高 如果超过80%就挂了!
另外top面板上面按1的时候可以切换多核的情况,可以试试。
简要面板
top命令其实信息太多了,我们其实有个迷你版本的面板
$ uptime 22:41:54 up 467 days, 12:53, 3 users, load average: 3.60, 3.53, 3.40
直接可以查看系统负荷情况
CPU和内存查看
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计。
$ vmstat 2 3 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 0 56691984 1201452 53722160 0 0 0 9 0 0 5 1 94 0 0 1 0 0 56692212 1201452 53722164 0 0 0 0 2539 1077 6 0 94 0 0 2 0 0 56692668 1201452 53722168 0 0 0 24 6199 8175 21 0 79 0 0
2是指2秒来一次,3的统计3下的意思,需要关注几个项目
r其实就是runing的意思,是指线程running
b是block的意思,线程block,这肯定不好,越少越好
us是user是的意思,用户使用cpu
sy是system的意思,系统使用cpu
us和sy两个值加起来超过80%,系统压力大,需要处理了
剩下可以看到内存和其他,稍微看得少些。
内存查看
free -m
free -m total used free shared buffers cached Mem: 129145 73937 55207 1 1173 52465 -/+ buffers/cache: 20298 108846 Swap: 32767 0 32767
这条命令就是查看内存,因为四舍五入,-m的兆的意思,也可以free -g,但是会被舍去很多内存,一般的m
磁盘查看
磁盘这个好说,就是看容量,这个就是满了就是100%,很容易看
$ df -ah Filesystem Size Used Avail Use% Mounted on /dev/sda3 518G 175G 317G 36% / proc 0 0 0 - /proc sysfs 0 0 0 - /sys devpts 0 0 0 - /dev/pts tmpfs 63G 0 63G 0% /dev/shm /dev/sda1 190M 27M 153M 15% /boot none 0 0 0 - /proc/sys/fs/binfmt_misc
磁盘一个查看是需要看读写情况
$ iostat -xdk 2 3 Linux 2.6.32-504.23.4.el6.x86_64 03/16/2020 _x86_64_ (24 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 49.04 0.01 5.48 0.23 217.89 79.48 0.01 2.29 0.18 0.10 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- rrqm/s: 每秒进行 merge 的读操作数目
- wrqm/s:每秒进行 merge 的写操作数目
- r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
- w/s:每秒完成的写 I/O 设备次数。即 delta(wio)/s
- rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节
- avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)
- avgqu-sz:平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)
- await:平均每次设备I/O操作的等待时间 (毫秒)
- svctm: 平均每次设备I/O操作的服务时间 (毫秒)
- %util:一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈
网络查看
其实可想而知想象得到,我们的网络应该是xxstat这种形式吧,其实还真是。
网络的查看是ifstat,不过这个软件有时候不带,需要自己安装
wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz tar -zxvf ifstat-1.1.tar.gz cd ifstat-1.1 ./configure make make install
敲命令ifstat就行,这个显示比较简单,网卡和上传下载的速度
eth0 eth1 bond0 KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out 0.00 0.21 0.06 0.00 0.06 0.21 0.00 0.00 0.06 0.15 0.06 0.15 0.00 0.15 0.06 0.00 0.06 0.15 0.00 0.00 0.06 0.15 0.06 0.15 1.24 15.24 0.06 17.02 1.29 32.25 0.14 1.15 0.06 0.20 0.20 1.35
总结
从我们window是迁移的思路是比较清晰的,按照设备+stat这种规律的命令也是比较容易推导出来的。