Linux+Docker 内存占用高问题排查

Linux+Docker 内存占用高问题排查

查看docker服务资源占用情况

docker stats 

docker 停止所有容器命令

docker stop $(docker ps -a -q)

docker 启动所有容器命令

docker start $(docker ps -a -q)

2.1 df -h 查看硬盘资源占用

如果服务器被日志或者其他服务的文件占用磁盘过慢,也有可能导致持久化的失败,所以第一时间先查看磁盘占用。
使用命令

df -h  

查看硬盘资源占用
在这里插入图片描述
挂载的磁盘占用还是非常健康的,可以排除这个原因

2.2 Top观察资源 观察CPU 内存

使用命令

top 

观察服务器资源占用
在这里插入图片描述
开始观察,很明显发现内存占用非常的高,

使用命令

iotop

观察服务器的io使用情况

在这里插入图片描述

查看内存占比:

free -g     

内存快要满了,同时buffer部分占用的内存也比较高。
先清除不用的页缓存

echo 1 > /proc/sys/vm/drop_caches

常用的清除缓存命令

To free pagecache:仅清除页面缓存(PageCache)
echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:清除目录项和inode
echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:清除页面缓存,目录项和inode
echo 3 > /proc/sys/vm/drop_caches

清除缓存后发现,内存释放的并不多,判断是有程序正在进行大量的文件操作。

需要定位到内存占用的服务
使用命令

ps -aux | sort -k4nr | head -10

查看内存排行前十的服务
在这里插入图片描述

由于使用的是docker形式部署的环境,docker file 中使用了同一的app.jar 无法判断PID对应哪个服务,因此需要根据PID 确定对应的服务

2.3 根据PID查找对应的docker 容器

使用docker container top container_name 获取容器对应PID

docker container top container_name

在这里插入图片描述

对应的命令只能单个查询已知名称的容器PID 这样排查起来比较困难,一个个尝试的话费力不讨好
列表获得容器PID

docker inspect -f '{{.State.Pid}}' $(docker ps -aq)

在这里插入图片描述

其中 $(docker ps -aq) 可以替换成具体的container名称,这样效果等同与上一个命令

在这里插入图片描述

获得到对应的服务容器

2.4 最终处理

联系对应服务开发,对方查看后表示错误出现时进行了数据报表生成的操作,导致内存飙高,随后,先进行了对应服务的启动限制内存,待后续优化内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值