![缺少 RAM,总 RAM 比已用 RAM + 可用 RAM 大 1.5 GB](https://linux22.com/image/1009183/%E7%BC%BA%E5%B0%91%20RAM%EF%BC%8C%E6%80%BB%20RAM%20%E6%AF%94%E5%B7%B2%E7%94%A8%20RAM%20%2B%20%E5%8F%AF%E7%94%A8%20RAM%20%E5%A4%A7%201.5%20GB.png)
我的电脑上有两个操作系统。我安装了 Ubuntu 18.04 和 Windows 10。总内存为 3.94 GB。
在 Ubuntu 上,我的总 RAM 比可用 RAM 和已用 RAM 的总和大 1.5 GB。而 buff/cache 是 1.5 GB。
这是正常的吗?这只是 Linux 的工作方式,如果我需要更多内存,它会从 buff/cache 中获取吗?如果不是,如何解决这个问题?
$ watch -n 5 free -m
Every 5,0s: free -m gleb: Sat Jul 21 14:34:49 2018
total used free shared buff/cache available
Mem: 3851 2048 214 343 1588 1184
Swap: 2047 0 2047
$ vmstat -s | head -10
gleb@gleb:~$ vmstat -s | head -10
3943920 K total memory
2102300 K used memory
2350048 K active memory
984768 K inactive memory
209772 K free memory
38824 K buffer memory
1593024 K swap cache
2097148 K total swap
0 K used swap
2097148 K free swap
$ cat /proc/meminfo | head -10
MemTotal: 3943920 kB
MemFree: 181792 kB
MemAvailable: 1126248 kB
Buffers: 32236 kB
Cached: 1463972 kB
SwapCached: 0 kB
Active: 2340464 kB
Inactive: 1021944 kB
Active(anon): 1691844 kB
Inactive(anon): 588964 kB
$ sudo lshw
description: Notebook
product: 80SM (LENOVO_MT_80SM_BU_idea_FM_Lenovo ideapad 310-15ISK)
vendor: LENOVO
version: Lenovo ideapad 310-15ISK
serial: PF0L15FM
width: 64 bits
...
-memory
description: System Memory
physical id: 26
slot: System board or motherboard
size: 4GiB
-bank:0
description: SODIMM DDR4 Synchronous 2133 MHz (0,5 ns)
product: M471A5244BB0-CPB
vendor: Samsung
physical id: 0
serial: 00000000
slot: ChannelA-DIMM0
size: 4GiB
width: 64 bits
clock: 2133MHz (0.5ns)
答案1
Linux 处理 RAM 的方式取决于 Linux 内核版本,但总体而言,大致如下:
实际硬件具有X
一定数量的 RAM。Linux 启动并尽可能多地控制 RAM(部分可能由 BIOS/固件保留,其他部分由集成显卡保留,等等)。其余 RAM 首先free
。
在内核启动期间,Linux 内核会定位文件系统并启动init
需要一些 RAM 的进程(如今是 SysV init、Upstart 或 Systemd),并从该点开始启动其他进程。cache
如果可能,将从文件系统获取的所有内容保留下来。这允许内核在将来再次需要相同数据时跳过读取文件系统(和硬盘)。init
或任何其他用户模式CPU处理指令所需的过程称为used
。
默认情况下,每次用户模式进程向文件系统写入内容时,内核都会将写入的内容放入文件系统buffers
,并假装数据已写入文件系统。用户模式进程继续,内核继续并行将缓冲区写入文件系统(和硬盘)。
最后,used
如果另一个进程需要更多 RAM,则 RAM 是无法轻易释放的 RAM 部分。RAM 是free
无用 RAM 的一部分(实际上是浪费的 RAM),buffer
或者cache
是用于加速 I/O 的 RAM 的一部分。如果某个进程需要的 RAM 多于 ,则free
缓冲区和缓存 RAM 将被牺牲,但整体性能可能会因此受到影响。
至于您在评论中提到的运行某些特定应用程序时系统运行速度变慢的问题,您需要分享有关该具体案例的更多信息。您在 Linux 上运行的应用程序和 Windows 上运行的“相同”应用程序很可能不是同一件事。