我们认为问题已经解决了.但是,升级RAM后,内存使用量不断增加.它总是达到其最大使用率(例如,从7.8 GB内存中免费456.5 MB).第二天,服务器完全关闭,我们不得不请求技术支持再次为我们重启服务器.每当我们遇到问题时,我们都要请支持人员为我们重启服务器.据支持人员介绍,如果他们进行了sql访问,内存将恢复正常.但如果他们再次上场,记忆力将再次升高.因此,他们怀疑问题与SQL查询有关.
我想问一下,问题真的是SQL查询吗?还是硬件问题?如果是sql,我怎么知道哪些查询占用了如此巨大的内存?我怎么检查呢?我们的服务器正在运行以下详细信息:
- 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%
执行’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
我希望有人可以给我一些建议,因为我已经面对这个问题一段时间了,我没有人可以寻求指导.先感谢您.
更新: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
今天的TOP结果:
- top - 10:42:47 up 3 days,1:35,load average: 4.35,4.53,4.59
- Tasks: 187 total,182 sleeping,0 zombie
- cpu(s): 12.7%us,38.5%sy,0.0%ni,48.7%id,7800156k used,373216k free,1653768k buffers
- Swap: 2096376k total,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
解决方法
解决这个问题(请快速解决),您也可以通过一些数据库调优来改进.鉴于analysis posted by RandomSeed您可能有未使用的RAM,而是在磁盘上等待,并且注意到您在没有任何其他更改的评论的情况下将RAM添加到服务器,我怀疑您的MysqL缓冲池太小.
这归结为数据库服务器性能调优101:磁盘速度慢,内存速度快.数据库喜欢在内存中预加载或缓冲数据和索引,以减少需要外出到较慢的硬盘驱动器. MysqL有一些配置设置可以控制允许像这样缓存多少数据.如果您向服务器添加内存,但不更改这些MysqL设置,那么通过确保其他(非MysqL)进程有足够的RAM来帮助它会有所帮助,但它不会对您的核心数据库性能有很大帮助;你还需要告诉MysqL你添加的新内存.
那么,该怎么做?在MysqL的情况下,它有点棘手,因为MysqL支持多个存储引擎.您可能正在使用InnoDB,但也可能使用MyISAM,甚至可以将两者混合用于不同的表.不幸的是,在不知道哪些表使用什么存储引擎,以及(如果有混合)查询大小和卷的情况下,很难准确地告知如何更改MysqL配置.