服务器内存占用近8GB

ver*_*lee 3 mysql linux memory

最近,我们的服务器面临内存问题。从几周前开始,我们的服务器加载非常缓慢。访问电子邮件和网站确实花费了太长时间。然后我们要求服务器技术支持为我们重新启动服务器。重启后,一切恢复正常。我们认为是时候升级 RAM 了。最初我们的服务器上只有 2GB RAM,因此我们将其升级为 8GB。

我们以为问题解决了。但是,升级RAM后,内存使用率越来越高。它就像总是达到其最大使用量(例如 7.8 GB 内存中有 456.5 MB 可用)。第二天,服务器完全宕机,我们不得不请求技术支持再次为我们重新启动服务器。每次遇到问题,都得请支持人员帮我们重启服务器。据支持人员介绍,如果他们的 SQL 访问,内存将恢复正常。但如果他们再上一次,内存会再次变高。因此,他们怀疑问题出在 SQL 查询上。

我想问一下,真的是SQL查询出问题吗?或者是硬件问题?如果是SQL,我怎么知道什么样的查询占用了这么大的内存?我该如何检查?我们的服务器正在运行以下详细信息:

OS: Linux 2.6.18
CPU: GenuineIntel, Intel(R)Xeon(R)CPU W3550 @ 3.07GHz
Average Load: 808.18;674.21;587.18
database records: 421,031 with 58 tables
Run Code Online (Sandbox Code Playgroud)

我可以从 PHPMyAdmin 提供的查询统计信息:

select  314 k   11.98 k 66.37%
set option  34 k    1,296.59    7.18%
show fields 19 k    712.00  3.94%
update  16 k    620.61  3.44%
alter table 16 k    610.32  3.38%
change db   15 k    569.08  3.15%
insert  15 k    560.20  3.10%
show variables  11 k    434.01  2.40%
show tables 9,752   371.66  2.06%
begin   7,172   273.33  1.51%
Run Code Online (Sandbox Code Playgroud)

执行“top”的结果:

top - 15:20:07 up 1 day,  6:13,  1 user,  load average: 497.30, 512.17, 542.15
Tasks: 7743 total,   5 running, 7738 sleeping,   0 stopped,   0 zombie
Cpu(s): 23.9%us, 50.9%sy,  0.1%ni, 25.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8173372k total,  8048380k used,   124992k free,  1816952k buffers
Swap:  2096376k total,      216k used,  2096160k free,   533876k cached
Run Code Online (Sandbox Code Playgroud)

我希望有人能给我一些建议,因为我已经面临这个问题一段时间了,而且我没有人可以寻求指导。先感谢您。

更新: dmesg

CPU5: Temperature above threshold, cpu clock throttled
CPU7: Temperature/speed normal
CPU2: Temperature/speed normal
CPU6: Temperature/speed normal
CPU1: Temperature above threshold, cpu clock throttled
CPU3: Temperature/speed normal
CPU0: Temperature/speed normal
CPU4: Temperature/speed normal
CPU6: Temperature/speed normal
CPU5: Temperature/speed normal
CPU1: Temperature/speed normal
CPU2: Temperature/speed normal
CPU4: Temperature/speed normal
CPU7: Temperature/speed normal
CPU0: Temperature/speed normal
CPU3: Temperature/speed normal
brute[19592]: segfault at 0000000000000028 rip 00000000080a592f rsp 00000000ffae3a28 error 6
brute[19539]: segfault at 0000000000000028 rip 00000000080a592f rsp 00000000ffae3a28 error 6
CPU2: Temperature/speed normal
CPU4: Temperature/speed normal
CPU7: Temperature/speed normal
CPU1: Temperature/speed normal
CPU5: Temperature/speed normal
CPU3: Temperature/speed normal
CPU6: Temperature/speed normal
CPU0: Temperature/speed normal
CPU0: Temperature/speed normal
CPU7: Temperature/speed normal
CPU6: Temperature/speed normal
CPU1: Temperature/speed normal
CPU2: Temperature/speed normal
CPU3: Temperature/speed normal
CPU5: Temperature/speed normal
CPU4: Temperature/speed normal
brute[21368]: segfault at 0000000000000000 rip 0000000008048f03 rsp 00000000ffb82db0 error 4
Run Code Online (Sandbox Code Playgroud)

今天的TOP结果:

top - 10:42:47 up 3 days,  1:35,  1 user,  load average: 4.35, 4.53, 4.59
Tasks: 187 total,   5 running, 182 sleeping,   0 stopped,   0 zombie
Cpu(s): 12.7%us, 38.5%sy,  0.0%ni, 48.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8173372k total,  7800156k used,   373216k free,  1653768k buffers
Swap:  2096376k total,      216k used,  2096160k free,  2723732k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
27913 consulti  25   0 31096 3700 1172 R 100.2  0.0   1484:40 perl
27916 consulti  25   0 31096 3732 1204 R 100.2  0.0   1051:59 perl
28213 consulti  25   0 31096 3736 1204 R 100.2  0.0   1073:30 perl
28210 consulti  23   0 31096 3740 1204 S 86.9  0.0   1016:23 perl
 3205 mysql     15   0  333m  55m 5416 S 13.6  0.7 143:36.73 mysqld
14616 apache    15   0  333m  33m 6056 S  4.7  0.4   1:02.12 httpd
25104 consulti  18   0 31096 3732 1204 R  4.7  0.0 486:12.74 perl
 2702 root      15   0 12744 1148  808 R  0.3  0.0   0:00.01 top
    1 root      15   0 10352  696  588 S  0.0  0.0   0:01.62 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.07 migration/0
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/0
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/1
    6 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1
    7 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/1
    8 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/2
    9 root      34  19     0    0    0 S  0.0  0.0   0:00.02 ksoftirqd/2
   10 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/2
   11 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/3
   12 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/3
   13 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/3
   14 root      RT  -5     0    0    0 S  0.0  0.0   0:00.05 migration/4
   15 root      34  19     0    0    0 S  0.0  0.0   0:00.01 ksoftirqd/4
   16 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/4
   17 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/5
Run Code Online (Sandbox Code Playgroud)

Joe*_*oel 6

首先,就像在评论其他几个人,我非常关心minerdbrute过程。谷歌的一项小侦探工作表明,这些名称分别与比特币挖掘和自动网络流量生成(如:DDoS 攻击中的一个节点)相关,表明其他人可能出于自己的目的使用您的服务器。

解决这个问题(并请尽快修复),您可能还可以通过一些数据库调整来改进事情。鉴于RandomSeed 发布分析表明您可能有未使用的 RAM,而是在磁盘上等待,以及您将 RAM 添加到服务器而没有对任何其他更改发表评论的说明,我怀疑您的 MySQL 缓冲池太小。

这归结为数据库服务器性能调优 101:磁盘速度慢,内存速度快。数据库喜欢在内存中预加载或缓冲数据和索引,以减少需要去较慢的硬盘驱动器。MySQL 有一些配置设置,用于控制允许缓存的数据量。如果您向服务器添加内存,但不更改这些 MySQL 设置,通过确保其他(非 MySQL)进程有足够的 RAM 来运行会有所帮助,但它不会对您的核心数据库性能有很大帮助; 您还需要告诉 MySQL 您添加的新内存。

那么,该怎么做呢?就 MySQL 而言,这有点棘手,因为 MySQL 支持多种存储引擎。您可能正在使用 InnoDB,但也可能使用 MyISAM,或者甚至将两者混合用于不同的表。不幸的是,如果不知道哪些表使用什么存储引擎,以及(如果有混合)查询大小和容量,就很难准确地建议如何更改 MySQL 配置。