作为一名软件开发者,平时关注点更多是在程序开发上,但掌握一些运维知识点还是很有必要的,不仅可以提高我们自身的知识面,还可以方便定位问题,有利于我们解决问题的能力。所以我觉得有必要掌握。 张工是一名程序员,做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的具体使用情况了。 如图: 查看cpu2。查看cpu命令vmstat 上面我们通过top命令,然后按键盘数字键1能够查看CPU的使用情况,步骤有点绕,那么有没有更简洁的方式了解CPU使用情况的话,答案是肯定的,常用的命令是vmstat。 vmstat命令使用一般是通过两个参数来完成,第一个参数表示采样的时间间隔,(单位秒),第二个参数是采样的次数,例如: vmstatn53 意思就是隔5秒取样一次,一共取样3次。 如图: vmstat命令 返回了这么一系列参数,一般主要关注procs和cpu这两个就足够了。 procs: r:运行和等待CPU时间片的进程数,一般来说整个系统的运行队列不要超过总核数的2倍,要不然系统可能撑不住了。 b:等待资源的进程数,比如正在等待磁盘IO、网络IO cpu: us:用户进程消耗CPU时间百分比,us值高的话,说明用户进程消耗CPU时间比较长,如果长期值大于50的话,那就说明程序还有需要优化的空间。 sy:内核进程消耗的CPU时间百分比 ussy参考值为80,如果大于这个值的话,说明CPU可能不足,需要排查哪些任务在运行导致CPU过高了。 3。查看内存命令free 查看内存情况使用情况free, 它主要有三个命令: free freeg freem 个人习惯用freem,我们来看看这三种方法有什么不同。 free命令 通过free命令,我们看到8008868这个值,但并不能第一时间知道到底有多大, freeg这个命令返回结果做了四舍五入了 freem我个人觉得,相对另外两个命令来说,还是比较清晰的,一目了然。 其中: Mem:表示物理内存统计 bufferscached:表示物理内存的缓存统计 Swap:表示硬盘上交换分区的使用情况4。查看磁盘使用情况df 查看磁盘的整体情况 命令:df 参数: a:列出所有的文件系统,包括系统特有的proc等文件系统 k:以KB的容量显示各文件系统 m:以MB的容量显示各文件系统 h:以人们较易阅读的GB,MB,KB等格式自行显示 H:以M1000K替代M1024K的进位方式 T:显示文件系统类型 i:不用硬盘容量,而以inode的数量来显示 l:只显示本机的文件系统 如果排查磁盘问题的话,首先要看的就是磁盘空间够不够, 查看磁盘空间就是df或者dfh这两个命令了 dfh命令 排查磁盘问题时,首先要看磁盘空间够不够。 记得刚接触java编程时,编写一个上传文件的接口,上线后刚开始没什么问题,上线一段时间后,图片上传总是失败了,后来经排查,是磁盘的问题。5。磁盘ioiostat 说到磁盘IO相信你第一时间会想到数据库写入IO,我们平时在对数据库进行操作时,第一要考虑到的就是磁盘IO操作,避免写入IO大,导致数据库压力大。 检查磁盘IO情况的命令就是iostat iostatxdk53 有没有留意到这个vmstat命令有些类似 同样有很多指标,我们重点关注下面几个就足够了 rkBs:每秒读取数据量kB; wkBs:每秒写入数据量kB; svctm:IO请求的平均服务时间,单位毫秒; util:如果这个值接近100说明磁盘带宽满了,需要优化程序或是增加磁盘 iostat命令 6。网络iosar命令 同样网络iosar命令: sarnDEV53 sar命令 其中: IFACE本地网卡接口的名称 rxpcks每秒钟接受的数据包 txpcks每秒钟发送的数据库 rxKBS每秒钟接受的数据包大小,单位为KB txKBS每秒钟发送的数据包大小,单位为KB rxcmps每秒钟接受的压缩数据包 txcmps每秒钟发送的压缩包 rxmcsts每秒钟接收的多播数据包 拓展: 实用技能:常用的linux命令 查看硬件信息相关命令: ifconfig、free、fdisk、ethtool、miitool、dmidecode、dmesg、lspci 系统性能监视高级命令: uptime、top、free、vmstat、mpstat、iostat、sar、chkconfig 查看内存的命令: top、free、vmstat、mpstat、iostat、sar等 用于进程的命令:ipcs、ipcrm、lsof、strace、lstrace等 由于笔者知识及水平有限,文中错漏之处在所难免,如有不足之处,欢迎交流。