当前位置: 首页>>技术教程>>正文


什么在使用我的交换(Ubuntu)?

, ,

问题描述

我有一台运行数据库的Ubuntu 8.04服务器和一堆Java应用程序服务器。它的内存配置和用法是:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

我注意到交换每天下午都会增加,晚上会释放一些时间。需求并非全天都一样,并且在不同的时间开始。因此,除了模糊的”afternoon-night”边界之外,它都是随机的。

白天,这台机器上的负载会有所不同。在午夜和6-7 AM之间非常低,直到6-8 PM为止更高(但稳定),然后逐渐下降。

现在我有以下问题:

  1. 如何查看哪些进程正在使用交换?

  2. 为什么它更愿意换出而不是从缓存中获取一些内存?

最佳思路

您描述的交换使用模式听起来并不奇怪。它们与具有rarely-used页面的某些permanently-running进程一致。白天,由于活动繁忙,rarely-used页面几乎总是处于交换状态。晚上,RAM中有更多的空间供他们使用。

您可以了解一下tophtop中每个进程使用了​​多少种各种内存。默认情况下,两个都不显示交换使用情况,但是都可以配置为(顶部:按f并打开SWAP列; htop:按F2并添加NSWAP列)。您可以使用cat /proc/12345/vmstat获得有关特定进程的更多信息,其中12345是进程ID。请注意,“某些程序正在使用多少交换空间”并不完全是well-defined,因为某些页面由多个进程共享。

RAM有两种主要的竞争者:进程内存(可以换出)和磁盘缓存(可以是文件中的re-read)。没有理由总是使进程内存的优先级高于磁盘缓存:交换掉进程内存的rarely-used部分比将文件一次又一次地读入内存更好。您提供的数据大约有一半(例如30%–70%)的内存专用于磁盘缓存,这对于具有合理数量的RAM来执行其应执行的任务的系统来说是典型的。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8897.html,未经允许,请勿转载。