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)
首先,就像在评论其他几个人,我非常关心minerd和brute过程。谷歌的一项小侦探工作表明,这些名称分别与比特币挖掘和自动网络流量生成(如:DDoS 攻击中的一个节点)相关,表明其他人可能出于自己的目的使用您的服务器。
解决这个问题(并请尽快修复),您可能还可以通过一些数据库调整来改进事情。鉴于RandomSeed 发布的分析表明您可能有未使用的 RAM,而是在磁盘上等待,以及您将 RAM 添加到服务器而没有对任何其他更改发表评论的说明,我怀疑您的 MySQL 缓冲池太小。
这归结为数据库服务器性能调优 101:磁盘速度慢,内存速度快。数据库喜欢在内存中预加载或缓冲数据和索引,以减少需要去较慢的硬盘驱动器。MySQL 有一些配置设置,用于控制允许缓存的数据量。如果您向服务器添加内存,但不更改这些 MySQL 设置,通过确保其他(非 MySQL)进程有足够的 RAM 来运行会有所帮助,但它不会对您的核心数据库性能有很大帮助; 您还需要告诉 MySQL 您添加的新内存。
那么,该怎么做呢?就 MySQL 而言,这有点棘手,因为 MySQL 支持多种存储引擎。您可能正在使用 InnoDB,但也可能使用 MyISAM,或者甚至将两者混合用于不同的表。不幸的是,如果不知道哪些表使用什么存储引擎,以及(如果有混合)查询大小和容量,就很难准确地建议如何更改 MySQL 配置。
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |