内存泄漏,内存黑洞问题定位
1. free查看内存概况
[root@VM_0_17_centos ~]# free
total used free shared buff/cache available
Mem: 1883844 376664 76136 192 1431044 1311252
Swap: 1048572 30540 1018032
通过对free查看,我们对内存的整体使用有个初步了解,并快速是否存在内存泄漏可能。
1.1 used占用正常,free很低,但是buff/cache和available挺高
这种情况不是内存泄漏,而是系统将可用内存cache起来了。在需要的时候可以释放出来使用。
如需手动释放,可执行 echo x > /proc/sys/vm/drop_caches 将缓存释放出来。(x=1,2,3)
**是否可以控制:**如命令有效果,观察内存不再升高,为控制住。表面不是内存泄露,只是cache较大。
1.2 used占用较高
这种情况存在内存泄漏可能,需要继续向下分析。
2. /tmp目录查看
/tmp目录是占用内存空间的,有时候日志或者其他临时文件过大,导致内存占用过多。
[root@VM_0_17_centos ~]# du -sh /tmp/*
0 /tmp/systemd-private-0bd2eb2d32be4029bb93736c12f9cfc6-httpd.service-93VBb6
0 /tmp/systemd-private-0bd2eb2d32be4029bb93736c12f9cfc6-ntpd.service-s017JD
0 /tmp/systemd-private-5245a0f476c64b80895d3fe3e5c5e9e6-httpd.service-Hp8PSy
0 /tmp/systemd-private-5245a0f476c64b80895d3fe3e5c5e9e6-ntpd.service-yQr1bn
0 /tmp/UNIX.domain
**是否可以控制:**需要确认是否可删除。
3. ps 查看进程内存占用
[root@VM_0_17_centos ~]# ps aux --sort -rss | head -n 10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 11625 0.0 0.0 97292 1732 ? Sl 14:48 0:00 /usr/local/qcloud/stargate/sgagent -d
root 11636 0.0 0.1 102348 2220 ? Ssl 14:48 0:00 /usr/local/qcloud/YunJing/YDLive/YDLive
root 11640 0.0 0.4 155208 7572 ? S 14:48 0:00 barad_agent
root 11645 0.0 0.4 158112 9192 ? S 14:48 0:04 barad_agent
root 11646 0.3 0.5 609092 11260 ? Sl 14:48 0:19 barad_agent
ps命令可以帮助我们定位分析应用进程内存泄漏。
观察RSS列,如果有进程RSS占用偏高,则存在内存泄漏可能。
需分析该程序源码是否存在泄漏可能。
4. /proc/meminfo查看内存信息
[root@VM_0_17_centos ~]# cat /proc/meminfo
MemTotal: 1883844 kB
MemFree: 970208 kB
MemAvailab