我正在运行一个带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都不会改变它
我做的时候
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限制,这可能会导致速度变慢。
提前感谢您,我留在这里,随时准备为您提供更多信息。
答案 0 :(得分:3)
我认为你被垃圾邮件发送了。您的邮件服务器收取太多邮件或发送邮件。最好检查传入/传出的邮件。
你会考虑设置Spamassasin / Amavisd或类似的东西吗?我想如果您关闭邮件服务器,您会看到它会降低,并且将通过垃圾邮件验证其邮件服务器。
答案 1 :(得分:2)
你的声明“重启mysql不会改变它”似乎暗示它不是mysqld
使用所有内存。
查找使用最多内存的进程的基本方法,您可以运行htop
并按其中一个内存列排序,例如VIRT
。它可能不仅仅是一个进程,它可能是使用内存的整个进程。 (报告的部分内存是共享的,您不能只为mysql
中的所有htop
进程添加内存...,使用按键F5
和H
获得“树视图”。
在这个例子中,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
可以很好地向我展示正在运行的进程。)