Mysql正在采取更多&我的linux / Centos服务器上有更多内存

时间:2015-05-01 14:12:58

标签: mysql linux centos

我正在运行一个带16Go或RAM和1Go SWAP的专用服务器。 我在服务器上的实时统计数据显示,我的一半以上的ram和99%的SWAP都使用了我的:

/usr/libexec/mysqld --basedir?/usr --datadir?/home/mysql --user?mysql --log-error?/var/log/mysqld.log --pid-file?/var/run/mysqld/mysqld.pid --socket?/

它随着时间的推移不断增加,甚至重启mysql都不会改变它

enter image description here

我做的时候

 mysql> SHOW PROCESSLIST

我得到了结果

+------+-----------+-----------------+-------+---------+------+-------+------------------+
| Id   | User      | Host            | db    | Command | Time | State | Info             |
+------+-----------+-----------------+-------+---------+------+-------+------------------+
|    7 | root      | localhost:51312 | mysql | Sleep   |    5 |       | NULL             |
| 7156 | mailadmin | localhost:58878 | mail  | Sleep   | 3406 |       | NULL             |
| 9302 | mailadmin | localhost:32868 | mail  | Sleep   |  749 |       | NULL             |
| 9305 | mailadmin | localhost       | mail  | Sleep   |  747 |       | NULL             |
| 9802 | mailadmin | localhost       | mail  | Sleep   |    9 |       | NULL             |
| 9803 | mailadmin | localhost       | mail  | Sleep   |    9 |       | NULL             |
| 9807 | mailadmin | localhost       | mail  | Sleep   |    9 |       | NULL             |
| 9808 | mailadmin | localhost       | mail  | Sleep   |    9 |       | NULL             |
| 9825 | root      | localhost       | NULL  | Query   |    0 | NULL  | SHOW PROCESSLIST |
+------+-----------+-----------------+-------+---------+------+-------+------------------+
9 rows in set (0.00 sec)

free -m -l

告诉我:

  total       used       free     shared    buffers     cached
Mem:         16094      14431       1663          0       1318       5404
Low:         16094      14431       1663
High:            0          0          0
-/+ buffers/cache:       7708       8385
Swap:         1021        996         25

我不知道如何处理这件事。看起来我会达到服务器的RAM限制,这可能会导致速度变慢。

提前感谢您,我留在这里,随时准备为您提供更多信息。

2 个答案:

答案 0 :(得分:3)

我认为你被垃圾邮件发送了。您的邮件服务器收取太多邮件或发送邮件。最好检查传入/传出的邮件。

你会考虑设置Spamassasin / Amavisd或类似的东西吗?我想如果您关闭邮件服务器,您会看到它会降低,并且将通过垃圾邮件验证其邮件服务器。

答案 1 :(得分:2)

你的声明“重启mysql不会改变它”似乎暗示它不是mysqld使用所有内存。

查找使用最多内存的进程的基本方法,您可以运行htop并按其中一个内存列排序,例如VIRT。它可能不仅仅是一个进程,它可能是使用内存的整个进程。 (报告的部分内存是共享的,您不能只为mysql中的所有htop进程添加内存...,使用按键F5H获得“树视图”。

在这个例子中,mysql正在使用11G,73%的可用内存。这是预期的,因为这是我们分配的内容,其中大部分分配给InnoDB缓冲池。 (专用的MySQL服务器)

  PID USER     PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
19510 mysql     20   0 11.0G 5849M  3808 S 16.0 73.1 81h33:04 /opt/mysql/bin/mysqld --basedir=/opt/mysql --datadir=/opt/mysql_data --user=mysql --log-error=/
 1016 syslog    20   0  220M   940   580 S  0.0  0.0  5:28.12 rsyslogd -c4
 1651 root      20   0  145M  1100   784 S  0.0  0.0  8:26.81 /usr/sbin/automount
 1243 root      20   0 98496  1348  1036 S  0.0  0.0  3h19:31 /usr/sbin/vmtoolsd
13816 root      20   0 90868  1340   404 S  0.0  0.0  0:00.02 sshd: xxxxxx [priv]
13905 mysql     20   0 81548  1120   428 S  0.0  0.0  0:00.02 su - mysql
 1674 Debian-e  20   0 64724   408   332 S  0.0  0.0  0:09.08 /usr/sbin/exim4 -bd -q30m
 1030 root      20   0 63256   472   360 S  0.0  0.0  1:32.65 /usr/sbin/sshd
    1 root      20   0 61840   996   472 S  0.0  0.0  1:05.14 /sbin/init

(可能有更好的方法来查看使用内存的内容,但htop可以很好地向我展示正在运行的进程。)