问题
我的内存已满,但进程列表中没有重型程序!
用法:
总内存为 4GB,但只有 400MB 可用:
监控方式htop
:
%MEM
按-> 重型程序排序时仅使用 1% 的内存!
哪个进程占用了我的内存?
答案1
我的内存已满,但进程列表中没有重型程序!
这是因为内存中充满了文件系统元数据(又名“缓冲区”)和内核缓存的文件内容(又名“缓存”)。
由于程序/用户通常在短时间内多次访问这些类型的资源,并且不使用内存是一种浪费,因此内核会缓存它们,以便比从磁盘再次读取它们更快地访问它们。
缓存数据的确切数量在第 5 列和第 6 列报告:
已使用的、可用的、缓存的共享缓冲区总数 内存:3838 2895 942 120 461,947 -/+ 缓冲区/缓存:1487 2350 交换:4394 615 3779
由于如果其他操作需要使用内存,缓存数据可能会立即被删除,因此缓存数据实际上并不是已采取并且实际上可供程序使用。
第三行报告了“实际”(缓冲区/缓存数据的净值)使用/可用的内存(“-/+ 缓冲区/缓存:”):
已使用的、可用的、缓存的共享缓冲区总数 内存:3838 2895 942 120 461 947 -/+ 缓冲区/缓存: 1487 2350 交换:4394 615 3779
为了方便起见,您可以添加几个别名以仅打印“实际”使用/可用的内存~/.bashrc
:
alias real_used="free -m | awk 'NR==3{print $3}'"
alias realf_free="free -m | awk 'NR==3{print $4}'"