记一次linux机器内存占用太多导致的服务宕机
背景
最近我们测试环境部署的一个项目总是不停的宕机,之前也有过,但是最近特别频繁
猜测
可能是因为cup或者内存占用太大导致的服务宕机
执行
1.登录linux服务器
2.top命令
下面是对每一行信息的详解
- 第一行:系统运行时间和平均负载
当前时间、系统已运行时间、当前登录用户的数量、最近5、10、15分钟内的平均负载
- 第二行:任务
任务的总数、运行中(running)的任务、休眠(sleeping)中的任务、停止(stopped)的任务、僵尸状态(zombie)的任务
- 第三行:cpu状态
字段 | 字段释义 |
us | user: 运行(未调整优先级的) 用户进程的CPU时间 |
sy | system: 运行内核进程的CPU时间 |
ni | niced:运行已调整优先级的用户进程的CPU时间 |
id | idle:空闲时间 |
wa | IO wait: 用于等待IO完成的CPU时间 |
hi | 处理硬件中断的CPU时间 |
si | 处理软件中断的CPU时间 |
st | 这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的) |
- 第四行:内存
全部可用内存、已使用内存、空闲内存、缓冲内存
- 第五行:swap
全部、已使用、空闲和缓冲交换空间
- 第七行至N行:各进程任务的的状态监控
字段 | 释义 |
PID | 进程ID,进程的唯一标识符 |
USER | 进程所有者的实际用户名 |
PR | 进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。 |
NI | 进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级 |
VIRT |
virtual memory usage 虚拟内存,进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 |
RES |
resident memory usage 常驻内存,驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA 1、进程当前使用的内存大小,但不包括swap out |
SHR |
SHR:shared memory 共享内存 1、除了自身进程的共享内存,也包括其他进程的共享内存 |
S |
这个是进程的状态。它有以下不同的值:
|
%CPU | 自从上一次更新时到现在任务所使用的CPU时间百分比。%CPU显示的是进程占用一个核的百分比,而不是整个cpu(N核)的百分比,有时候可能大于100,那是因为该进程启用了多线程占用了多个核心,所以有时候我们看该值得时候会超过100%,但不会超过总核数*100 |
%MEM | 进程使用的可用物理内存百分比 |
TIME+ | 任务启动后到现在所使用的全部CPU时间,精确到百分之一秒 |
COMMAND | 运行进程所使用的命令。进程名称(命令名/命令行) |
3.从上面的信息中,我们可以看到物理内存已经接近总值了,所以基本可以断定是因为这个原因导致
4.移除其他的几个处于sleep状态的服务,恢复正常