缺少 RAM,总 RAM 比已用 RAM + 可用 RAM 大 1.5 GB

缺少 RAM,总 RAM 比已用 RAM + 可用 RAM 大 1.5 GB

我的电脑上有两个操作系统。我安装了 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 上运行的“相同”应用程序很可能不是同一件事。

相关内容