内存管理,偏向交换

内存管理,偏向交换

我有 768 MB RAM。一般情况下,MySQL 使用 100-180 MB 的 RAM,MySQL 则交换 80-120 MB。我有 50-60 MB 的可用 RAM。

所以我想我应该升级。然后我将 RAM 升级到 1 GB。之后,我就有了 200-350 MB 的可用 RAM。但 MySQL 使用相同数量的 RAM,但仍然交换 40-60 MB。

这就是我的free -m结果。

             total       used       free     shared    buffers     cached
Mem:           996        796        200          0         73         97
-/+ buffers/cache:        625        371
Swap:         2047         92       1955

这是我的最高结果

top - 22:11:23 up 13:35,  1 user,  load average: 0.26, 0.33, 0.35
Tasks: 143 total,   1 running, 142 sleeping,   0 stopped,   0 zombie
Cpu(s): 20.2%us,  1.8%sy,  0.0%ni, 77.8%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1020564k total,   809836k used,   210728k free,    77808k buffers
Swap:  2097144k total,    94880k used,  2002264k free,   102596k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
 2484 mysql     20   0 1845m 165m 4356 S 25.9 16.6 151:33.45  63m mysqld
13777 myuser  20   0  201m  22m 9836 S  0.0  2.3   0:00.42    0 php-cgi
13780 myuser  20   0  200m  21m 9820 S  3.3  2.2   0:00.47    0 php-cgi
13773 myuser  20   0  200m  21m 9820 S  0.0  2.2   0:00.70    0 php-cgi
13775 myuser  20   0  200m  21m 9812 S  5.3  2.2   0:00.42    0 php-cgi
13779 myuser  20   0  200m  21m 9812 S  3.0  2.2   0:00.31    0 php-cgi
13778 myuser  20   0  200m  21m 9812 S  3.6  2.2   0:00.31    0 php-cgi
13776 myuser  20   0  200m  21m 9812 S  3.0  2.2   0:00.31    0 php-cgi
13774 myuser  20   0  199m  20m 9812 S  0.0  2.1   0:00.23    0 php-cgi
 2619 named     20   0  233m 9.8m 1388 S  0.0  1.0   0:04.57 5288 named
 2689 root      20   0  328m 7528 6316 S  0.0  0.7   0:05.14 9648 httpd
13735 root      20   0  106m 4840 3756 S  0.0  0.5   0:00.26    0 sshd
12772 apache    20   0  328m 3932 2040 S  0.0  0.4   0:01.08 9392 httpd
13163 apache    20   0  328m 3916 2036 S  0.0  0.4   0:00.65 9400 httpd
13425 apache    20   0  328m 3912 2036 S  0.0  0.4   0:00.32 9404 httpd
13417 apache    20   0  328m 3908 2036 S  0.0  0.4   0:00.35 9412 httpd
13420 apache    20   0  328m 3908 2036 S  0.0  0.4   0:00.37 9412 httpd

尽管我有 371 MB 可用 RAM,但我的 CentOS 6.3 系统仍然会交换。现在交换大小为 90 MB。

我的问题是,虽然我有很多可用 RAM,但为什么 Linux 仍然会交换?如果情况很糟糕,我该如何诊断更多?或者我不应该关心它?

答案1

您的 mysqld 配置为使用 1,8 GB RAM - 可能是由于您在/etc/my.cnf.这比实际可用的要多得多。

现在,在某个时间点(您可能会安装sysstat并询问sar这一点),您似乎会收到使用比可用内存更多的 RAM 的内存请求(也可能是 PHP) - 因此系统开始交换。

到最后,内存不再使用,但也无法访问它。因此系统没有理由将该交换空间放回 RAM。

您可以调整 Linux 的“swappiness”来改变这种行为。

“Ask Ubuntu”上有一个很好的问题/答案这里

答案2

我看到你跑apache1G ram,我vps去年也遇到过你的问题。apache需要大约 300-400 K 内存,这对我来说非常糟糕VPS,我删除apache并安装了lighthttpd。你做吧。

相关内容