何时根据空闲输出升级 RAM

何时根据空闲输出升级 RAM

我有一个在 Linux 服务器上运行的 java 应用程序,物理内存(RAM)分配为 12GB,我会看到一段时间内的正常利用率,如下所示。

sys> free -h
              total        used        free      shared  buff/cache   available
Mem:            11G        7.8G        1.6G        9.0M        2.2G        3.5G
Swap:            0B          0B          0B

最近,在增加应用程序的负载时,我可以看到 RAM 利用率几乎已满,可用空间非常少,我可能会遇到一些缓慢的情况,但应用程序仍然可以正常工作。

sys> free -h
              total        used        free      shared  buff/cache   available
Mem:            11G         11G        134M         17M        411M        240M
Swap:            0B          0B          0B
sys> free -h
              total        used        free      shared  buff/cache   available
Mem:            11G         11G        145M         25M        373M        204M
Swap:            0B          0B          0B

我提到https://www.linuxatemyram.com/其中建议了以下几点。

警告标志您可能需要调查的真正内存不足的情况:

  • 可用内存(或“空闲+缓冲区/缓存”)接近于零
  • 使用的掉期增加或波动。
  • dmesg | grep oom-killer 显示 OutOfMemory-killer 的工作情况

从以上几点来看,我在应用程序级别没有看到任何 OOM 问题,并且交换也被禁用。所以忽略了这两点。困扰我的一点是可用内存小于零,我需要澄清一下

问题:

如果available接近0,会导致系统崩溃吗?

这是否意味着当可用内存变少时我需要升级 RAM?

应在什么基础上分配/增加 RAM 内存?

对于 RAM 内存分配,我们有需要遵循的官方建议/指南吗?

答案1

如果available接近0,会导致系统崩溃吗?

现代广泛使用的操作系统可以处理这种情况,因此,不,系统不会正常崩溃,尽管它可能会变得很慢,您将无法实际使用它。

这是否意味着当可用内存变少时我需要升级 RAM?

您的可用 RAM 确实太低,可能会导致进程被从 RAM 中逐出。您可能应该添加更多内存。

应在什么基础上分配/增加 RAM 内存?

如果您的性能受到影响(即您由于过多的交换使用而观察到磁盘抖动),或者您无法完成工作,因为您没有足够的 RAM 来完成任务。

对于 RAM 内存分配,我们有需要遵循的官方建议/指南吗?

据我所知,没有。每个人的 RAM 要求都不同。如果我们谈论的是 2021 年的现代操作系统、桌面环境和 Web 浏览器,那么 4GB 的 RAM 是绝对最低的,但我不建议使用少于 8GB 的​​ RAM。最终这取决于你的工作流程,而没有人知道。在某些领域,人们已经拥有 128GB RAM 的工作站(视频和图像编辑、3D 渲染、数学/化学/物理/工程计算和人工智能)。

答案2

如果available接近0,会导致系统崩溃吗?

在我的一台服务器上进行测试时,我加载的内存几乎已满,如下所示

sys> free -h
              total        used        free      shared  buff/cache   available
Mem:            11G         11G        135M         25M        187M         45M
Swap:            0B          0B          0B

能够单独看到我的应用程序(消耗更多内存)被杀死内存不足杀手可以在内核日志中引用

dmesg -e

[355623.918401] [21805] 553000 21805 69 21 2 0 0 rm
[355623.921381] Out of memory: Kill process 11465 (java) score 205 or sacrifice child
[355623.925379] Killed process 11465 (java), UID 553000, total-vm:6372028kB, anon-rss:2485580kB, file-rss:0kB, shmem-rss:0kB

https://www.kernel.org/doc/gorman/html/understand/understand016.html

Out Of Memory Killer 或 OOM Killer 是 Linux 内核在系统内存严重不足时使用的进程。出现这种情况是因为 Linux 内核为其进程分配了过多的内存。 ...这意味着正在运行的进程需要比物理可用内存更多的内存。

相关内容