在 Ubuntu 上排查 swap 内存泄漏可以按照以下步骤进行:
top 或 htop 命令top 或 htop 命令查看当前系统的内存使用情况。RES(常驻内存)和 SHR(共享内存)列,检查是否有异常增长。vmstat 命令vmstat 可以提供系统的虚拟内存统计信息。vmstat 命令,观察 swap 和 free 的变化情况,判断是否有内存泄漏。smem 工具smem 是一个强大的工具,可以详细统计系统中所有进程的内存使用情况。
smem:sudo apt-get install smem
smem 查看内存使用情况:smem -k -s uss -r
pprof 工具pprof 是 Go 语言自带的性能分析工具,可以用来分析内存使用情况。
net/http/pprof 包,并启动 HTTP 服务器:import (
"net/http"
_ "net/http/pprof"
)
func main() {
go func() {
http.ListenAndServe("localhost:6060", nil)
}()
// 你的程序代码
}
curl 或浏览器访问 http://localhost:6060/debug/pprof/heap 下载内存堆配置文件。pprof 工具分析下载的配置文件:pprof -http=:8080 ./your_program_binary heap_profile_file
http://localhost:8080 查看内存使用情况。valgrind 工具valgrind 是一个强大的内存检测工具,可以用来检测内存泄漏。
valgrind:sudo apt-get install valgrind
valgrind 运行你的程序:valgrind --leak-check=full ./your_program
valgrind 会生成详细的内存泄漏报告,帮助你定位问题。bpftrace 和 usdt 探针对于更高级的用户,可以使用 bpftrace 和 usdt 探针来跟踪内存分配和释放。
bpftrace:sudo apt-get install bpftrace
usdt 探针跟踪内存分配:sudo bpftrace -l usdt:/lib/x86_64-linux-gnu/libc-2.31.so
libc 分配内存的函数,帮助你找到潜在的内存泄漏点。通过以上步骤,你可以有效地排查 Ubuntu 系统中的 swap 内存泄漏问题。根据具体情况选择合适的工具和方法,逐步缩小问题范围,最终找到并解决内存泄漏的根源。