所以我觉得有必要掌握。 生产服务器变慢了,如何排查? 一般可以从下面几点入手:服务器的整体情况, CPU,内存,磁盘,磁盘IO,网络IO。 这需要我们掌握几个比较常见的linux 命令 1.top命令 top命令可以查看服务器整体使用情况 如图: 如果你平时很少使用linux命令,第一眼看这张图,可能会一头雾水,别急,下面我们一行一行来解释下。
在当前这个界面,我们只要在键盘上按下数字1就能够看到各个CPU的具体使用情况了。 如图: 2.查看cpu命令 vmstat 上面我们通过top命令,然后按键盘数字键1能够查看CPU的使用情况,步骤有点绕,那么有没有更简洁的方式了解 CPU 使用情况的话,答案是肯定的,常用的命令是 vmstat 。 vmstat命令使用一般是通过两个参数来完成,第一个参数表示采样的时间间隔,(单位秒),第二个参数是采样的次数,例如:
意思就是隔5秒取样一次,一共取样3次。 如图: 返回了这么一系列参数,一般主要关注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 -m,我们来看看这三种方法有什么不同。 通过free命令,我们看到 8008868 这个值,但并不能第一时间知道到底有多大, free -g 这个命令返回结果做了四舍五入了 free -m 是我个人觉得,相对另外两个命令来说,还是比较清晰的,一目了然。 其中: Mem:表示物理内存统计 -/+ buffers/cached:表示物理内存的缓存统计 Swap:表示硬盘上交换分区的使用情况 4.查看磁盘使用情况 df 查看磁盘整体情况 命令:df 参数:
如果排查磁盘问题的话,首先要看的就是磁盘空间够不够, 查看磁盘空间就是 df 或者 df -h 这两个命令了 排查磁盘问题时,首先要看磁盘空间够不够。 记得刚接触java编程时,编写一个上传文件的接口,上线后刚开始没什么问题,上线一段时间后,图片上传总是失败了,后来经排查,是磁盘的问题。 5.磁盘io iostat 说到磁盘IO相信你第一时间会想到数据库写入IO,我们平时在对数据库进行操作时,第一要考虑到的就是磁盘 IO 操作,避免写入IO大,导致数据库压力大。 检查磁盘 IO 情况的命令就是 iostat
有没有留意到这个vmstat 命令有些类似 同样有很多指标,我们重点关注下面几个就足够了 rkB/s :每秒读取数据量 kB ; wkB/s :每秒写入数据量 kB ; svctm :I/O 请求的平均服务时间,单位毫秒; util :如果这个值接近 100% 说明磁盘带宽满了,需要优化程序或是增加磁盘
6.网络io sar命令 同样网络io 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等 |
|