前言:今天早上,测试同学反映 昨天好好的服务,今天突然都不大能用了。。。由于早上家里停水,整个人到公司都有点懵,也是摸不着头脑。但是静下来想想,无非就是 cpu、内存、两个IO(网络和磁盘),不如用个笨方法一点一点排查就是了。
一、CPU
推荐文章:https://www.cnblogs.com/sbaicl/articles/2752068.html
用的当然是很常见的 TOP命令,效果图如下
几个重要的参数解释如下:
load average : 系统负载,三个数 依次表示 一分钟、五分钟、以及十五分钟 时间内的平均值。 当这个值接近于 1 时,说明 系统的资源已经处在恰好够用或者说马上要不够用的边缘。因此,大多数时候,当值超过了 0.7的时候,我们就应该开始分析资源占用较多的原因,并投入行动使其保持在能让我们安心睡觉的范围内。
Tasks:total 进程总数,running正在运行的进程数,sleeping睡眠的进程数,stopped 停止的进程数,zombie 僵尸进程数
%Cpu: CPU的使用率,只有一行的话,显示的是 综合值,可以按下 数字键 1,将分别展示出所有的 CPU的各自使用情况,顺便看下这个服务器有几个核。
us:用户程序占CPU百分比,sy操作系统内核占用CPU百分比,id:空闲CPU百分比,wa等待输入输出的CPU时间百分比,hi:CPU处理硬件中断的时间占比,si、st:CPU服务于软中断的时间占比
主要就是看 us 和 sy, us占用过高,那就在下面列表里找到占用过高的进程的PID,再去找对应的服务,分析原因;sy占用过高,操作系统处于忙率状态,一般就是存在频繁的上下文切换,这个就要看代码里哪边会有很激烈的竞争了,可能需要改变实现或者调整策略
二、内存
推荐文章:https://www.cnblogs.com/ultranms/p/9254160.html
上面的TOP命令也显示除了内存的占用情况,但是以 KB为单位,不是很直观
使用 free 命令,配合 -m 可以以 MB为单位显示出内存的使用情况
free -m 效果如下
Mem:内存 Swap:磁盘,是一种内存不够用时的plan B
实际看的时候 关注 available,这个是 实际可用的内存大小,举例:现在 free 是 209M,如果我起个Java服务,分配 500M,仍然是可以的,Linux会压缩 buff/cache的空间,从而可以给程序提供需要的内存。
三、磁盘
首先需要看下磁盘空间使用情况,看看是不是因为磁盘满了,导致服务缓慢
df -h 查看磁盘空间使用情况
关注这个 Use% 就是实际的使用率了,比较直观
其次是看 磁盘IO是否忙率,也就是 每秒读写的数据量
iostat 查看磁盘使用情况
推荐文章:https://www.cnblogs.com/the-tops/p/6708187.html
比较重要的参数
%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的 如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负载,该磁盘可能存在瓶颈。
svctm:平均每次设备I/O操作的服务时间
await:平均每次设备I/O操作的等待时间
avgqu-sz:平均I/O队列长度
四、网络
这个我认为比较直观的是 测下当前服务器的网速
speedtest-cli 测试当前网速
这个是其它服务器的截图,我测试出的测试服 上行速度 0.00Mbit/s,怪不得外面访问那么慢,服务器几乎没有能力把东西发送到互联网上。。。。。
下行速度: 下载互联网资源到服务器的速度
上行速度:服务器发送资源到互联网的速度
总结:
结果查了半天,打开阿里云一看,早上突然有大量的访问到服务器,某个时间点后断崖式下跌,然后服务器又可以正常提供服务了,搞不懂。。。