2021-10-29

Linux 系统运行变慢排查之路


前言

当我们在Linux系统上部署项目,启动项目,会发现运行一段时间后,系统整体变慢,这是什么原因呢?首先判断到底是哪个正在运行的进程消耗过大、还有CPU 运行状态、内存运行是否过载、交换内存区是否已满、以及硬盘是否运行正常等相关因素。这些都是我们需要关心的地方,也是我们排查系统的思路。


一、检查CPU

我们可以执行命令 cat /proc/cpuinfo文件系统中查看 CPU 的提供商和相关详细配置信息。

# cat /proc/cpuinfo

再通过# lscpu命令查看具体微观信息。

# lscpu

使用 top 命令检查 CPU 负载
除了上述检查的情况之外,还可以使用命令 top 来检查 CPU 负载,将实时显示 process 的动态。资源使用最高的进程排在最前面。

参数:
-c:显示完整命令;
-b:以批处理模式显示程序信息;
-d NUM:设置信息更新次数;
-n NUM:显示更新十次后退出;
-p PID:将显示指定的进程信息;
-S:以累积模式显示程序信息;

利用 iotop 命令进行检查
假如你想知道到底哪个进程产生了 IO,数据读取速度等信息,这个时候就需要 iotop 这个工具了。它的输出和 top 命令类似;

参数:

-o:只显示正在产生 I/O 的进程或线程;
-b:非交互模式,一般用来记录日志;
-n NUM:设置监测的次数,默认无限;
-d SEC:设置每次监测的间隔,默认 1 秒;
-p PID:指定监测的进程/线程;
-u USER:指定监测某个用户产生的 I/O;
-P:仅显示进程,默认 iotop 显示所有线程;
-a:显示累积的 I/O,而不是带宽;
-k:使用 kb 单位进行显示;
-t:时间戳;;
-q:只在第一次监测时显示列名;
-qq:将永远不显示列名;
-qqq:将永远不显示 I/O 汇总;

案例:CPU低,负载高
1.通过top命令查看CPU等待IO时间,即%wa;
2.通过iostat -d -x -m 1 10查看磁盘IO情况;(安装命令 yum install -y sysstat)
3.通过sar -n DEV 1 10查看网络IO情况;
通过如下命令查找占用IO的程序;

ps -e -L h o state,cmd  | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr

二、服务与空间

1.检查启动的服务

service --status-all 该命令查看所有服务当前的运行状态。将按照字母的顺序运行所有的 init 脚本。

# service --status-all

chkconfig --list 显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。

# chkconfig --list

initctl 是守护进程控制工具,管理员可以与 Upstart 守护进程进行通信和交互。

# initctl list

2.利用 free 命令来检查闲置内存空间

free 命令:用于显示内存状态,会显示内存的使用情况,实体内存,虚拟交换内存,共享内存,以及系统核心使用的缓冲区等等;

free [-b,-h,-k,-m,-o,-t,-V] [-s <间隔秒数>]

参数:

-b:以 byte 为单位显示内存使用情况;
-h:查看内存使用;
-k:以 KB 为单位显示内存使用情况;
-m:以 MB 为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-t:显示内存总和列;
-V:显示版本信息;
-s <间隔秒速>:将以动态的形式持续观察内存使用情况;

案例:使用free -h查看内存使用
在这里插入图片描述
详解:

1、total:总的物理内存

2、used:系统使用的内存,包括buff+cache。并非系统真正使用的内存。系统真正使用的内存=used-buff/cache

3、free:空闲的内存,系统未使用的内存,并不是系统启动应用程序可以真正使用的内存。

4、shared:共享内存

5、buff/cache:磁盘缓存的大小

6、available:在旧版free中,没有这个选项。这个选项指的是,系统启动程序时可以利用的内存,当这个选项很小或者不够启动程序所需的内存,会提示系统内存不足,无法启动,此时就需要处理问题,是物理内存真的不足,还是清理系统缓存。

Cached主要负责缓存文件使用, 日志文件过大,索引太多(redis,es,log处理等)造成cached区内存增大把内存占用完 ,Linux服务器会自动释放内存,保障系统运行,但只会释放够用的内存,而不会去释放更多的内存。


总结

很多人说,部署是运维人员的工作,其实在当下,程序员自己也是需要学会部署的,因为small company的部署就是程序员的part-job,而部署在Linux系统之后,运行项目不可避免就会出现各种问题,学会如何排查问题也是一种优势的能力。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值