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

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

背景:

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

目前排查方案:

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

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

5523 次点击
所在节点   Java  Java
63 条回复
leonshaw
leonshaw
2023-07-26 10:12:58 +08:00
Xmx 加起来有多少
Rv9H
Rv9H
2023-07-26 10:14:12 +08:00
cat /proc/meminfo 是啥?
echo m > /proc/sysrq-trigger dmesg 输出是啥

先分析操作系统这边是哪种类型的页面,看是用户态还是内核态的页面
如果是用户态 cat /proc/<pid>/smap_rollup 分析是哪个进程
leonshaw
leonshaw
2023-07-26 10:15:16 +08:00
OOM 日志是指 Java 的还是系统的?哪个进程的或者 kill 了哪个进程?
crsmk01
crsmk01
2023-07-26 10:24:56 +08:00
另外,这些微服务应用用的什么系统用户( root or 普通用户)在跑的 ?有没有监控过操作系统整理的文件描述符、总线程数?
/proc/sys/fs/file-nr
/proc/sys/kernel/pid_max
/proc/sys/kernel/threads-max (结合所有 /proc/<pid>/status | grep -i Threads 总和看下)
hahastudio
hahastudio
2023-07-26 10:29:38 +08:00
不光要留意线程数,还要看看进程数
ElvisLiao
ElvisLiao
2023-07-26 10:41:45 +08:00
建议排查下堆外内存泄漏,如果不存在 gzip 之类的流没有关闭的话,我看你的症状大概率是 linux 的 ARENA 区导致的。
pmap -x <pid>|sort -gr -k2 |less ,看看是不是存在大量的 64M 的内存块。是的话,机器参数强制设置一下 export MALLOC_ARENA_MAX=1
wxd21020
wxd21020
2023-07-26 11:55:21 +08:00
@wzy44944 生产环境,没办法大动了,目前就是想着找到原因后将服务分到别的服务器上。
wxd21020
wxd21020
2023-07-26 11:57:55 +08:00
@Ggmusic 线程数我也监控了,我目前是看 current 、deadlocked 、timed_waiting 、waiting 类型的线程,目前看没有出现大批量的线程。
wxd21020
wxd21020
2023-07-26 11:59:11 +08:00
@quan7u 你说的是 open file descriptors 吗?这个我一直没注意他是用来干什么的。
wxd21020
wxd21020
2023-07-26 11:59:46 +08:00
@hsymlg 感谢大佬,我研究一下。
wxd21020
wxd21020
2023-07-26 12:00:19 +08:00
@leonshaw 加起来有 10G 左右吧
wxd21020
wxd21020
2023-07-26 12:00:51 +08:00
@Rv9H 我去查一下
wxd21020
wxd21020
2023-07-26 12:01:51 +08:00
@leonshaw java 服务的,报 OOM 的时候是 17 个服务大概在相同的时间段爆出来的,爆出来的时候 ssh 都连不上去了,没办法 kill 了
wxd21020
wxd21020
2023-07-26 12:02:30 +08:00
@tdy218 普通用户,你说的这个目前还没监控,我监控研究一下。
wxd21020
wxd21020
2023-07-26 12:03:13 +08:00
@ElvisLiao OK ,我去查一下
wxd21020
wxd21020
2023-07-26 12:16:15 +08:00
@tdy218 这个/proc/<pid>/status 下的 thread 我统计过,17 个服务每个都没超过 100.
opengps
opengps
2023-07-26 12:30:43 +08:00
linux 不熟,分享下 windows 平台的经验:对于操作系统,内存的概念可以展开几种分类,你现在排查疑似内存泄漏的目的,需要从“提交内存”下手,而不是只看“专享内存”,一看这俩内存的差额,二看启动时候和泄漏后的差额,对比出来时那个进程,然后再去 dump 分析具体泄漏的线程或者对象
OblivionStaff
2023-07-26 12:40:24 +08:00
磁盘 iops 正常吗
zhujinlong
2023-07-26 13:36:33 +08:00
先从操作系统层面检查哪些进程消耗了最多的内存
me1onsoda
2023-07-26 14:03:11 +08:00
@wxd21020 #33 都报 oom 了,怎么不分析 dump 文件,gc 日志

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

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

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

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

© 2021 V2EX