Linux 内存使用率缓慢增长原因排查

2023-07-26 08:51:29 +08:00
 wxd21020

背景:

Linux 内存使用率缓慢增长排查,目前有一台服务器,上面部署了 17 个微服务应用,24G8C 的配置,所有应用启动后内存占用率在 45%左右,经过一个月的运行后内存会涨到 75%左右,然后服务器就 hung 住了,连 ssh 都无法连接,已经出现过两次了。

目前排查方案:

请问大佬们这种情况改从哪个方向再去排查一下。 目前即使向定位原因。

接下来会将应用拆分放到多台服务器上。

6215 次点击
所在节点    Java
63 条回复
NoKey
2023-07-26 14:07:20 +08:00
系统自身没啥问题的情况下,持续监控应用的内存占比,如果应用持续上升,看哪个上升的最多,然后分析呗。占用内存有两种情况,一种是服务有问题,就是内存泄露了,要找出来解决掉;一种是,他就是在一定时间后,要占这么多,占到一定峰值后,不会继续增加,那么这就是看服务自身是不是就需要比较大内存,单独给一台服务器。
flexbug
2023-07-26 14:08:09 +08:00
不如装个 process exporter 监控下每个应用占用
AlohaV2
2023-07-26 14:35:49 +08:00
是不是内存碎片太多了? buddyinfo 看一下
anticipated
2023-07-26 14:53:23 +08:00
先加点虚拟内存,防止死机,然后写脚本,记录一下,每几分钟输出各个资源的使用日志,大概几个小时就能找到问题了。
tin3w5
2023-07-26 15:04:30 +08:00
听起来像是内存泄漏,从经验上来看,大概率是 JVM 的锅。早些年在公有云厂商,大部分的 OOM case 都是开发的 Java 代码写的太烂导致 JVM 内存泄漏。
想起了之前在公有云厂商的时候,几百个 VIP 客户,用 Java 开发业务的能占一大半。同样是用 Java 开发的,那么几家公司就是经常 OOM 。你帮他诊断出来就是 JVM OOM 了,个别那一两家就非要跟你扯“我这代码在自己的笔记本上就不 OOM ,在你家公有云上就 OOM ,所以就是你家公有云的问题”。还要拉着你一起看 Java 代码……MMP 老子要是 Java 开发那么精通,老子第一个去你们公司把你给替了。
所以之前我们经常吐槽,Java 程序员的优劣,写小项目看不出来,写大项目就能看出来了。
wxd21020
2023-07-26 15:29:13 +08:00
@me1onsoda 分析了,dump 和 gc 都分析了,没发现问题,现在包 OOM 是因为服务器没内存供使用了,而不是 java 服务导致的 OOM
wushenlun
2023-07-26 16:01:37 +08:00
是不是 ubuntu20.04 和 22.都有这种 Bug ,,应该是跟平台+系统有关系,我现在跑 fedora 了
wxd21020
2023-07-26 16:02:21 +08:00
@wushenlun 我用的红旗
wxd21020
2023-07-26 16:02:48 +08:00
@tin3w5 听起来想内存泄露,但是又不想内存泄露。。。。
bli22ard
2023-07-26 16:51:34 +08:00
每个应用配置 -Xmx ,所有应用-Xmx 相加 < 系统启动内存 - 4G 。 这样让出现 oom , 是 jvm 自己,而不是 os oom 。这样就能找到有问题的那个系统, 然后再这个系统 oom 的时候, 使用 jmap dump 内存,进行分析,看看是哪里发生了问题, 是内存变量, 还是网络连接(包括中间件网络连接)。
qoo2019
2023-07-26 16:54:29 +08:00
@wxd21020 看下 NUMA ,是不是这块有状况
yesh0
2023-07-26 17:04:54 +08:00
可能可以先配置一个 earlyoom 或者类似的来在临近 oom 的时候把进程杀掉避免 ssh 都上不去的情况?( Linux 内核的 oom killer 不太行,会在真正开杀之前丢掉硬盘缓存卡好长一段时间。)然后就是看 earlyoom 日志看看哪个进程被杀掉了针对性看一下吧。

earlyoom: https://github.com/rfjakob/earlyoom
ffw5b7
2023-07-26 17:26:14 +08:00
Dump 的文件是不是很小?程序使用了 NIO 吗,是的话看下直接内存
vivisidea
2023-07-26 17:49:33 +08:00
可能是 kernel pagecache ,我们之前有过类似的问题,跟 jvm 啥的没关系

echo 3 > /proc/sys/vm/drop_caches

试试在内存比较高的时候执行这个命令(需要 root 权限)
cheng6563
2023-07-26 17:54:37 +08:00
ssh 连不上,用云控制台后台的远程连接可以直接连到虚拟机的屏幕上,这时说不定就能连了。
atlantic2477
2023-07-26 17:57:10 +08:00
1 、确认应用是否有内存泄漏
atlantic2477
2023-07-26 18:01:29 +08:00
1 、确认应用是否有内存泄漏
2 、应用没有内存泄漏的话排查下内核 slab 各对象内存占用情况

之前遇到过类似的情况,应用没有内存泄漏,但是容器内存缓慢增加。最后发现是有一个应用每次处理请求都会在临时文件下创建文件然后删除,随着请求量增加导致 slab 中 dentry 对象占用过多内存增加
wxd21020
2023-07-26 18:09:52 +08:00
@bli22ard 现在 24G 的服务器内存,Xmx 加起来 10G 左右吧
wxd21020
2023-07-26 18:10:19 +08:00
@vivisidea 没 root 权限。。。
wxd21020
2023-07-26 18:12:31 +08:00
@atlantic2477 研究一哈,
@yesh0 生产环境不敢乱搞
@qoo2019 等我研究一哈
@cheng6563 目前出现状况就是只能通云控制台进去后重启机器
感谢兄弟们

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/959746

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX