作者:antingwolf | 来源:互联网 | 2023-08-18 12:45
请教各位 linux/java 大佬们一个关于内存占用的问题。
先说下场景是一个 springboot + websocket-starter 的即时任务服务。单机 4c8g 只运行该服务,大概维持 2w+长连接。free -h 显示内存占用为 6.8G 。在 top 中显示该进程 RES 为 5.0G 。阿里云后台报警显示已经占用了 95%+的内存。
以下为 free -h 命令输出结果
1 2 3 4
| [[email protected] srv]# free -h
total used free shared buff/cache available
Mem: 7.4G 6.8G 223M 536K 321M 297M
Swap: 0B 0B 0B |
以下为 top 命令按内存排序部分输出结果
1 2 3 4 5 6 7 8 9 10 11
| top - 22:40:13 up 14 days, 5:36, 2 users, load average: 0.22, 0.18, 0.21
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4.0 us, 1.2 sy, 0.0 ni, 94.5 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
MiB Mem : 7551.8 total, 220.8 free, 7008.6 used, 322.3 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 295.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22739 root 20 0 8646580 5.0g 14500 S 23.3 68.2 1485:21 java
1563 root 20 0 1005204 13264 2308 S 0.3 0.2 64:57.91 /usr/local/clou
859 root 20 0 574296 11484 188 S 0.0 0.1 1:33.52 tuned
380 root 20 0 47652 10988 10636 S 0.0 0.1 0:03.24 systemd-journal |
我的疑问是这两个数据到底是怎么算的 [捂脸] ,为啥 free 显示占用 6.8G ,但是 top 里只看到 5.0G 的内存占用。
目前有点怀疑是否是内存泄露导致?还是因为 top 内统计不到堆外内存之类的?
求教大佬们解惑,谢谢!
cat /proc/meminfo 看下。5.0G 只是那一个进程占用的内存,其他进程、内核、硬件都会使用内存的。