SoFunction
Updated on 2025-05-04

Diagnosis and solution to memory leak problem under Linux

Problem Overview

Memory leaks are one of the common performance problems in Linux systems, manifested as the gradual decrease in the available memory of the system, which may eventually lead to process crashes or system slow response. This article will introduce in detail how to diagnose and resolve memory leaks in Linux environments.

Step 1: Confirm the memory usage

1. Check the overall memory status of the system

free -h

Or use more detailed tools:

cat /proc/meminfo

2. Monitor memory changes

# Refresh memory usage every 2 secondswatch -n 2 free -h

Step 2: Identify the process of memory leak

1. Use the top command to view memory usage

top

In the top interface:

  • according toMSort by memory usage
  • observeRES(resident memory) and%MEMList

2. Use the htop tool (more intuitive)

htop

3. Use the smem tool (need to be installed)

smem -s rss -r

Step 3: In-depth analysis of suspicious processes

1. View the process detailed memory map

pmap -x <PID>

2. Use valgrind to detect memory leaks (for development environments)

valgrind --leak-check=full --show-leak-kinds=all ./your_application

3. Use strace to track system calls

strace -p <PID> -e trace=mmap,munmap,brk

Step 4: Common memory leak scenarios and solutions

1. Application memory leak

  • Solution

    • Contact the developer to fix the code
    • Set up automatic process restart mechanism
    • Use memory limits (cgroups)
# Use cgroups to limit process memorycgcreate -g memory:/myapp
echo 100M &gt; /sys/fs/cgroup/memory/myapp/memory.limit_in_bytes
echo &lt;PID&gt; &gt; /sys/fs/cgroup/memory/myapp/tasks

2. Kernel memory leak

  • Diagnostic method
cat /proc/meminfo | grep Slab
slabtop
  • Solution

    • Upgrade the kernel version
    • Restart the system (temporary solution)

3. The cache is not released in time

  • Diagnostic method
echo 3 > /proc/sys/vm/drop_caches

Then observe the memory changes

Step 5: Advanced Diagnostic Tools

1. Use perf tool to analyze

perf stat -e 'kmem:*' -a sleep 10

2. Use sysdig to monitor memory allocation

sysdig -c topfiles_bytes

3. Use ebpf tool

bpftrace -e 'tracepoint:kmem:kmalloc { @[comm] = sum(args->bytes_alloc); }'

Preventive measures

  • Regular monitoring: Set the memory usage alarm threshold
  • Stress test: Perform adequate memory testing during the development stage
  • Code review: Focus on the symmetry of memory allocation/release
  • Using smart pointers(C++) or automatic memory management mechanism

Summarize

Dealing with Linux memory leaks requires a systematic approach: from confirming that the problem exists, to locating the problem process, and then to in-depth analysis of the specific causes. The tools and techniques described in this article can help you effectively diagnose and resolve most memory leaks. For complex memory leak problems, multiple tools may need to be analyzed and contacted with application developers to solve them if necessary.

Remember that in some cases (such as kernel memory leaks), restarting the system may be the most direct solution, but this is only a temporary measure and the root cause should be traced.

This is the end of this article about the diagnosis and solution of memory leak problems under Linux. For more related content on Linux memory leak problems, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!