Linux服务器中线程、CPU、内存、硬盘等资源占用100%时的问题分析及解决措施

Linux服务器中线程、CPU、内存、硬盘等资源占用100%时的问题分析及解决措施

    • 1.线程爆满,出现“没有子进程”的错误
      • 问题描述
      • 问题分析
      • 问题定位
    • 2.CPU爆满,100%爆红
      • 问题描述
      • 问题分析
      • 解决方案
    • 3.内存爆满,100%爆红
      • 问题描述
      • 问题定位
      • 问题分析
    • 4.磁盘爆满,100%爆红
      • 问题描述
      • 问题分析
      • 解决方案

在这里插入图片描述

1.线程爆满,出现“没有子进程”的错误

问题描述

在演示环境中,服务运行一段时间后,出现“没有子进程”的错误,ssh也无法登录,服务奔溃,演示环境不可用。

-bash: fork: retry: 没有子进程 
-bash: fork: retry: 资源暂时不可用

问题分析

出现该问题肯定是线程数量被占满了,导致服务器没有资源可用了,应该分析每个进程所占用的线程数,以及线程增长速度。

问题定位

1.使用“ulimit -a”命令查看本机的线程数有多少,其中“max user processes”表示最大线程数;

root@linx:~# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 257234
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 257234
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2.查看当前总的的线程数,发现跟线程的总限额数很接近;

root@linx:/platform# ps -xH | wc -l
257230

3.使用命令查看线程数总量在前五的进程,发现进程“3055”的线程数量明显不合理;

root@linx:/platform# ps -xH | awk '{x[$1]++;} END{for(i in x) print(i ":" x[i])}' | sort -n -k 2 -t : -r | head -n 5
3055:80393
1469:2860
12305:1511
12306:1395
20126:1368

4.确认PID为“3055”的线程数量;

root@linx:/platform# pstree -p 3055 | wc -l
80392

5.确认PID为“3055”是Docker运行的的网关服务;

root@linx:/platform# docker inspect -f "{{.Id}} {{.State.Pid}} {{.Name}}"  $(docker ps -q) | grep 3055
dc8ce63a2457ab2090ead648aea0939573a6b10bccd785341058bd2e8bb43c17 3055 /gateserver-gateserver-1

6.确认是统一网关日志模块有线程泄露。

2.CPU爆满,100%爆红

问题描述

docker中全部服务启动时,10多分钟的时间内,CPU占用都是100%

问题分析

多发于在机器刚启动时,全部服务都因为docker自启动的原因同时启动,导致CPU占用100%。
原因是因为服务存在一条较长的依赖链,MySQL->Nacos->众多应用服务
在服务器刚启动时,因为大量服务同时启动,共同挤占了CPU资源,因此所有服务启动的都很缓慢
但一般情况下MySQL都能成功启动,但Nacos却不会,这是因为为了保证Nacos健康状态,通常会对Nacos设置健康检查,但又由于众多服务同时与Nacos抢资源,导致Nacos无法在健康检查期限内成功启动,Nacos无法启动又导致众多服务无法正常启动,从而不断重启,从而形成了死循环

解决方案

Nacos设置健康检查时长加长一点,避免还没给够时长正常启动就又重启了;
为每个应用服务设置启动状态检测,即等待Nacos正常后才启动。

3.内存爆满,100%爆红

问题描述

系统内存使用情况很高,如下命令输出所示:

# uptime 
 23:42:48 up 34 days, 13:21, 12 users,  load average: 0.52, 0.75, 0.85

# free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi        12Gi       541Mi       1.1Gi       2.6Gi       1.7Gi
Swap:          29Gi        11Gi        18Gi

# top
top - 23:45:16 up 34 days, 13:24, 12 users,  load average: 0.59, 0.68, 0.81
Tasks: 638 total,   2 running, 634 sleeping,   0 stopped,   2 zombie
%Cpu0  : 10.8 us,  3.3 sy,  0.0 ni, 83.0 id,  0.3 wa,  0.0 hi,  2.6 si,  0.0 st
%Cpu1  :  8.9 us,  4.0 sy,  0.0 ni, 85.5 id,  0.3 wa,  0.0 hi,  1.3 si,  0.0 st
%Cpu2  : 13.1 us,  2.9 sy,  0.0 ni, 82.7 id,  0.3 wa,  0.0 hi,  1.0 si,  0.0 st
%Cpu3  :  8.2 us,  3.6 sy,  0.0 ni, 87.3 id,  0.0 wa,  0.0 hi,  1.0 si,  0.0 st
MiB Mem :  15731.1 total,    529.8 free,  12563.0 used,   2638.3 buff/cache
MiB Swap:  30720.0 total,  19096.5 free,  11623.5 used.   1740.3 avail Mem 
...

物理内存 16G 占用,SWAP 额外占用 11G 空间,排查内存系统使用情况,分析各个进程的内存占用情况。

问题定位

查找进程id:top -d 2 -c ,按Shift+M 来按照 %MEM 排序 以快速定位使用内存较多的进程

问题分析

1.查看JVM堆内存分配情况:jmap -heap pid(进程号)
2.查看占用内存比较多的对象: jmap -histo pid(进程号) | head -n 100
3.查看占用内存比较多的存活对象: jmap -histo:live pid(进程号) | head -n 100

4.磁盘爆满,100%爆红

问题描述

使用Docker运行服务相当长的一段时间后,出现硬盘占用超高,接近100%;

root@linx:~# df -h
文件系统        容量  已用  可用 已用% 挂载点
udev             10M     0   10M    0% /dev
tmpfs           3.2G  9.2M  3.2G    1% /run
/dev/sda2       901G  841G  14G    98% /
tmpfs           7.8G     0  7.8G    0% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           7.8G     0  7.8G    0% /sys/fs/cgroup
/dev/sda1       511M  132K  511M    1% /boot/efi
tmpfs           1.6G  4.0K  1.6G    1% /run/user/119
overlay         901G  841G   14G   98% /var/lib/docker/overlay2/27076d0555ead7c7abd5bb45f058cc90af445bb8a95382ab61da5f6385729be3/merged
overlay         901G  841G   14G   98% /var/lib/docker/overlay2/691497cefac43dd117ec0e15c29cbf50de409244f70381978536f509f6169503/merged
overlay         901G  841G   14G   98% /var/lib/docker/overlay2/25d353358b213494c82a6bb7a5e179240b7804671755e3104c6093dd6dea0c31/merged
overlay         901G  841G   14G   98% /var/lib/docker/overlay2/8b775567d3ed5ab15282cd5f4b679bca400fa08c8f02728be761935eb4fb9c5b/merged

问题分析

出现这种问题一般是Docker日志或者业务日志未加限制、Docker镜像或者Exited状态的容器太多、业务数据量占用过大这几种情况。

解决方案

根据原因不同可以分为以下几种方式:

1.Docker的日志限制问题;

yuntu@node-01:~$ cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://tjjv3zyc.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries":["https://docker.ut.cn","https://docker.utpf.cn"],
"graph":"/yuntu/docker",
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}

如果以上输出中没有”log-driver”、”log-opts”选项,则需要补充到daemon.json文件中,且需要重启Docker生效;

yuntu@node-01:~$ sudo systemctl daemon-reload
yuntu@node-01:~$ sudo systemctl restart docker

2.业务日志限制问题;
在Nacos中找到logback-common.properties配置,并且添加相应的限制配置。

3.Docker镜像或者Exited状态的容器太多
使用命令清理无用的镜像或容器;

root@linx:~# docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y

4.业务数据量过大;
在业务数据必须保留的情况下,只能通过增加硬盘来解决。

参考文章:
CPU、内存打满排查流程、JVMGC调优

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/288023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kafka容灾演练的方案

背景 kafka可以通过MirrorMaker工具把集群的数据从一个集群同步到另一个集群,通过在另一个数据中心创建灾备集群的方式可以做到容灾的效果,但是如果我们不通过如此重量级的工具也想达到容灾演练的目的,可以怎么做呢 kafka简单容灾实现 当原kafka集群发…

elasticsearch操作索引库

目录 一、创建索引库 二、查询索引库 三、删除索引库 四、修改索引库 mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型,常见的简单类型有: 字符串:text&…

论文降重助手同义词替换功能的优化建议与实施方案

大家好,今天来聊聊论文降重助手同义词替换功能的优化建议与实施方案,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 标题:论文降重助手同义词替换功…

C# 进阶语法,Linq入门到详解

什么是Linq LINQ (Language Integrated Query) 即语言集成查询–用来作查询一些操作类库主要负责对象的查询。 1、LINQ to Objects 主要负责对象的查询 2、LINQ to XML 主要负责XML的查询。 3、LINQ to ADO.NET 主要负责数据库的查询。 linq核心就是对数据源的操作 学linq另外…

把Canvas捡起来吧!

canvas介绍 canvas是HTML5新增的一种新特性&#xff0c;一种使用JavaScript绘制图形的HTML元素。 基本使用 <canvas id"example" width"300" height"300" />使用 矩形&#xff1a; var canvas document.getElementById("examp…

MFC综合实验二学习记录

文章目录 虚函数和纯虚函数的区别&#xff1f;MFC中什么是UPDATE_COMMAND_UI 消息如何查看控件对应的成员变量模态对话框的理解HGDIOBJ" 类型的值不能用于初始化 "CBrush *" 类型的实体错误MFC编程中CDC类型和HDC类型有什么区别&#xff1f;关于WIDING和ALTERNA…

01-SpringCloud微服务入门

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.1.单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打…

使用运程操作电脑向日葵安装MySQl与Navicat的安装

目录 一、向日葵 1.1、简介 1.2、应用场景 1.3、原理&#xff1a; 1.4、使用&#xff1a; 1.5、在实施中的应用场景&#xff1a; 二、在Windows Server2012中安装MySQL 2.1、MySQL简介 2.2、MySQL5.7安装与8.0 2.3、输入命令步骤 三、Navicat 3.1、简介 3.2、安装N…

揭示AUTOSAR中隐藏的漏洞

AUTOSAR是一个普遍采用的软件框架&#xff0c;用于各种汽车零部件&#xff0c;如ABS, ECU,自动照明、环境控制、充电控制器、信息娱乐系统等。AUTOSAR的创建目的是促进汽车零部件之间形成标准接口&#xff0c;可以在不同制造商之间互通。 因此&#xff0c;任何配备微控制器(MC…

WSL 与真实 linux 环境区别有多大?

随着 Windows 系统的不断发展和完善&#xff0c;WSL&#xff08;Windows Subsystem for Linux&#xff09;作为 Windows 10 的一个功能&#xff0c;为 Windows 用户提供了一个可以在 Windows 环境下运行 Linux 二进制可执行文件的环境。然而&#xff0c;尽管 WSL 为用户提供了一…

在线H5网页版植物大战僵尸游戏源代码

源码介绍 HTML5植物大战僵尸网页版游戏源码&#xff0c;直接把源码上传到服务器就能使用和访问

个人简历范本(精选5篇)

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 个人求职简历第 1 篇 男 22 本科 AI简历 市场营…

模块电源(七):LDO 应用

1、Typical application circuit LDO 典型应用电路如下图所示&#xff1a; 2、High Output Current Positive Voltage Regulator 通过 PNP 型三极管 Tr1 &#xff0c;可以提高 LDO 的输出电流能力&#xff0c;电路如下图所示&#xff1a; 设流过 R1 的电流为 &#xff0c;当 …

Python基础知识:整理2 列表的相关操作

1. 查找某元素在列表中的下标索引 2. 在具体的位置插入一个元素 3. 在列表的尾部追加元素 4. 追加元素方式2 5. 删除元素 6. 删除元素方式2 7. 删除元素方式3 8. 清空列表 9. 统计某个元素在列表中出现的次数 10. 统计列表中所有元素的数量 11. 定义空列表

odoo模型钩子函数,启动odoo执行自定义代码

在odoo的models模型基类中定义了这样一个方法_register_hook, 从方法的备注(表单注册以后执行的代码)可以看出这个方法的作用, 所以当我们想在odoo启动以后执行一些代码 比如队列监听等等事情的时候,就可以利用这个方法执行我们的代码 示例: class ModelName(models.Model):…

【Linux系统】系统目录结构

参考资料&#xff1a; Linux 常用操作命令大全&#xff08;最后更新时间&#xff1a;2022年1月&#xff09;_linux常用命令-CSDN博客 Linux 系统目录结构 | 菜鸟教程 (runoob.com) 一、终端回显含义 登录Linux系统后&#xff0c;在终端输入命令&#xff1a;ls 可以得到如…

【REST2SQL】02 GO连接Oracle数据库

Oracle数据库我用的最多&#xff0c;先研究Oracle,Go连接Oracle并实现REST和SQL服务。 1 Oracle数据库的安装 我这里安装使用的是Oracle 11g , 安装过程省略5217字。 2 安装Go-ora依赖 go get github.com/sijms/go-ora/v2 安装成功后在GOPATH目录可见&#xff1a; 3 创建一…

2024年【浙江省安全员-C证】模拟考试及浙江省安全员-C证证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 浙江省安全员-C证模拟考试是安全生产模拟考试一点通生成的&#xff0c;浙江省安全员-C证证模拟考试题库是根据浙江省安全员-C证最新版教材汇编出浙江省安全员-C证仿真模拟考试。2024年【浙江省安全员-C证】模拟考试及…

CDGA,CDGP,CDMP有啥区别?考哪个好?

&#x1f3af;CDMP数据管理专业认证是由DAMA国际于2004推出&#xff0c;是一项涵盖学历教育、工作经验和专业知识考试在内的综合资格认证&#xff0c;也是目前全球为一数据管理方面权威性认证。 ✅CDGA&#xff1a;数据治理工程师&#xff0c;“DAMA中国”组织的数据治理方面的…