什么是内存泄漏
申请内存不释放,常见现象就是内存被耗完,导致死机或者有些程序被kill掉。
排查思路
了解内存分配过程,如下:
所以先看应用层有没有内存泄漏(1处),然后slab(2处),然后再看没有统计的(3处)。
查看进程使用的物理内存有没有一直增大:
while true; do ps -e -o pid,comm,%mem | sort -n -r -k 3 | head -n 10 ;echo “———-”; sleep 1; done
查看slab有没有一直增大:
while true; do cat /proc/slabinfo | awk ‘{name=$1; size=$2*$4/4096; printf “%s %lu\n”, name, size;}’ | sort -n -r -k 2 | head -n 20; echo “————–”; sleep 1;done;
查看没有统计的有没有增大:
while true;do cat /proc/meminfo | awk ‘{if($1==“Active:” || $1==“Inactive:” || $1==“Unevictable:” || $1==“Slab:” || $1==“KernelStack:” || $1==“PageTables:”) u+=$2; if($1==“MemTotal:”) used+=$2; if ($1==“MemFree:”) used-=$2;}END{print used-u}’; sleep 1;done
找到异常的,进行细节排查