分享

生成服务器服务变慢了,如何排查思路?

 爱开发 2022-08-02 发布于广东

所以我觉得有必要掌握。

生产服务器变慢了,如何排查?

一般可以从下面几点入手:服务器的整体情况, CPU,内存,磁盘,磁盘IO,网络IO。

这需要我们掌握几个比较常见的linux 命令

1.top命令

top命令可以查看服务器整体使用情况

如图:

如果你平时很少使用linux命令,第一眼看这张图,可能会一头雾水,别急,下面我们一行一行来解释下。

  • 第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)

  • 第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵尸的进程数。一般情况下,只要没有僵尸的进程,表示问题不大。

  • 第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。

  • 第4行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。

  • 第5行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。

  • 第6行里面主要看 PID 和 COMMAND 这两个参数,其中 PID 就是进程 ID , COMMAND 就是执行的命令。

在当前这个界面,我们只要在键盘上按下数字1就能够看到各个CPU的具体使用情况了。

如图:

2.查看cpu命令 vmstat

上面我们通过top命令,然后按键盘数字键1能够查看CPU的使用情况,步骤有点绕,那么有没有更简洁的方式了解 CPU 使用情况的话,答案是肯定的,常用的命令是 vmstat 。

vmstat命令使用一般是通过两个参数来完成,第一个参数表示采样的时间间隔,(单位秒),第二个参数是采样的次数,例如:

vmstat -n 5 3

意思就是隔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

  • free -g

  • free -m 

个人习惯用 free -m,我们来看看这三种方法有什么不同。

通过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 这两个命令了

排查磁盘问题时,首先要看磁盘空间够不够。

记得刚接触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% 说明磁盘带宽满了,需要优化程序或是增加磁盘

 

6.网络io sar命令

同样网络io sar命令 :

sar -n DEV 5 3

其中:

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等

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多