我有一个 8GB RAM 的 linux 盒子,上面运行着 4 个 tomcat 服务器。其中之一设置为 3000MB 内存(jvm -Xms 和 -Xmx 设置),其他设置为 1500MB。交换分区也设置为 8Gigs。当我启动这些服务器时,交换文件使用率很低。但是在一段时间内以及在一个/所有服务器处于活动高峰期的某些时间段内,交换使用量开始增加。这是典型的 sar -r 输出。
kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
48260 8125832 99.41 196440 2761852 7197688 1190912 14.20 316044
75504 8098588 99.08 198032 2399460 7197688 1190912 14.20 316032
它显示当前使用了 14.2% 的交换。有趣的是这 % 永远不会减少。它继续增加并达到30-40%。我们每周重新启动我们的服务器。
我会假设%swpused在活动高峰期会增加,而在活动低潮期会减少……或者至少保持不变。这看起来交换空间永远不会被操作系统回收..
free 的输出:free -m 缓存的已用空闲共享缓冲区总数:7982 7937 45 0 32 2088 -/+ 缓冲区/缓存:5816 2166 交换:8191 1163 7028
所以至少有 2g 的免费 …
我的服务器有 8Gigs 的 RAM 和 8Gigs 配置用于交换文件。我正在运行内存密集型应用程序。这些应用程序具有峰值负载,在此期间我们发现交换使用量增加。使用了大约 1 GIG 的交换。
我有另一台带有 4G 内存和 8 Gb 交换的服务器以及类似的内存密集型应用程序在其上运行。但是在这里交换使用非常可以忽略不计。大约 100 MB。
我想知道Linux 将 RAM 中的进程内存交换到交换文件的确切条件或粗略公式是什么。我知道它基于交换因子。它还有什么依据?交换文件大小?任何指向解释这一点的 Linux 内核内部文档/源代码的指针都会很棒。