VPS (ubuntu) 的内存使用问题:MySQL 进程终止

Memory usage issues with VPS (ubuntu): MySQL process dies

我是 运行 VPS,规格:

Ubuntu 12.04.5 LTS (GNU/Linux 3.13.0-32-generic x86_64)
512mb RAM
1 CPU 
20gb SSD

如果您想知道它是一个 DigitalOcean 液滴。它是 运行 TS3、LAMP(使用 wordpress)、OpenVPN、BYOBU 和 OwnCloud。

现在我的问题是 mySQL 在 30 米到 1 小时后死在我身上。通常在重启后,内存使用率为 54%,mySQL 没有问题,但随着内存使用率接近 80-89%,我开始出现问题。

System load:  0.01               Users logged in:      0
Usage of /:   22.1% of 19.56GB   IP address for eth0:  *****
Memory usage: 90%                IP address for as0t0: *****
Swap usage:   0%                 IP address for as0t1: *****
Processes:    93

如您所见,内存使用率非常高,而且我注意到 mySQL 进程随着内存使用率升高而死亡的趋势。但是交换使用率为 0%。

有没有办法让 mySQL 和其他进程使用交换?

让 mySQL 使用 swap 会不会在我的内存使用率变得如此高后停止让它死掉?

高内存使用后,进程终止,我得到这个错误:

 [2002] SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

在大多数情况下,处理器负载不会超过 25%。服务器还运行一个快速的 SSD,所以使用交换不会有问题,而且我没有那么大的流量。

通过创建大小为 256mb 的交换文件修复了它。 mySQL 在没有可用内存可用于工作后现在不会停止。

完成 Etel Sverdlov 的教程后:

https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-12-04

我能够制作一个交换文件。为了删除,我会复制教程。

如何在 Ubuntu 12.04

上添加隔夜利息

关于Linux交换 Linux RAM 由称为页面的内存块组成。要释放 RAM 页面,可能会发生“linux 交换”,并将内存页面从 RAM 复制到硬盘上预先配置的 space。 Linux 交换允许系统利用比最初实际可用的内存更多的内存。

然而,交换也有缺点。由于硬盘的内存比 RAM 慢得多,因此虚拟专用服务器的性能可能会大大降低。此外,如果系统因换入和换出太多文件而变得不堪重负,可能会开始发生交换抖动。

检查交换 Space 在我们继续设置交换文件之前,我们需要通过查看交换使用摘要来检查 VPS 上是否启用了任何交换文件。

sudo swapon -s

空列表将确认您没有启用交换文件:

Filename                Type        Size    Used    Priority

检查文件系统 在我们知道我们没有在虚拟服务器上启用交换文件之后,我们可以使用 df 命令检查服务器上有多少 space。交换文件将占用 256MB — 因为我们只用了大约 8% /dev/sda,我们可以继续。

df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda        20907056 1437188  18421292   8% /
udev              121588       4    121584   1% /dev
tmpfs              49752     208     49544   1% /run
none                5120       0      5120   0% /run/lock
none              124372       0    124372   0% /run/shm

创建并启用交换文件 现在是时候使用 dd 命令创建交换文件了:

sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k

“of=/swapfile”指定文件名。在这种情况下,名称是交换文件。

随后我们将通过创建一个 linux 交换区来准备交换文件:

sudo mkswap /swapfile

结果展示:

Setting up swapspace version 1, size = 262140 KiB
no label, UUID=103c4545-5fc5-47f3-a8b3-dfbdb64fd7eb

通过激活交换文件完成:

sudo swapon /swapfile

然后您将能够在查看交换摘要时看到新的交换文件。

swapon -s
Filename                Type        Size    Used    Priority
/swapfile                               file        262140  0   -1

此文件将保留在虚拟专用服务器上,直到机器重新启动。您可以通过将交换添加到 fstab 文件来确保交换是永久性的。

打开文件:

sudo nano /etc/fstab

粘贴以下行:

 /swapfile       none    swap    sw      0       0 

文件中的 Swappiness 应设置为 10。跳过此步骤可能会导致性能不佳,而将其设置为 10 将导致交换作为紧急缓冲区,防止内存不足崩溃。

您可以使用以下命令执行此操作:

echo 10 | sudo tee /proc/sys/vm/swappiness
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf

要防止文件对所有人都可读,您应该对交换文件设置正确的权限:

sudo chown root:root /swapfile 
sudo chmod 0600 /swapfile

全部归功于:Etel Sverdlov,地址:https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-12-04