作为一名软件开发者,平时关注点更多是在程序开发上,但掌握一些运维知识点还是很有必要的,不仅可以提高我们自身的知识面,还可以方便定位问题,有利于我们解决问题的能力。所以我觉得有必要掌握。
张工是一名程序员,做java开发,有次到一家软件公司应聘java开发岗位,面试官就问了他这样一个问题:
生产服务器变慢了,如何排查思路?
张工由于平时对运维知识点掌握得比较少,回答起来也就没有那么充分。对于这个问题,
一般可以从下面几点入手:服务器的整体情况, CPU,内存,磁盘,磁盘IO, 络IO。
这需要我们掌握几个比较常见的linux 命令
1.top命令
top命令可以查看服务器整体使用情况
如图:
top命令
如果你平时很少使用linux命令,第一眼看这张图,可能会一头雾水,别急,下面我们一行一行来解释下。
第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)
第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵尸尸的进程数。一般情况下,只要没有僵尸的进程,表示问题不大。
第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
第4行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。
第5行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。
第6行里面主要看 PID 和 COMMAND 这两个参数,其中 PID 就是进程 ID , COMMAND 就是执行的命令。
在当前这个界面,我们只要在键盘上按下数字1就能够看到各个CPU的具体使用情况了。
如图:
查看cpu
2.查看cpu命令 vmstat
上面我们通过top命令,然后按键盘数字键1能够查看CPU的使用情况,步骤有点绕,那么有没有更简洁的方式了解 CPU 使用情况的话,答案是肯定的,常用的命令是 vmstat 。
vmstat命令使用一般是通过两个参数来完成,第一个参数表示采样的时间间隔,(单位秒),第二个参数是采样的次数,例如:
vmstat -n 5 3
意思就是隔5秒取样一次,一共取样3次。
如图:
vmstat命令
返回了这么一系列参数,一般主要关注procs和cpu这两个就足够了。
procs :
r :运行和等待CPU时间片的进程数,一般来说整个系统的运行队列不要超过总核数的2倍,要不然系统可能撑不住了。
b : 等待资源的进程数,比如正在等待磁盘IO、 络IO
cpu :
us :用户进程消耗 CPU 时间百分比, us 值高的话,说明用户进程消耗 CPU 时间比较长,如果长期值大于50%的话,那就说明程序还有需要优化的空间。
sy :内核进程消耗的 CPU 时间百分比
us+sy 参考值为80% ,如果大于这个值的话,说明CPU可能不足,需要排查哪些任务在运行导致CPU过高了。
3.查看内存命令 free
查看内存情况使用情况 free ,
它主要有三个命令:
free
free -g
free -m
个人习惯用 free -m,我们来看看这三种方法有什么不同。
free命令
通过free命令,我们看到 8008868 这个值,但并不能第一时间知道到底有多大,
free -g 这个命令返回结果做了四舍五入了
free -m 我个人觉得,相对另外两个命令来说,还是比较清晰的,一目了然。
其中:
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况
4.查看磁盘使用情况 df
查看磁盘的整体情况
命令:df
参数:
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KB的容量显示各文件系统
-m:以MB的容量显示各文件系统
-h:以人们较易阅读的GB,MB,KB等格式自行显示
-H:以M=1000K替代M=1024K的进位方式
-T:显示文件系统类型
-i:不用硬盘容量,而以inode的数量来显示
-l:只显示本机的文件系统
如果排查磁盘问题的话,首先要看的就是磁盘空间够不够,
查看磁盘空间就是 df 或者 df -h 这两个命令了
df -h命令
排查磁盘问题时,首先要看磁盘空间够不够。
记得刚接触java编程时,编写一个上传文件的接口,上线后刚开始没什么问题,上线一段时间后,图片上传总是失败了,后来经排查,是磁盘的问题。
5.磁盘io iostat
说到磁盘IO相信你第一时间会想到数据库写入IO,我们平时在对数据库进行操作时,第一要考虑到的就是磁盘 IO 操作,避免写入IO大,导致数据库压力大。
检查磁盘 IO 情况的命令就是 iostat
iostat -xdk 5 3
有没有留意到这个vmstat 命令有些类似
同样有很多指标,我们重点关注下面几个就足够了
rkB/s :每秒读取数据量 kB ;
wkB/s :每秒写入数据量 kB ;
svctm :I/O 请求的平均服务时间,单位毫秒;
util :如果这个值接近 100% 说明磁盘带宽满了,需要优化程序或是增加磁盘
iostat命令
6. 络io sar命令
同样 络io sar命令 :
sar -n DEV 5 3
sar命令
其中:
IFACE 本地 卡接口的名称
rxpck/s 每秒钟接受的数据包
txpck/s 每秒钟发送的数据库
rxKB/S 每秒钟接受的数据包大小,单位为KB
txKB/S 每秒钟发送的数据包大小,单位为KB
rxcmp/s 每秒钟接受的压缩数据包
txcmp/s 每秒钟发送的压缩包
rxmcst/s 每秒钟接收的多播数据包
拓展:
实用技能:常用的linux命令
查看硬件信息相关命令:
ifconfig、free、fdisk、ethtool、mii-tool、dmidecode、dmesg、lspci
系统性能监视高级命令:
uptime、top、free、vmstat、mpstat、iostat、sar、chkconfig
查看内存的命令:
top、free、vmstat、mpstat、iostat、sar等
用于进程的命令:ipcs、ipcrm、lsof、strace、lstrace等
由于笔者知识及水平有限,文中错漏之处在所难免,如有不足之处,欢迎交流。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!