我们正在运行一台拥有 23 个核心(cpuinfo 显示最高进程数为 22)和 66 GB RAM 的服务器。这里的开发团队正在运行一些应用程序,这会占用大量内存。
我观察到:1. 即使内存非常低(可用内存 = 167 MB),也不会使用交换空间。想知道服务器为什么拒绝使用交换空间。对此有什么想法吗?2. 系统负载有时会增加到 70+ 这样的数字,我可以看到这些应用程序是 I/O 密集型的。这会导致如此高的平均负载吗?
以下是 VMstat 的输出
进程 -----------内存---------- ---交换----- -----io---- --系统----- -----cpu------ rb swpd 免费 buff 缓存 si so bi bo in cs us sy id wa st 3 0 0 28932 1049 31757 0 0 6 145 6 33 1 0 98 0 0 .. .. 12 2 0 167 1876 57749 0 0 932 49604 2306 96856 26 8 58 7 0
meminfo 的输出
内存总量:66000044 kB 可用内存:11824808 kB 缓冲区:1498068 kB 缓存:48842440 kB 交换缓存:0 kB 活动:5350660 kB 不活动:46810284 kB 最高总计:0 kB 高可用:0 kB 低总计:66000044 kB 低免费:11824808 kB 交换总量:131074324 kB 免交换:131074324 kB 脏:2641608 kB 写回:96 kB 匿名页面:1819092 kB 映射:766660 kB 板坯:1753100 kB 页表:131908 kB NFS_不稳定:0 kB 跳出率:0 kB 提交限制:164074344 kB 已提交的 AS:9460100 kB Vmalloc总计:34359738367 kB Vmalloc已用:336508 kB VmallocChunk:34359401823 kB 大页面总数:0 HugePages_Free:0 HugePages_Rsvd:0 大页面大小:2048 kB
答案1
您读错了,而且几乎没有运用您的记忆。
MemTotal: 66000044 kB = 63GB available to the system
MemFree: 11824808 kB = 11GB with nothing at all used.
Buffers: 1498068 kB = 1.4GB
Cached: 48842440 kB = 46GB of data from the drive that is kept in otherwise unoccupied memory
SwapCached: 0 kB
Active: 5350660 kB = 5.1GB of memory that is actually used by applications.
当您从磁盘读取数据时,它会进入内存。如果没有其他东西争用内存,则该文件将保留在内存中,直到应用程序尝试使用该空间。每当从磁盘读取文件时,都会首先检查缓存。
您几乎不使用内存来运行应用程序,即使使用缓存,您仍有很多剩余内存可供使用。您的服务器不应该在内存负载如此之低的情况下使用交换空间。