结论:不一定,Linux 会把空闲内存拿去做缓存,得先看 available 而不是 free 那一列。
① 用 free -h 重点看 available 字段,它才是应用真正能用的内存。buff/cache 高是正常现象,系统会在需要时自动回收,不代表泄漏。
② 如果 available 持续下降,再用 top 按 M 排序看 RES 增长的是哪个进程。观察趋势比看单次快照重要,隔几小时采样一次,持续单调上涨才可疑。
③ 确认是某进程后,Java 应用看堆外内存和 Metaspace,用 jmap -histo 对比两次对象数量;Go 或 C 程序则查是否有未释放的连接、缓存没设上限或 goroutine 泄漏。
④ 也可能是配置问题,比如连接池、本地缓存、队列积压没设容量上限。先加监控画出内存曲线,再结合业务量判断,别一看到内存高就重启,那样只会掩盖问题。